Ošetření selhání v klastrech AI: Co se skutečně porouchá a jak se z toho zotavit
Distribuované školení je jedinou pracovní zátěží, kde selhání hardwaru nejsou vzácnou nepříjemností – jsou provozní daní, kterou platíte nepřetržitě. Meta ve svém pozdější analýze Llama 3.1 405B zaznamenala 419 neočekávaných přerušení během 54 dnů na clusteru s 16 384 GPU: jednu událost každé tři hodiny, přičemž zhruba polovinu z nich představují chyby GPU a HBM. To je ustálený stav při náročném provozu tisíců GPU.
Většina zákazníků Kentina se s takovými čísly nikdy nesetká. Jemné ladění 8GPU s jedním uzlem je statisticky tiché. Ale režimy selhání, diagnostické nástroje a vzorce obnovy jsou stejné. Tento článek je poctivým katalogem: co selhává, jak si toho všimnete, co s tím děláte a kde se v našem měřítku inženýrské úsilí skutečně vyplatí.
Skutečné režimy selhání
Důležité jsou dvě kategorie – hardwarové události (GPU, PSU, NIC, disk provádí nějakou fyzickou akci) a softwarové události (CUDA, NCCL, framework, operační systém reaguje špatně na přechodové jevy). Níže je uvedeno zhruba, jak často se každá z nich projevuje na pracovní stanici s více GPU nebo v malém clusteru.
Chyby XID GPU
Protokoly jádra (dmesg, journalctl -k) jsou zdrojem pravdy. NVIDIA při jakékoli chybě GPU vygeneruje řádek XID. Ty, které skutečně vidíte:
| XID | Význam | Co to doopravdy znamená |
|---|---|---|
| 13 | Výjimka grafického enginu | Chyba aplikace, nelegální přístup k paměti — obvykle CUDA OOM |
| 31 | Chyba stránky paměti GPU | Chyba aplikace nebo problém s ovladačem, občas vadná VRAM |
| 43 | Zastaveno zpracování | Problém na straně aplikace, GPU je v pořádku |
| 48 | Dvoubitová chyba ECC | Hardware. Paměťová buňka je pryč, grafická karta by měla být vyřazena. |
| 63 | Čeká se na vyřazení stránky ECC / přemapování řádků | Degradace hardwaru. Naplánujte si výměnu. |
| 74 | Chyba NVLinku | Porucha kabelu, stoupačky nebo desky |
| 79 | GPU vypadlo z autobusu | Napájení, PCIe, rozšiřující karta nebo tepelné vybití |
| 92 | Vysoká míra chybovosti jednobitového ECC | Degradace hardwaru |
| 94 | Chyba ECC (třída Hopper) | Jedna úloha ukončena, GPU stále běží |
| 119 | Časový limit RPC GSP | Problém s ovladačem/firmwarem, často vyřešený restartem |
Dvě poznámky z vlastní zkušenosti:
- Zákazníci panikaří kvůli XID 79. „GPU zmizela.“ U sestavy s 4× nebo 8× riser je XID 79 téměř vždy problém s riserem PCIe, napájecím konektorem, který se odpojil při teplotních cyklech, nebo tepelným vypnutím – neznamená to nefunkční GPU. Před RMA znovu usaďte, znovu zapojte kabel a znovu otestujte.
- XID 48 a 63 jsou skutečné. Vady ECC se u intenzivně používaných karet objevují v průběhu měsíců. GPU automaticky vyřazuje stránky, dokud nedojde volné řádky. Poté je karta pro trénování nebezpečná; většina operátorů ji vymění.
Nedostatek paměti v CUDA uprostřed běhu
Nejčastější chyba trénování na našem hardwaru a téměř vždy chyba operátora, nikoli hardwaru. Typický vzorec: trénování probíhá bez problémů po dobu 200 kroků, poté se zhroutí s... CUDA error: out of memoryPříčinou je obvykle:
- Aktivační paměť roste s délkou sekvence — delší vzorky později v epoše překračují rozpočet.
-
Partnerský proces na stejném GPU.
nvidia-smizobrazuje dva PIDy; jeden měl být ukončen, ale nebyl. -
Fragmentace paměti. Alokátor mezipaměti v PyTorchu odmítá velký souvislý blok i s dostatečnou volnou pamětí. Oprava:
PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True.
Zdvojnásobení výkonu GPU nepomůže. Správnou odpovědí je snížení velikosti mikrodávek, povolení gradientního kontrolního bodování nebo shardování optimalizátoru (viz K02).
Časové limity NCCL a síťové závady
Kolektivy NCCL (all_reduce, all_gather, reduce_scatter) jsou synchronní napříč všemi ranky. Pokud se jedna rank zastaví – vadná síťová karta, přetížený přepínač, závada plánovače jádra, pomalá jedna grafická karta – každá další rank čeká na další kolektiv a celá úloha se zablokuje. Bez asynchronní úpravy chyb je zastavení tiché; úloha se zdá být „zaseknutá“, dokud nedojde k vypršení časového limitu watchdogu (výchozí hodnota je 30 minut).
Oprava spočívá v jedné proměnné prostředí:
export TORCH_NCCL_ASYNC_ERROR_HANDLING=1
export TORCH_NCCL_TRACE_BUFFER_SIZE=20000 # for post-mortem analysis
PyTorch poté přeruší s příkazem SIGABRT na kolektivu s vypršeným časovým limitem. V kombinaci s torchelastic se úloha restartuje od posledního kontrolního bodu. Poznámka: starší NCCL_ASYNC_ERROR_HANDLING je zastaralé.
Odpojení uzlu a selhání zdroje napájení
Na víceuzlových clusterech může uzel vypadnout z důvodu resetu síťové karty, výpadku portu přepínače, paniky jádra, zásahu OOM-killer nebo události napájení. Detekce je stejná jako u časového limitu NCCL. Pro sestavení s jedním uzlem a 8 GPU – většina našich zákazníků – se tato kategorie nepoužije.
Mrtvý zdroj je vážná chyba. Na serveru s 8 grafickými kartami a duální ATX zdroje v konfiguraci s dělenými lištami, selhání zdroje napájení ne Stejná redundance. Zdroj PSU A napájí GPU 0–3, zdroj PSU B napájí GPU 4–7. Při ztrátě zdroje PSU B se čtyři GPU během milisekund ztratí na hodnotě XID 79. Obnova znamená fyzickou výměnu. Skutečná redundance vyžaduje jednotky CRPS v konfiguraci 1+1 s možností výměny za provozu, což je sestava serverové třídy, nikoli pracovní stanice s GPU pro spotřebitele.
Chyby zápisu do úložiště během kontrolního bodu
Méně časté, ale bolestivé. Úloha běží deset hodin, dosáhne kontrolního bodu a zápis selže, protože NFS server je plný, lokální NVMe překročil alokaci DWPD a přechází do režimu pouze pro čtení, byl dosažen limit inode nebo byla změněna oprávnění. Poškození je úměrné intervalu kontrolních bodů; pokud to zachytíte pouze na další pokusem můžete ztratit hodinu nebo i více.
Pomalé úniky ECC
Tichý zabiják. GPU začne vysílat XID 92 (jednobitový ECC) jednou týdně, poté denně a nakonec každou hodinu. Každá událost je „zadržena“ a úloha pokračuje v běhu, ale přesnost se snižuje a ztráta trénování pomalu vede k vzestupnému trendu. Než si toho někdo všimne, stovky stránek jsou vyřazeny a karta směřuje k XID 48. Proto je monitorovací sekce důležitější než sekce obnovy.
Detekce – na co se dívat
Tři vrstvy: úroveň jádra (řádky XID v dmesg), dodavatel GPU (exportér DCGM do Prometheusu, dcgmi diag pro aktivní kontroly) a na úrovni frameworku (watchdog PyTorch, vyrovnávací paměť trasování NCCL, upozornění na ztrátu/propustnost).
Důležitá upozornění:
- Žádný
XID 48 / 63 / 79 / 92řádek v dmesg → stránka - Teplota GPU > 85 °C po dobu delší než 5 minut → strana
- Zvyšování počtu volatilních chyb ECC → tiket, nikoli stránka
- DCGM
dcgm_thermal_violationnenulové → problém s chlazením, zkontrolujte proudění vzduchu - Tréninková ztráta se nesnižuje po více než 100 krocích → stojí za to se podívat
Příklady skutečných protokolů selhání
Co ve skutečnosti vidíte v journalctl -k když se aktivuje XID 79 (RTX 5090, stoupající kabel se v důsledku tepelného cyklování vymrštil):
Apr 22 03:14:17 kentino-ai-04 kernel: NVRM: Xid (PCI:0000:c1:00): 79, pid='<unknown>', name=<unknown>, GPU has fallen off the bus.
Apr 22 03:14:17 kentino-ai-04 kernel: NVRM: GPU 0000:c1:00.0: GPU is on Board .
Apr 22 03:14:17 kentino-ai-04 kernel: NVRM: A GPU crash dump has been created. If possible, please run
Apr 22 03:14:17 kentino-ai-04 kernel: NVRM: nvidia-bug-report.sh as root to collect this data before
Apr 22 03:14:17 kentino-ai-04 kernel: NVRM: the NVIDIA kernel module is unloaded.
Jak vypadá zkráceně časový limit NCCL:
[E ProcessGroupNCCL.cpp:475] [Rank 3] Watchdog caught collective operation timeout:
WorkNCCL(SeqNum=842, OpType=ALLREDUCE, NumelIn=268435456, NumelOut=268435456,
Timeout(ms)=1800000) ran for 1800321 milliseconds before timing out.
[E ProcessGroupNCCL.cpp:489] [Rank 3] Some NCCL operations have failed or timed out.
terminate called after throwing an instance of 'std::runtime_error'
Hlásí to 3. místo, ale 3. místo téměř nikdy není skutečným problémem. Pomalé místo je to, které nedorazilo. Vyrovnávací paměť trasování NCCL ukládá, které místa byla blokována při kterém volání – takhle najdete skutečného viníka.
Vzory zotavení
Kontrolujte dostatečně často, aby byl restart levný
Pro 7B jemné ladění na 8× RTX 5090 s lokálními NVMe kontrolními body: ~14 GB zapsaných rychlostí ~3 GB/s ≈ 5 s na kontrolní bod, každých 30 minut je 0.3% režie a ztráta v nejhorším případě je 15 minut. Pro 70B FSDP segmentovaný kontrolní bod na stejném hardwaru: ~140 GB segmentovaných na 8 GPU paralelně, podobná režie. Levné, udělej to.
Kompletní kontrolní bod před trénováním Llama-70B přes síťové úložiště běží o velikosti ~520 GB a může trvat 20+ minut; právě zde obchody třídy Meta zavádějí asynchronní stupňovité kontrolní body (rychlý lokální zápis, pomalé vypouštění do trvalého úložiště). U velikosti Kentina: kontrolní bod každých 15–30 minut do lokálního NVMe, synchronizace do NAS na konci běhu. Cokoli propracovanějšího je přehnané inženýrství.
Automatický restart s torchelastic
torchrun podporuje elastický trénink ihned po vybalení z krabice:
torchrun \
--nnodes=1:1 \
--nproc-per-node=8 \
--max-restarts=3 \
--rdzv-backend=c10d \
--rdzv-endpoint=localhost:29500 \
train.py --checkpoint-dir /mnt/nvme/ckpt
S TORCH_NCCL_ASYNC_ERROR_HANDLING=1, řetězec je: NCCL kolektiv se zasekne → PyTorch watchdog aktivuje → proces se přeruší pomocí SIGABRT → torchelastic ukončí sourozenecké pozice a restartuje od latest_checkpoint.ptCelková doba sekvence je obvykle 60–120 sekund. Přerušované záblesky se objevují. Trvalá chyba (GPU přešla na XID 79) spálí procesor. --max-restarts rozpočet a poté je v procesu zapojení člověk.
Provozní praxe
Největším faktorem ovlivňujícím náklady na selhání není kód pro obnovení – je to to, co děláte. před práce začíná.
Předletové kontroly
Před spuštěním čehokoli, co bude běžet déle než několik hodin, spusťte ověřovací sekvenci:
# 1. Per-GPU stress test — catches silent thermal/ECC issues
gpu-burn 600 # 10 minutes per GPU at full load
# 2. DCGM diagnostic — finds latent hardware faults
sudo dcgmi diag -r 3 # level 3 = thorough, ~15 min
# 3. NCCL fabric test — validates inter-GPU bandwidth on the box
mpirun -np 8 ./build/all_reduce_perf -b 8 -e 1G -f 2 -g 1
# 4. PyTorch dry-run — one step, full batch size, all ranks
torchrun --nproc-per-node=8 dryrun.py
| Kontrola | Úlovky |
|---|---|
gpu-burn |
Tepelné škrcení, tiché chyby ECC, které se objevují pouze při zátěži |
dcgmi diag |
Regrese šířky propojení PCIe, problémy s napájením, chyby paměti, NVLink |
nccl-tests |
Špatný rozšiřující modul, pomalá linka PCIe, nefunkční můstek NVLink, špatně nakonfigurovaný přepínač |
| zkušební provoz | OOM, chyby v kódu, zavaděč dat se zasekne, špatný tokenizátor |
Na čistém serveru s 8× RTX 5090, all_reduce_perf Měla by se pohybovat v rozmezí šířky pásma sběrnice 50–80 GB/s v závislosti na topologii PCIe. Výrazně nižší hodnota znamená problém s rozšiřujícím modulem nebo topologií – opravte ho před trénováním. V rámci předběžného testování kvality (PQA) na každé sestavě, která opouští Kentino, spouštíme gpu-burn po dobu celé hodiny.
Dávejte pozor na pomalé úniky
Reálné kódové základny hromadí paměť: logovací hook uchovává referenci tenzoru, cesta k výjimce zapomene vymazat buffer, plánovač LR uvolní uzávěr. Výsledkem je OOM v kroku 5000 z běhu o 10 000 krocích. Nejlevnější zmírnění: print torch.cuda.memory_allocated() každých N kroků do trénovacího logu. Pokud roste, nemělo by to tak být.
Statistická realita v měřítku Kentina
A tady záleží na upřímnosti ohledně velikosti. Míra selhání se zvyšuje s počtem hodin GPU; velké clustery selhávají neustále, protože v nich běží mnoho GPU po mnoho hodin.
| Konfigurace | Hodiny GPU/měsíc | Očekávané události hardwaru/měsíc |
|---|---|---|
| Jedna pracovní stanice, 4 GPU | 2,880 | ~0.05 – tj. jedenkrát za 1–2 roky |
| Jeden server, 8 GPU | 5,760 | ~0.1 — jednou ročně při intenzivním používání |
| Malý cluster, 32 GPU | 23,040 | ~0.5 — jednou za 2 měsíce |
| Malý cluster, 32 GPU 24/7 | Plný pracovní cyklus | ~1/měsíc |
| Hyperscale, 16 384 GPU | ~ 12 mil | 232/měsíc (Meta Llama 3) |
Odhady kalibrované podle metadat (jedno selhání na přibližně 50 000 pozorovaných hodin GPU). Skutečná čísla se liší podle modelu GPU – spotřebitelské grafické karty 4090 a 5090 s rozšiřujícími kartami selhávají častěji než datové karty L40 v nativních šasi, zejména kvůli opotřebení PCIe a napájecích konektorů.
Poučení: v měřítku s jedním uzlem a 8 GPU počítejte s jednou hardwarovou událostí za rok intenzivního používání, nikoli za týden. Většina jemných ladění se provede bez jakýchkoli problémů. Zákazníci, kteří je zaznamenají, provádějí nepřetržité školení a dominantním typem selhání je strana rozšiřující karty/napájecího zdroje, nikoli křemík GPU.
Cena restartu
Náklady na restart se skládají z ztráty času na školení plus času diagnostického technika. U sestavy s 8× RTX 5090, která stojí řekněme 300 EUR/den s amortizací, je dalších 30 minut 6 EUR. Čas technika na diagnostiku, opětovné zapojení kabelu a restart je jedna až tři hodiny. Ztráta výpočetních prostředků je způsobena zaokrouhlovací chybou; náklady jsou náklady na práci. Proto je správnou investicí monitorování a předběžná příprava, nikoli exotická infrastruktura pro obnovu.
Většina online obsahu o ošetřování selhání je napsána pro hyperscale vrstvu. U Kentina je většina obsahu přehnaně náročná. Pravidlo 80/20 je: monitorování protokolů jádra, kontrolní bod pro lokální NVMe, nastavení... TORCH_NCCL_ASYNC_ERROR_HANDLING=1Před velkými úlohami spusťte gpu-burn.
Co dělat dál
Pokud provozujete multi-GPU box v měřítku Kentino, konkrétní kroky:
- Nastavení exportéru DCGM + minimální upozornění Prometheus na chyby ECC a teplotní poruchy. Půl dne; zachytí 80 % pomalu se vyskytujících hardwarových problémů.
-
přidat
TORCH_NCCL_ASYNC_ERROR_HANDLING=1a--max-restarts=3k vašemu spouštěcímu skriptu dnes. Nulová námaha, zabraňuje zaseknutí přes noc. - Vyberte interval kontrolních bodů podle délky úlohy. Méně než 2 hodiny: neobtěžujte se. 2–24 hodin: každých 30 minut na lokální NVMe. Vícedenní: každých 15 minut s pravidelnou synchronizací do trvalého úložiště.
-
Běh
gpu-burnadcgmi diag -r 3po doručení, před prvním skutečným zatížením. Zachycuje karty DOA a poškození při přepravě. Opakovat čtvrtletně. - Než začnete vinit GPU, přečtěte si články o rozšiřující desce a zdroji. Na spotřebitelských serverech s grafickými kartami jsou rozšiřující lišta a lišta zdroje selhání dvakrát častěji než výpadek grafické karty.
Doprovodné články: K02 (distribuované formáty školení a kontrolních bodů), K04 (clusterové úložiště), N06 (disekce latence).
Toto je součást Kentino Wiki, referenční série o výpočetní technologii s využitím umělé inteligence, robotice a systémech, které je propojují. Komentáře a opravy jsou vítány na adrese info@kentino.com.