我们的 GB10 机器总是自动关机。日志显示是内存问题,但其实是过热。

运维

我们三台 NVIDIA GB10 机器中的一台在九月的四天内黑屏了三次:9 月 10 日、9 月 12 日(关机持续了 17 小时)以及 9 月 13 日(重新开机后 12 分钟)。每次都需要有人按下电源按钮。

过热关机的样子

系统日志在运行中途戛然而止,其中没有关机记录:硬断电不会给 journald 留出写入缓冲区的时间。七月,在一次类似的关机后,时钟甚至回到了旧日期。而负责重启挂起机器的硬件看门狗也无动于衷,因为机器并没有挂起:电源断了。

错误的线索

每次死机前的最后几行内核日志都是 GPU 内存不足错误(NV_ERR_NO_MEMORY),因此内存看起来是罪魁祸首。其实不是。这些行只是内核写入的最常见内容:在一次持续运行 19 天后结束的启动中,就有 440,580 条这样的记录。当某行日志出现得如此频繁时,它往往就是任何事件前的最后一行。在归咎于某条日志之前,先统计一下它在一切正常时出现的频率。

正确的线索

由于断电会导致日志丢失最后几分钟,我们添加了一个小型采样器,每分钟将温度、负载和内存写入文件并刷新到磁盘。它捕捉到了七月以来的全部五次死机。每次死机都发生在 GPU 满载(96%)时,CPU 温度为 85 到 97 °C。

时间线解释了其余情况。九月初前后,我们将视频渲染任务移到了这台机器上。其 GPU 在满载下的功耗从约 24 W 升至 46 W,GPU 中位温度从 68 °C 升至 86 °C,CPU 温度达到 95 °C 或更高的每周分钟数从零升至 4,283 分钟。我们另外两台 GB10 机器以同样的 96% 负载运行语言模型,温度保持在 65 到 81 °C。这台机器只是散热更差。

第一个修复方案:限制 GPU 时钟

在 GB10 上,nvidia-smi 无法设置功率限制,但可以限制 GPU 时钟:nvidia-smi -lgc 0,2000。七月,这在几秒内将最高温区从 91 °C 降至 77 到 83 °C。有两个细节很重要:

第二个修复:分步热防护机制

当渲染任务介入后,仅靠上限已不足够,因此防护机制现在每秒读取一次所有传感器,并分步执行:从 89 °C 开始降低 GPU 时钟频率,从 92 °C 开始再次降低;从 94 °C 开始暂停渲染器(SIGSTOP)并降低 CPU 速度;从 96 °C 开始暂停所有 GPU 任务,直到冷却所需的时间。只有在机器保持较冷状态一段时间后,它才会逐步恢复。如果在 97 °C 持续 20 秒,最后手段的制动机制将完全停止视频服务。

在渲染任务开始后的前九分钟内,最热区域峰值为 94 °C,中位数为 89 °C,而此前曾出现 97 °C 的平台期。这有代价:在九月中旬的一天,渲染器有 17% 的时间处于暂停状态,且 GPU 在一天的大部分时间里运行在 900 MHz 或更低频率。这也不是根治方案:机器在 10 月 11 日再次自行关机,温度为 97 至 98 °C。自那以后,它已连续运行,截至我们撰写本文时已运行 20 天。

我们沿途犯下的四个错误

要点

软件让这台机器保持运行,但根本原因是物理性的:其散热性能比同系列其他机器差两到三倍。如果 GB10 机器在负载下自动关机,请先检查气流。然后在服务启动前限制 GPU 时钟频率,在机器达到极限前暂停重型任务,并根据其实际运行温度设置报警。

Factory Floor 包含此类过热防护机制:它读取 GPU 和热区传感器中的最高温度,在设定温度(默认 92 °C)暂停您指定的重型任务,并仅在温度低于较低阈值(84 °C)时恢复运行,同时配有内存和磁盘防护机制。

已更新: