GB10 makinemiz kendini kapatmaya devam ediyordu. Günlük kaydı belleği suçluyordu; sorun ısıydı
Operasyonlar
Üç NVIDIA GB10 makinemizden biri, Eylül ayında dört gün içinde üç kez kapandı: 10 Eylül'de, 12 Eylül'de (17 saat kapalı kaldı) ve 13 Eylül'de, tekrar açıldıktan on iki dakika sonra. Her seferinde güç düğmesine basması için birine ihtiyaç duyuldu.
Bir ısı kaynaklı kapanma nasıl görünür
Sistem günlüğü, ortasında bir kapanma olmadan, faaliyet sırasında aniden durdu: Sert bir güç kesintisi, journald'ın tamponunu yazmasına zaman tanımaz. Temmuz ayında, benzer bir kapanmanın ardından saat bile eski bir tarihle geri geldi. Ve takılan bir makineyi yeniden başlatan donanım gözetim mekanizması hiçbir şey yapmadı, çünkü makine takılmamıştı: Güç kesilmişti.
Yanlış olan ipucu
Her kapanmadan önceki son çekirdek satırları GPU bellek yetersizliği hatalarıydı (NV_ERR_NO_MEMORY), bu yüzden bellek suçlu görünüyordu. Öyle değildi. Bu satırlar, çekirdeğin yazdığı en yaygın şeylerdi: Sadece 19 gün çalışıp sona eren tek bir açılışta 440.580 tanesi vardı. Bir satır bu kadar sık göründüğünde, her şeyden önceki son satır o olacaktır. Bir günlük satırını suçlamadan önce, hiçbir şey yanlış gitmediğinde ne sıklıkla göründüğünü sayın.
Doğru olan ipucu
Günlük, bir güç kesintisinde son dakikalarını kaybettiği için, her dakika sıcaklıkları, yükü ve belleği bir dosyaya yazan ve diske akıtan küçük bir örnekleyici eklemiştik. Temmuz'dan bu yana beş kapanmanın tamamını yakaladı. Her biri tam GPU yükünde (%96), CPU 85 ile 97 °C arasındayken gerçekleşti.
Zamanlama gerisini açıkladı. Eylül'ün başlarında video işlemeyi bu makineye taşımıştık. Tam yük altında GPU gücü yaklaşık 24 W'tan 46 W'a, medyan GPU sıcaklığı 68'den 86 °C'ye ve CPU'nun 95 °C veya üzerinde olduğu dakika sayısı haftada sıfırdan 4.283'e çıktı. Aynı %96 yükte dil modelini çalıştıran diğer iki GB10 makinemiz 65 ile 81 °C arasında kaldı. Bu makine sadece daha kötü soğuyordu.
İlk düzeltme: Bir GPU saat sınırı
GB10'da nvidia-smi bir güç sınırı ayarlayamaz, ancak GPU saatini sınırlayabilir: nvidia-smi -lgc 0,2000. Temmuz'da bu, en sıcak bölgeyi saniyeler içinde 91 °C'den 77 ile 83 °C'ye düşürdü. İki detay önemlidir:
- Ağır hizmetler başlamadan önce uygulayın. Sınır hizmetimiz ilk olarak, model sunucusunun tam güçle yüklenmeye başladığı, makineyi çökerten an olan, açılıştan yaklaşık 15 saniye sonra çalışıyordu. Artık Docker başlamadan önce çalışıyor.
- Yük altında kontrol edin. Sınırlama açıkken, GPU boşta olsa bile raporlanan GPU saat hızı hâlâ yaklaşık 2.400 MHz gösterir. Yük altında ise 1.976 MHz’de sabit kalır.
İkinci düzeltme: kademeli bir sıcaklık güvenlik kısıtı
Sınırlama, render işlemi devreye girdikten sonra yeterli olmadı; bu yüzden bir güvenlik kısıtı artık her saniye tüm sensörleri okuyor ve kademeli olarak müdahale ediyor: 89 °C’den itibaren daha düşük bir GPU saat hızı ve 92 °C’den itibaren tekrar daha düşük bir hız; 94 °C’den itibaren render motoru duraklatılıyor (SIGSTOP) ve CPU yavaşlatılıyor; 96 °C’den itibaren soğumaya yetecek kadar saniye boyunca tüm GPU işleri duraklatılıyor. Sistem bir süre daha serin kaldıktan sonra kademeli olarak eski haline dönüyor. 97 °C’de 20 saniye boyunca son çare freni, video servisini tamamen durduruyor.
Render altında ilk dokuz dakikasında, en sıcak bölge 94 °C’de zirve yaptı ve medyan değer 89 °C oldu; önceden 97 °C’de plato yapan değerlere karşılık. Bunun bir bedeli var: Eylül ortasında bir gün, render motoru zamanın %17’sinde duraklatıldı ve GPU günün büyük bölümünde 900 MHz veya altında çalıştı. Bu bir çözüm de değil: makine 11 Ekim’de, 97-98 °C’de bir kez daha kendini kapattı. O zamandan beri kesintisiz çalışıyor; bunu yazarken 20 gün oldu.
Yolda yaptığımız dört hata
- Bir işi duraklatmak makineyi soğutmadı. Render motoru zaten duraklatılmışken fren devreye girdi, çünkü bir görüntü modeli hâlâ çizim yapıyordu ve aynı dakikada bir düzine zamanlayıcı başladı. Üst kademe artık sadece render motorunu değil, tüm ağır GPU işlerini duraklatıyor.
- Güvenlik kısıtı işleri isimlerine göre duraklatıyor ve isimler değişti. İki kez yeni bir motor duraklatmadan kaçabilirdi: Eylül’de yeni bir süreç adına sahip bir görüntü modeli ve Ekim’de render servisinin alt süreci olarak değil, bir konteyner içinde çalışan bir render motoru. Artık her motor değişikliğinde güvenlik kısıtının listesi de kontrol ediliyor.
- Frenin bekleme durumu hiç kalkmadı. Video servisini durdurdu ve hiçbir şeyin yeniden başlatmaması için bir bekleme dosyası bıraktı. Kimseye uyarı da gitmedi ve fark edene kadar üç gün boyunca çıktı durdu. Bekleme durumu artık kendiliğinden kalkıyor: son frenden beş dakika sonra, yeni bir fren yoksa, en az 30 GB boş bellek varsa ve on dakikalık ortalama 93 °C veya altındaysa. Makinenin soğumasını beklemek hiç işe yaramayacaktı: render olsun veya olmasın ortalama 88 °C’deydi.
- Alarm, makinenin normal sıcaklığında çaldı. Uyarı eşiği 88 °C idi; bu, makinenin ortalamasıydı. Bir gün boyunca zamanın %32’sinde 90 °C veya üzerinde, %8’inde 93 °C veya üzerinde ve %3’ünde 95 °C veya üzerinde kaldı, ancak hiç 97 °C’ye ulaşmadı. Alarmı, makinenin gerçekten durduğu düzlem olan 97 °C’ye taşıdık ve alarm e-postaları durdu.
Çıkarılacak ders
Yazılım bu makineyi ayakta tuttu ancak neden fizikseldi: Soğutma performansı, kardeşlerine göre iki ila üç kat daha kötüydü. Bir GB10 makinesi yük altında kendini kapatıyorsa, önce hava akışını kontrol edin. Ardından servisleriniz başlamadan önce GPU saat hızını sınırlayın, makine limitine ulaşmadan önce ağır işleri duraklatın ve alarmları makinenin gerçekten çalıştığı sıcaklıklara göre ayarlayın.
Factory Floor, bu tür bir ısı güvenlik kısıtı içerir: GPU ve termal bölge sensörlerinden en yüksek değeri okur, belirlediğiniz bir sıcaklıkta (varsayılan 92 °C) adını verdiğiniz ağır işleri duraklatır ve yalnızca daha düşük bir sıcaklığın (84 °C) altında yeniden başlatır; yanında bellek ve disk güvenlik kısıtları bulunur.