Kratek odgovor: Za učenje umetne inteligence uporabite grafične procesorje NVIDIA tako, da najprej preverite, ali sta gonilnik in grafični procesor vidna z nvidia-smi, nato namestite združljiv ogrodje/CUDA sklad in zaženete majhen test »model + batch on CUDA«. Če naletite na pomanjkanje pomnilnika, zmanjšajte velikost paketa in uporabite mešano natančnost, hkrati pa spremljajte izkoriščenost, pomnilnik in temperature.
Ključne ugotovitve:
Osnovni pregledi: Začnite z nvidia-smi; pred namestitvijo ogrodja popravite vidnost gonilnikov.
Združljivost sklada: Uskladite različice gonilnikov, izvajalnega okolja CUDA in ogrodja, da preprečite zrušitve in krhke namestitve.
Majhen uspeh: Preden povečate obseg poskusov, potrdite en sam prehod naprej na CUDA.
Disciplina VRAM: Za večje modele se osredotoča na mešano natančnost, kopičenje gradientov in kontrolne točke.
Spremljanje navad: Spremljajte izkoriščenost, vzorce pomnilnika, porabo energije in temperature, da boste zgodaj odkrili ozka grla.

Članki, ki jih boste morda želeli prebrati po tem:
🔗 Kako zgraditi agenta umetne inteligence
Oblikujte potek dela, orodja, pomnilnik in varnostne ukrepe svojega agenta.
🔗 Kako uvesti modele umetne inteligence
Nastavite okolja, zapakirajte modele in zanesljivo dostavite v produkcijo.
🔗 Kako meriti učinkovitost umetne inteligence
Izberite meritve, izvedite evalvacije in spremljajte uspešnost skozi čas.
🔗 Kako avtomatizirati naloge z umetno inteligenco
Avtomatizirajte ponavljajoče se delo s pozivi, poteki dela in integracijami.
1) Širša slika – kaj počneš, ko »vadiš na GPU-ju« 🧠⚡
Ko trenirate modele umetne inteligence, večinoma opravljate goro matrične matematike. Grafični procesorji (GPU) so zgrajeni za tovrstno vzporedno delo, zato lahko ogrodja, kot so PyTorch, TensorFlow in JAX, težko delo prenesejo na grafični procesor. (Dokumentacija PyTorch CUDA, namestitev TensorFlow (pip), hitri začetek JAX)
V praksi »uporaba grafičnih procesorjev NVIDIA za učenje« običajno pomeni:
-
Parametri vašega modela so (večinoma) shranjeni v grafičnem pomnilniku (GPU VRAM)
-
Vaše serije se v vsakem koraku premaknejo iz RAM-a v VRAM
-
Vaš forward pass in backprop se izvajata na jedrih CUDA (Vodnik po programiranju CUDA)
-
Posodobitve optimizatorja se izvajajo na grafičnem procesorju (v idealnem primeru)
-
Spremljaš temperature, pomnilnik, porabo, da ne bi ničesar segrel 🔥 (dokumentacija NVIDIA nvidia-smi)
Če se vam to zdi veliko, ne skrbite. Gre večinoma za kontrolni seznam in nekaj navad, ki si jih ustvarite sčasoma.
2) Kaj naredi dobro različico vadbene nastavitve za umetno inteligenco z grafičnim procesorjem NVIDIA 🤌
To je razdelek »ne gradite hiše na želeju«. Dobra nastavitev za uporabo grafičnih procesorjev NVIDIA za usposabljanje umetne inteligence je tista z nizko dramo. Nizka drama je stabilna. Stabilna je hitra. Hitra je ... no, hitra 😄
Dobra vadbena postavitev ima običajno:
-
Dovolj VRAM-a za velikost serije + model + stanja optimizatorja
-
VRAM je kot prostor v kovčku. Lahko pakirate pametneje, vendar ne morete pakirati neskončno.
-
-
Ujemajoč se programski sklad (gonilnik + izvajalno okolje CUDA + združljivost z ogrodjem) (Začetek uporabe PyTorch (izbirnik CUDA), namestitev TensorFlow (pip))
-
Hitro shranjevanje (NVMe zelo pomaga pri velikih naborih podatkov)
-
Spodoben procesor + RAM , da nalaganje podatkov ne izčrpa grafičnega procesorja (Vodnik za optimizacijo delovanja PyTorcha)
-
Hlajenje in prostornost (podcenjeno, dokler ni več 😬)
-
Reproducibilno okolje (venv/conda ali kontejnerji), da nadgradnje ne postanejo kaos (pregled kompleta orodij za kontejnerje NVIDIA)
In še ena stvar, ki jo ljudje spregledajo:
-
Navada spremljanja - preverjate pomnilnik in izkoriščenost grafičnega procesorja, kot bi preverjali ogledala med vožnjo. (NVIDIA nvidia-smi dokumentacija)
3) Primerjalna tabela - priljubljeni načini učenja z grafičnimi procesorji NVIDIA (z lastnostmi) 📊
Spodaj je kratek pregled "katera ustreza?". Cene so okvirne (ker se realnost razlikuje) in ja, ena od teh celic je namerno nekoliko razpršena.
| Orodje / Pristop | Najboljše za | Cena | Zakaj deluje (večinoma) |
|---|---|---|---|
| PyTorch (vanilija) PyTorch | večina ljudi, večina projektov | Brezplačno | Prilagodljiv, ogromen ekosistem, enostavno odpravljanje napak - poleg tega ima vsak svoje mnenje |
| Dokumentacija za PyTorch Lightning | ekipe, strukturirano usposabljanje | Brezplačno | Zmanjša število standardnih elementov, čistejše zanke; včasih se zdi kot "čarovnija", dokler ni več tako |
| Objemanje obraza Transformers + trener dokumentacija trenerja | Izpopolnjevanje NLP + LLM | Brezplačno | Vadba z baterijami, odlične nastavitve, hitre zmage 👍 |
| Pospeši dokumente programa Accelerate | več grafičnih procesorjev brez težav | Brezplačno | Zaradi DDP je manj nadležen, dober za skaliranje brez prepisovanja vsega |
| DeepSpeed ZeRO | veliki modeli, triki s spominom | Brezplačno | ZeroRO, razkladanje, skaliranje - lahko je zamudno, a zadovoljivo, ko klikne |
| TensorFlow + Keras TF | proizvodnih cevovodov | Brezplačno | Močno orodje, dobra zgodba o uvajanju; nekaterim je všeč, nekaterim potihoma ne |
| JAX + Flax Hitri začetek JAX / Dokumentacija za Flax | raziskave + navdušenci nad hitrostjo | Brezplačno | Prevajanje XLA je lahko neverjetno hitro, vendar se lahko odpravljanje napak zdi ... abstraktno |
| NVIDIA NeMo Pregled NeMo | govor + poteki dela LLM | Brezplačno | NVIDIA-optimiziran sklad, dobri recepti - občutek je kot kuhanje z domišljijsko pečico 🍳 |
| Pregled kompleta orodij Docker + NVIDIA Container Toolkit | reproducibilna okolja | Brezplačno | »Deluje na mojem računalniku« postane »deluje na naših računalnikih« (večinoma, spet) |
4) Prvi korak - potrdite, da je vaša grafična kartica pravilno vidna 🕵️♂️
Preden namestite ducat stvari, preverite osnove.
Stvari, ki jih želiš, da so resnične:
-
Stroj vidi grafični procesor
-
Gonilnik NVIDIA je pravilno nameščen
-
Grafični procesor ni obtičal pri nečem drugem
-
Lahko ga zanesljivo poizvedujete
Klasični pregled je:
-
nvidia-smi(dokumentacija NVIDIA nvidia-smi)
Kaj iščete:
-
Ime grafične kartice (npr. RTX, serija A itd.)
-
Različica gonilnika
-
Poraba pomnilnika
-
Izvajanje procesov (dokumentacija NVIDIA nvidia-smi)
Če nvidia-smi odpove, takoj prenehajte. Še ne nameščajte ogrodja. To je kot če bi poskušali speči kruh, ko vaša pečica ni priključena na električno omrežje. (NVIDIA System Management Interface (NVSMI))
Majhna človeška opomba: včasih nvidia-smi deluje, vendar vaše učenje še vedno ne uspe, ker se izvajalno okolje CUDA, ki ga uporablja vaš ogrodje, ne ujema s pričakovanji gonilnika. To ni tvoja neumnost. Tako pač je 😭 (Začetek s PyTorch (izbirnik CUDA), namestitev TensorFlow (pip))
5) Zgradite programski sklad - gonilnike, CUDA, cuDNN in "ples združljivosti" 💃
Tukaj ljudje izgubljajo ure. Trik je v tem: izberi si pot in se je drži.
Možnost A: CUDA, ki je vključena v ogrodje (pogosto najlažje)
Številne različice PyTorcha so opremljene z lastnim izvajalnim okoljem CUDA, kar pomeni, da ne potrebujete celotnega kompleta orodij CUDA, nameščenega v celotnem sistemu. Večinoma potrebujete le združljiv gonilnik NVIDIA. (Začetek uporabe PyTorcha (izbirnik CUDA), Prejšnje različice PyTorcha (kolesa CUDA))
Prednosti:
-
Manj gibljivih delov
-
Lažja namestitev
-
Bolj ponovljivo glede na okolje
Slabosti:
-
Če okolja površno mešate, se lahko zmedete
Možnost B: Komplet orodij System CUDA (več nadzora)
Na sistem namestite komplet orodij CUDA in vse poravnate z njim. (Dokumentacija kompleta orodij CUDA)
Prednosti:
-
Več nadzora za izdelavo po meri, nekaj posebnega orodja
-
Priročno za sestavljanje določenih operacij
Slabosti:
-
Več načinov za neujemanje različic in tiho jokanje
cuDNN in NCCL, v človeškem smislu
-
cuDNN pospeši primitive globokega učenja (konvolucije, biti RNN itd.) (dokumentacija NVIDIA cuDNN)
-
NCCL je hitra knjižnica za »komunikacijo med grafičnimi procesorji« za učenje z več grafičnimi procesorji (pregled NCCL)
Če izvajate usposabljanje z več grafičnimi procesorji (MGI), je NCCL vaš najboljši prijatelj – in včasih celo vaš temperamentni sostanovalec. (Pregled NCCL)
6) Vaš prvi zagon usposabljanja za GPU (primer miselnosti PyTorch) ✅🔥
Če želite slediti navodilom za uporabo grafičnih procesorjev NVIDIA za usposabljanje umetne inteligence, najprej ne potrebujete velikega projekta. Potrebujete majhen uspeh.
Temeljne ideje:
-
Zaznaj napravo
-
Premakni model na grafični procesor
-
Premakni tenzorje na GPU
-
Potrdite, da se tam izvaja prehod naprej (dokumentacija PyTorch CUDA)
Stvari, ki jih vedno preverim zgodaj:
-
torch.cuda.is_available()vrneTrue(torch.cuda.is_available) -
next(model.parameters()).deviceprikazujeCUDA(Forum PyTorch: preverite model na CUDA) -
En sam paketni prehod naprej ne povzroči napake
-
Pomnilnik grafičnega procesorja se poveča, ko začnete z učenjem (dober znak!) (dokumentacija NVIDIA nvidia-smi)
Pogosto vprašanje "zakaj je počasno?", razumem
-
Vaš nalagalnik podatkov je prepočasen (GPU čaka v stanju mirovanja) (Vodnik za optimizacijo delovanja PyTorcha)
-
Pozabil si premakniti podatke na grafični procesor (ups)
-
Velikost serije je majhna (GPU premalo izkoriščen)
-
V koraku učenja izvajate intenzivno predobdelavo CPE-ja
Poleg tega bo vaša grafična kartica pogosto videti »ne tako zasedena«, če je ozko grlo podatki. To je kot da bi najeli dirkača in ga nato pustili, da vsak krog čaka na gorivo.
7) Igra VRAM - velikost serije, mešana natančnost in ne eksplodira 💥🧳
Večina praktičnih težav pri usposabljanju se nanaša na spomin. Če se naučite ene veščine, se naučite upravljanja VRAM-a.
Hitri načini za zmanjšanje porabe pomnilnika
-
Mešana natančnost (FP16/BF16)
-
Običajno tudi veliko povečanje hitrosti. Vse koristi 😌 (dokumentacija PyTorch AMP, vodnik za mešano natančnost TensorFlow)
-
-
Kopičenje gradientov
-
Simulirajte večjo velikost serije z akumuliranjem gradientov v več korakih (dokumentacija za usposabljanje za Transformers (akumulacija gradientov, fp16))
-
-
Manjša dolžina zaporedja / velikost izreza
-
Brutalno, a učinkovito
-
-
Kontrolna točka aktivacije
-
Zamenjaj izračune za pomnilnik (ponovno izračunaj aktivacije med obratnim delovanjem) (torch.utils.checkpoint)
-
-
Uporabite lažji optimizator
-
Nekateri optimizatorji shranjujejo dodatna stanja, ki "žrejo" VRAM
-
Trenutek »zakaj je VRAM še vedno poln, ko ustavim?«
Okvirji pogosto shranjujejo pomnilnik v predpomnilnik zaradi zmogljivosti. To je normalno. Izgleda strašljivo, vendar ni vedno puščanje podatkov. Naučiš se brati vzorce. (Semantika PyTorch CUDA: alokator predpomnjenja)
Praktična navada:
-
Oglejte si dodeljeni in rezervirani pomnilnik (specifično za okvir) (semantika PyTorch CUDA: alokator predpomnjenja)
-
Brez panike ob prvi strašljivi številki 😅
8) Poskrbite, da bo grafični procesor dejansko deloval – optimizacija zmogljivosti, ki je vredna vašega časa 🏎️
Prvi korak je »ustvarjanje treninga grafične kartice«. hiter .
Optimizacije z visokim učinkom
-
Povečajte velikost serije (dokler ne zaboli, nato nekoliko zmanjšajte)
-
Uporaba pripetega pomnilnika v nalagalnikih podatkov (hitrejše kopije z gostitelja na napravo) (Vodnik za optimizacijo delovanja PyTorch, Vadnica za PyTorch pin_memory/non_blocking)
-
Povečajte število nalagalnikov podatkov (previdno, preveč jih ima lahko nasprotni učinek) (Vodnik za optimizacijo delovanja PyTorcha)
-
Predhodno pridobivanje paketov , da grafični procesor ne miruje
-
Uporabite zlite operacije / optimizirana jedra, kadar so na voljo
-
Uporabite mešano natančnost (spet, tako dobro je) (dokumentacija PyTorch AMP)
Najbolj spregledano ozko grlo
Vaš cevovod za shranjevanje in predobdelavo. Če je vaš nabor podatkov ogromen in shranjen na počasnem disku, vaš grafični procesor postane drag grelec prostora. Zelo napreden, zelo sijoč grelec prostora.
Pa še majhno priznanje: eno uro sem "optimiziral" model, le da sem ugotovil, da je ozko grlo beleženje. Preveč tiskanja lahko upočasni učenje. Da, lahko.
9) Usposabljanje za več grafičnih procesorjev - DDP, NCCL in skaliranje brez kaosa 🧩🤝
Ko si zaželite večjo hitrost ali večje modele, se odločite za več grafičnih procesorjev. Tu se stvari zapletejo.
Pogosti pristopi
-
Vzporedni prenos podatkov (DDP)
-
Razdelitev paketov med grafičnimi procesorji, sinhronizacija gradientov
-
Običajno je privzeta možnost »dobro« (dokumentacija PyTorch DDP)
-
-
Model vzporedno / Tenzor vzporedno
-
Razdelitev modela med grafičnimi procesorji (za zelo velike modele)
-
-
Vzporedni cevovod
-
Razdelitev plasti modela na stopnje (kot montažni trak, vendar za tenzorje)
-
Če šele začenjate, je usposabljanje v slogu DDP idealna izbira. (Vadnica za PyTorch DDP)
Praktični nasveti za več grafičnih procesorjev
-
Prepričajte se, da so grafični procesorji podobno zmogljivi (mešanje lahko povzroči ozko grlo)
-
Oglejte si medsebojno povezovanje: NVLink v primerjavi s PCIe je pomemben za delovne obremenitve z veliko sinhronizacijo (pregled NVIDIA NVLink, dokumentacija NVIDIA NVLink)
-
Ohranite uravnotežene velikosti paketov na GPU
-
Ne zanemarjajte procesorja in pomnilnika – več grafičnih procesorjev lahko poveča ozka grla podatkov
In ja, napake NCCL se lahko zdijo kot uganka, zavita v skrivnost, zavita v "zakaj ravno zdaj". Niste prekleti. Verjetno. (Pregled NCCL)
10) Spremljanje in profiliranje – neglamurozne stvari, ki vam prihranijo ure 📈🧯
Za začetek ne potrebujete domiselnih nadzornih plošč. Opaziti morate, kdaj nekaj ni v redu.
Ključni signali, ki jih je treba spremljati
-
Izkoriščenost grafičnega procesorja: ali je konstantno visoka ali skokovita?
-
Poraba pomnilnika: stabilna, naraščajoča ali nenavadna?
-
Poraba energije: nenavadno nizka lahko pomeni premajhno izkoriščenost
-
Temperature: dolgotrajne visoke temperature lahko zmanjšajo zmogljivost
-
Poraba CPE-ja: težave s podatkovnim cevovodom se prikažejo tukaj (Vodnik za optimizacijo delovanja PyTorcha)
Profiliranje miselnosti (poenostavljena različica)
-
Če je izkoriščenost GPU-ja nizka - ozko grlo podatkov ali CPU-ja
-
Če je GPU visok, a počasen - neučinkovitost jedra, natančnost ali arhitektura modela
-
Če se hitrost učenja naključno zmanjša - termično dušenje, procesi v ozadju, težave z V/I
Vem, da se spremljanje sliši nezabavno. Ampak je kot uporaba zobne nitke. Nadležno, potem pa se ti življenje nenadoma izboljša.
11) Odpravljanje težav - običajni osumljenci (in manj običajni) 🧰😵💫
Ta razdelek je v bistvu: »istih pet težav, za vedno.«
Težava: CUDA zmanjkuje pomnilnika
Popravki:
-
zmanjšajte velikost serije
-
uporabite mešano natančnost (dokumentacija PyTorch AMP, vodnik za mešano natančnost TensorFlow)
-
kopičenje gradientov (dokumentacija za usposabljanje za Transformerje (kopičenje gradientov, FP16))
-
aktivacije kontrolnih točk (torch.utils.checkpoint)
-
zapri druge procese GPU-ja
Težava: Usposabljanje se po nesreči izvaja na procesorju
Popravki:
-
zagotovite, da se model premakne v
CUDA -
zagotovite, da se tenzorji premaknejo v
CUDA -
preveri konfiguracijo naprave ogrodja (dokumentacija PyTorch CUDA)
Težava: Nenavadni zrušitve ali nezakonit dostop do pomnilnika
Popravki:
-
potrditev združljivosti gonilnika + izvajalnega okolja (začetek s PyTorch (izbirnik CUDA), namestitev TensorFlow (pip))
-
poskusite s čistim okoljem
-
zmanjšajte število operacij po meri
-
ponovno zaženite z determinističnimi nastavitvami za reprodukcijo
Težava: Počasneje od pričakovanega
Popravki:
-
preverite prepustnost nalagalnika podatkov (Vodnik za optimizacijo delovanja PyTorcha)
-
povečajte velikost serije
-
zmanjšati sečnjo
-
omogoči mešano natančnost (dokumentacija PyTorch AMP)
-
razčlenitev časa korakov profila
Težava: Več grafičnih procesorjev se zatakne
Popravki:
-
potrdite pravilne nastavitve zalednega sistema (distribucijska dokumentacija PyTorch)
-
preverite konfiguracije okolja NCCL (previdno) (pregled NCCL)
-
najprej preizkusite en sam grafični procesor
-
zagotovite, da je omrežje/medsebojna povezava zdrava
Majhna opomba nazaj: včasih je rešitev dobesedno ponovni zagon. Zdi se neumno. Deluje. Računalniki so taki.
12) Stroški in praktičnost - izbira prave grafične kartice NVIDIA in nastavitev brez pretiranega razmišljanja 💸🧠
Ni vsak projekt potreben največji grafični procesor. Včasih potrebujete dovolj grafične kartice.
Če natančno nastavite srednje velike modele
-
Dajte prednost VRAM-u in stabilnosti
-
Mešana natančnost zelo pomaga (dokumentacija PyTorch AMP, vodnik po mešani natančnosti TensorFlow)
-
Pogosto se lahko izognete z eno samo močno grafično kartico
Če usposabljate večje modele iz nič
-
Potrebovali boste več grafičnih procesorjev ali zelo veliko VRAM-a
-
Pomembna vam bosta NVLink in hitrost komunikacije (pregled NVIDIA NVLink, pregled NCCL)
-
Verjetno boste uporabljali optimizatorje pomnilnika (ZeRO, offload itd.) (dokumentacija DeepSpeed ZeRO, Microsoft Research: ZeRO/DeepSpeed)
Če izvajate eksperimentiranje
-
Želite hitro iteracijo
-
Ne zapravite vsega denarja za grafično kartico in nato prikrajšajte za pomnilnik in RAM
-
Uravnotežen sistem premaga neuravnovešenega (večinoma dni)
In v resnici lahko zapravite tedne v iskanju "popolne" izbire strojne opreme. Zgradite nekaj delujočega, izmerite in nato prilagodite. Pravi sovražnik je pomanjkanje povratne zanke.
Zaključne opombe - Kako uporabljati grafične procesorje NVIDIA za usposabljanje umetne inteligence, ne da bi pri tem izgubili razum 😌✅
Če iz tega priročnika o uporabi grafičnih procesorjev NVIDIA za usposabljanje umetne inteligence, vzemite tole:
-
se prepričajte, da
nvidia-smideluje (dokumentacija NVIDIA nvidia-smi) -
Izberite čisto programsko pot (CUDA, ki je vključena v ogrodje, je pogosto najlažja) (Začetek uporabe PyTorcha (izbirnik CUDA))
-
Pred povečanjem preverite učni zagon na majhnem grafičnem procesorju (torch.cuda.is_available).
-
Upravljajte z VRAM-om, kot da bi bili omejena polica v shrambi
-
Mešano natančnost uporabite že zgodaj – to ni samo »napredne stvari« (dokumentacija PyTorch AMP, vodnik za mešano natančnost TensorFlow)
-
Če je počasen, posumite na nalagalnik podatkov in V/I, preden krivite grafični procesor (Vodnik za optimizacijo delovanja PyTorcha).
-
Več grafičnih procesorjev je zmogljivo, vendar povečuje kompleksnost - postopno skaliranje (dokumentacija PyTorch DDP, pregled NCCL)
-
Spremljajte izkoriščenost in temperature, da se težave pojavijo zgodaj (dokumentacija NVIDIA nvidia-smi)
Usposabljanje na grafičnih procesorjih NVIDIA je ena tistih veščin, ki se zdijo zastrašujoče, potem pa nenadoma postanejo ... normalne. Kot učenje vožnje. Sprva je vse glasno in zmedeno in premočno stisneš volan. Potem pa nekega dne voziš, srkaš kavo in mimogrede odpravljaš napako v paketu, kot da ni nič takega.
Primer iz resničnega sveta: Usposabljanje majhnega klasifikatorja slik na enem grafičnem procesorju NVIDIA 🧪🖼️
Scenarij
Predstavljajte si, da majhna ekipa za e-trgovino želi usposobiti klasifikator slik, ki razvršča fotografije izdelkov v pet kategorij: čevlji, torbe, jakne, ure in dodatki.
Ne trenirajo ogromnega modela iz nič. Izpopolnjujejo predhodno naučen model vida na enem samem grafičnem procesorju NVIDIA, tako da lahko ekipa hitro preizkusi, ali je ideja vredna skaliranja.
Cilj je preprost: dokazati, da nastavitev grafičnega procesorja deluje, se izogniti kaosu CUDA in zgraditi ponovljivo učno zanko, preden se porabi denar za večjo strojno opremo ali zagon v oblaku.
Kaj potrebuje postavitev
Za tovrstni test bi želeli:
Stroj z eno grafično kartico NVIDIA in dovolj VRAM-a za velikost serije
Delujoč gonilnik NVIDIA, potrjen z nvidia-smi
Čisto okolje Python za PyTorch, TensorFlow ali JAX
Majhen označen nabor slikovnih podatkov, idealno razdeljen na mape za učenje, validacijo in testiranje
Osnovni časovni potek CPU za primerjavo
Preprost dnevnik s časom koraka, pomnilnikom GPU, izkoriščenostjo GPU, temperaturo in natančnostjo validacije
Pred pravilnim učenjem bi morala ekipa izvesti majhen CUDA smoke test: naložiti en paket, premakniti model in paket v CUDA, izvesti en prehod naprej in potrditi povečanje pomnilnika GPU v nvidia-smi.
Primer navodila
Praktično navodilo za projekt bi lahko izgledalo takole:
Usposobite majhen klasifikator slik izdelkov z uporabo vnaprej naučenega modela v slogu ResNet. Najprej potrdite, da nvidia-smi vidi grafični procesor. Nato pred popolnim učenjem zaženite enoserijski test CUDA. Uporabite mešano natančnost, če je podprta. Začnite z velikostjo serije 32, povečajte jo le, če pomnilnik grafične kartice ostane stabilen, in po vsakem zagonu zabeležite čas koraka, porabo pomnilnika grafične kartice, izkoriščenost grafične kartice, temperaturo in natančnost validacije. Če se prikaže sporočilo o pomanjkanju pomnilnika CUDA, zmanjšajte velikost serije, preden spremenite model.
Kako ga preizkusiti
Razumen načrt testiranja bi bil:
-
Zaženite nvidia-smi in zabeležite ime grafične kartice, različico gonilnika, porabo pomnilnika v mirovanju in temperaturo.
-
Za potrditev delovanja nabora podatkov in modelne kode izvedite enoserijski test CPE.
-
Izvedite isti enoserijski test na CUDA.
-
Trenirajte 200 korakov z velikostjo serije 32.
-
Ponavljaj z omogočeno mešano natančnostjo.
-
Poskusite z velikostjo serije 64 le, če prvi zagon pusti dovolj prostora v VRAM-u.
-
Primerjajte natančnost validacije, povprečni čas koraka, najvišjo vrednost VRAM-a in temperaturo GPU-ja.
Dober rezultat ni samo »učilo se je«. Dober rezultat je »učilo se je na grafičnem procesorju, hitrost se je izboljšala, pomnilnik je ostal stabilen in zagon se lahko ponovi jutri brez ponovne namestitve vsega«.
Rezultat
Ilustrativni rezultat, ki temelji na časovnem merjenju treh majhnih 200-stopenjskih testov pred in po prenosu učenja s CPU na eno samo grafično kartico NVIDIA:
Osnovni čas samo za CPE: 3,4 sekunde na korak učenja
GPU s FP32: 0,42 sekunde na korak učenja
GPU z mešano natančnostjo: 0,28 sekunde na korak učenja
Največja količina pomnilnika GPU z velikostjo serije 32: 5,8 GB
Največja količina pomnilnika GPU z velikostjo serije 64: 10,9 GB
Velikost paketa 96: ni uspelo zaradi pomanjkanja pomnilnika CUDA
Izkoriščenost grafičnega procesorja med stabilnim delovanjem: 76 % do 91 %
Temperatura med stabilnimi vožnjami: 67 °C do 73 °C
Natančnost validacije po kratkem testu: 82 % s FP32, 82,4 % z mešano natančnostjo
V tem primeru ocene je mešana natančnost skrajšala čas koraka za približno 33 % v primerjavi z izvajanjem z grafičnim procesorjem FP32, hkrati pa je natančnost validacije ostala približno enaka. Ekipa je lahko te številke preverila z merjenjem časa vsakega koraka učenja, preverjanjem nvidia-smi med izvajanjem in shranjevanjem natančnosti validacije po vsakem testu.
Kaj lahko gre narobe
Najpogostejša napaka je prezgodnje skaliranje. Če enkratni test CUDA ne uspe, ga celoten učni zagon ne bo čarobno popravil.
Druge preproste pasti:
Namestitev več različic CUDA in nepoznavanje, katero ogrodje uporablja
Premikanje modela v CUDA, vendar ohranjanje paketov na CPU-ju
Izbira velikosti serije, ki se prilega enkrat, vendar se po več korakih sesuje
Ignoriranje drugih procesov, ki že uporabljajo VRAM
Krivite grafični procesor, ko je nalagalnik podatkov prepočasen
Primerjava zagonov CPU in GPU brez uporabe istega nabora podatkov, velikosti serije in modela
Tudi človek bi moral pregledati prvih nekaj napovedi. Hitro učenje ima malo vrednosti, če so oznake hrupne, razredi neuravnoteženi ali če se model uči bližnjic, kot je barva ozadja namesto vrste izdelka.
Praktični nasvet
Zanesljiv potek dela za učenje z grafičnimi procesorji NVIDIA se začne z majhnimi koraki: dokažite delovanje gonilnika, dokažite delovanje CUDA, dokažite delovanje ene serije, nato pa postopoma prilagajajte velikost serije in dolžino učenja. Najhitrejša namestitev ni tista z najbolj impresivnim grafičnim procesorjem na papirju – je tista, ki vam omogoča stabilne, merljive zagone brez izgube ur na težave z različicami, VRAM-om in nalagalnikom podatkov, ki se jim je mogoče izogniti.
Pogosta vprašanja
Kaj pomeni učiti model umetne inteligence na grafičnem procesorju NVIDIA
Usposabljanje na grafičnem procesorju NVIDIA pomeni, da so vaši parametri modela in učne serije shranjene v video pomnilniku grafičnega procesorja (GPU VRAM), težka matematika (prehod naprej, povratni prehod, koraki optimizatorja) pa se izvaja prek jeder CUDA. V praksi se to pogosto zreducira na zagotavljanje, da se model in tenzorji nahajajo na jedru CUDA, nato pa se spremlja pomnilnik, izkoriščenost in temperature, da prepustnost ostane dosledna.
Kako preveriti, ali grafična kartica NVIDIA deluje, preden namestite karkoli drugega
Začnite z ukazom nvidia-smi. Prikazati bi moral ime grafične kartice, različico gonilnika, trenutno porabo pomnilnika in vse procese, ki se izvajajo. Če ukaz nvidia-smi ne uspe, počakajte na PyTorch/TensorFlow/JAX in najprej popravite vidnost gonilnika. To je osnovno preverjanje »ali je pečica priključena« za učenje grafične kartice.
Izbira med sistemom CUDA in CUDA, ki je vključen v paket PyTorch
Pogost pristop je uporaba CUDA, ki je vključena v ogrodje (kot mnoga kolesa PyTorch), ker zmanjšuje število gibljivih delov – v glavnem potrebujete združljiv gonilnik NVIDIA. Namestitev celotnega sistemskega kompleta orodij CUDA ponuja več nadzora (gradnje po meri, operacije prevajanja), vendar hkrati uvaja več možnosti za neusklajenosti različic in zmedene napake med izvajanjem.
Zakaj je lahko učenje počasno tudi z grafično kartico NVIDIA
Pogosto je grafični procesor izčrpan zaradi vhodnega cevovoda. Nalagalniki podatkov, ki zaostajajo, intenzivna predobdelava CPE-ja znotraj koraka učenja, majhne velikosti paketov ali počasno shranjevanje, vse to lahko povzroči, da se zmogljiv grafični procesor obnaša kot nedejaven grelnik prostora. Povečanje števila delavcev nalagalnika podatkov, omogočanje pripetega pomnilnika, dodajanje prednalaganja in obrezovanje beleženja so pogosti prvi koraki, preden se krivdo pripiše modelu.
Kako preprečiti napake »CUDA out of memory« med učenjem grafične kartice NVIDIA
Večina popravkov so taktike VRAM-a: zmanjšanje velikosti serije, omogočanje mešane natančnosti (FP16/BF16), uporaba kopičenja gradientov, skrajšanje dolžine zaporedja/velikosti obreza ali uporaba kontrolnih točk aktivacije. Preverite tudi, ali drugi procesi GPU-ja porabljajo pomnilnik. Nekaj poskusov in napak je normalno – načrtovanje proračuna VRAM-a postane osnovna navada pri praktičnem usposabljanju za GPU.
Zakaj je VRAM lahko še vedno poln po koncu učnega skripta
Okviri pogosto predpomnijo pomnilnik GPU zaradi hitrosti, zato lahko rezervirani pomnilnik ostane visok, tudi ko dodeljeni pomnilnik pade. To lahko spominja na puščanje, vendar je pogosto vzrok v tem, da se predpomnilnik obnaša tako, kot je bilo zasnovano. Praktična navada je sledenje vzorcu skozi čas in primerjava »dodeljenega in rezerviranega«, namesto da se osredotočamo na en sam zaskrbljujoč posnetek.
Kako potrditi, da model ne poteka tiho na CPE-ju
Preverjanje racionalnosti: potrdite, da torch.cuda.is_available() vrne True, preverite, ali next(model.parameters()).device prikazuje cuda, in zaženite en sam prehod naprej brez napak. Če se vam zdi delovanje sumljivo počasno, preverite tudi, ali se vaše serije premikajo na grafični procesor. Pogosto se zgodi, da se model premakne in podatki pomotoma ostanejo tam.
Najpreprostejša pot do učenja za več grafičnih procesorjev
Vzporedno izvajanje podatkov (usposabljanje v slogu DDP) je pogosto najboljši prvi korak: razdelite pakete med grafične procesorje in sinhronizirajte gradiente. Orodja, kot je Accelerate, lahko olajšajo delo z več grafičnimi procesorji brez popolnega prepisovanja. Pričakujte dodatne spremenljivke – komunikacijo NCCL, razlike v medsebojnih povezavah (NVLink v primerjavi s PCIe) in povečana ozka grla podatkov – zato postopno skaliranje po zanesljivem delovanju z enim grafičnim procesorjem običajno poteka bolje.
Kaj je treba spremljati med usposabljanjem grafičnih procesorjev NVIDIA, da bi zgodaj odkrili težave
Spremljajte izkoriščenost grafične kartice (GPU), porabo pomnilnika (stabilna v primerjavi z naraščajočo), porabo energije in temperature – omejevanje hitrosti lahko tiho zmanjša hitrost. Spremljajte tudi porabo procesorja (CPE), saj se težave s podatkovnim cevovodom pogosto najprej pokažejo tam. Če je izkoriščenost neenakomerna ali nizka, posumite na V/I ali nalagalnike podatkov; če je visoka, vendar je čas korakov še vedno počasen, pa profilirajte jedra, način natančnosti in razčlenitev časa korakov.
Reference
-
NVIDIA - Dokumentacija za NVIDIA nvidia-smi - docs.nvidia.com
-
NVIDIA - Vmesnik za upravljanje sistema NVIDIA (NVSMI) - developer.nvidia.com
-
NVIDIA - Pregled NVIDIA NVLink - nvidia.com
-
PyTorch - Začetek uporabe PyTorcha (izbirnik CUDA) - pytorch.org
-
PyTorch - Dokumentacija za PyTorch CUDA - docs.pytorch.org
-
TensorFlow - Namestitev TensorFlowa (pip) - tensorflow.org
-
JAX - Hitri začetek JAX - docs.jax.dev
-
Objemajoči obraz - dokumentacija za trenerje - huggingface.co
-
Umetna inteligenca strele - Dokumentacija za strele - lightning.ai
-
DeepSpeed - ZeRO dokumentacija - deepspeed.readthedocs.io
-
Microsoftove raziskave - Microsoftove raziskave: ZeRO/DeepSpeed - microsoft.com
-
Forumi PyTorch - Forum PyTorch: preverjanje modela na CUDA - discuss.pytorch.org