我們的 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。有兩個細節很重要:
- 在重型服務啟動前套用此設定。我們的限制服務最初在開機後約 15 秒執行,當時模型伺服器已開始以滿功率載入,而那正是導致機器當機的時刻。現在它在 Docker 啟動前執行。
- 在負載下檢查。啟用上限後,GPU 閒置時回報的時脈仍約為 2,400 MHz。在負載下則維持在 1,976 MHz。
第二項修正:分級熱防護機制
僅靠上限在渲染介入後已不足夠,因此防護機制現在每秒讀取每個感測器,並分級行動:從 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 天(截至我們撰寫此文時)。
我們沿途犯下的四個錯誤
- 暫停單一工作並未冷卻機器。煞車在渲染器已暫停時觸發,因為一個影像模型仍在繪製,且十幾個排程器在同一分鐘啟動。最高層級現在會暫停所有重型 GPU 工作,而不只是渲染器。
- 防護機制按名稱暫停工作,但名稱變了。有兩次新引擎幾乎逃過暫停:九月份一個具有新程序名稱的影像模型,以及十月份一個在容器中運行而非作為渲染服務子進程的渲染器。現在每次更換引擎時,都會檢查防護機制的清單。
- 煞車的保持狀態從未解除。它停止了影片服務並留下保持檔案,導致沒有任何東西重新啟動它。也沒有任何警示通知任何人,輸出停止三天後我們才注意到。現在保持狀態會自行解除:在最後一次煞車後五分鐘,若沒有新的煞車、至少有 30 GB 可用記憶體,且十分鐘平均溫度為 93 °C 或更低。等待機器冷卻從來就不是可行的方法:無論是否進行渲染,平均溫度都是 88 °C。
- 警報是在機器的正常溫度時響起的。 警示閾值設為 88 °C,但這正是該機器的平均溫度。在一天之內,它有 32% 的時間處於 90 °C 或以上,8% 的時間處於 93 °C 或以上,3% 的時間處於 95 °C 或以上,且從未達到 97 °C。我們將警報調整至 97 °C,也就是它實際過熱停機的溫度區間,警報郵件隨即停止發送。
重點整理
軟體讓這台機器維持運作,但根本原因在於物理層面:它的散熱效能比同系列其他機器差兩到三倍。如果 GB10 機器在負載下自行關機,請先檢查氣流。接著,在您的服務啟動前限制 GPU 時脈,在機器達到極限前暫停繁重的工作,並根據它實際運作的溫度設定警報。
Factory Floor 包含此類熱防護機制:它會讀取 GPU 與熱區感測器中的最高溫度,在您設定的溫度(預設為 92 °C)暫停您指定的繁重工作,僅在低於較低溫度(84 °C)時才恢復執行,並配有記憶體與磁碟防護機制。