我們的 GB10 機器曾自行關機。日誌指向記憶體問題,但真正原因是過熱。

維運

我們三台 NVIDIA GB10 機器中的一台,在九月的四天內三次停機:9 月 10 日、9 月 12 日(停機達 17 小時)以及 9 月 13 日(重新開機後十二分鐘)。每次都需要有人按下電源按鈕才能恢復。

過熱關機的樣貌

系統日誌在活動中途直接停止,其中沒有關機記錄:硬關機不會給 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)時才恢復執行,並配有記憶體與磁碟防護機制。

已更新: