Trumpas atsakymas: dirbtinio intelekto mokymui naudokite NVIDIA GPU, pirmiausia patvirtindami, kad tvarkyklė ir GPU matomi naudojant „nvidia-smi“ , tada įdiegdami suderinamą sistemą / CUDA steką ir paleisdami nedidelį „model + batch on cuda“ testą. Jei susiduriate su atminties trūkumu, sumažinkite paketo dydį ir naudokite mišrų tikslumą, kartu stebėdami atminties naudojimą, temperatūrą ir apkrovą.
Svarbiausios išvados:
Baziniai patikrinimai : pradėkite nuo „nvidia-smi“ ; prieš diegdami sistemas, pataisykite tvarkyklės matomumą.
Suderinamumas su paketais : tvarkyklės, CUDA vykdymo aplinkos ir platformos versijas palaikykite vienodas, kad išvengtumėte gedimų ir nestabilių diegimo procesų.
Maža sėkmė : prieš didindami eksperimentų mastą, įsitikinkite, kad vienas tiesioginis bandymas atliktas CUDA sistemoje.
VRAM disciplina : remkitės mišriu tikslumu, gradiento kaupimu ir kontrolinių taškų taikymu, kad tilptų didesni modeliai.
Stebėjimo įpročiai : stebėkite panaudojimą, atminties modelius, galią ir temperatūrą, kad anksti pastebėtumėte kliūtis.

Straipsniai, kuriuos galbūt norėsite perskaityti po šio:
🔗 Kaip sukurti dirbtinio intelekto agentą
Sukurkite savo agento darbo eigą, įrankius, atmintį ir apsaugos priemones.
🔗 Kaip diegti dirbtinio intelekto modelius
Nustatykite aplinkas, pakuočių modelius ir patikimai pristatykite į gamybą.
🔗 Kaip išmatuoti dirbtinio intelekto našumą
Pasirinkite metrikas, atlikite vertinimus ir stebėkite našumą laikui bėgant.
🔗 Kaip automatizuoti užduotis naudojant dirbtinį intelektą
Automatizuokite pasikartojantį darbą naudodami raginimus, darbo eigas ir integracijas.
1) Platesnis vaizdas – ką darote, kai „treniruojatės su GPU“ 🧠⚡
Mokydami dirbtinio intelekto modelius, dažniausiai atliekate daugybę matricų matematikos skaičiavimų. Grafikos procesoriai (GPU) yra sukurti tokio tipo lygiagrečiam darbui, todėl tokios sistemos kaip „PyTorch“, „TensorFlow“ ir „JAX“ gali perkelti sunkų darbą GPU. ( „PyTorch CUDA“ dokumentacija , „TensorFlow“ diegimas (pip) , JAX greitoji pradžia )
Praktiškai „NVIDIA GPU naudojimas mokymui“ paprastai reiškia:
-
Jūsų modelio parametrai (dažniausiai) yra GPU VRAM atmintyje
-
Jūsų partijos kiekviename žingsnyje perkeliamos iš RAM į VRAM
-
Jūsų tiesioginis ir atgalinis perdavimas veikia su CUDA branduoliais ( CUDA programavimo vadovas )
-
Optimizavimo priemonės atnaujinimai atliekami naudojant GPU (idealiu atveju)
-
Stebite temperatūrą, atmintį, panaudojimą, kad nieko neveiktumėte 🔥 ( NVIDIA nvidia-smi dokumentai )
Jei tai skamba daug, nesijaudinkite. Tai daugiausia kontrolinis sąrašas ir keli įpročiai, kuriuos išsiugdote laikui bėgant.
2) Kas daro NVIDIA GPU AI mokymo sistemos versiją gerą 🤌
Tai skyrius „Nestatykite namo ant drebučių“. Geras NVIDIA GPU naudojimo dirbtinio intelekto mokymui yra mažai dramatiškas. Mažai dramatiškas yra stabilus. Stabilus yra greitas. Greitas yra... na, greitas 😄
Tvirta treniruočių sistema paprastai turi:
-
Pakankamai VRAM jūsų partijos dydžiui + modeliui + optimizavimo būsenoms
-
VRAM yra kaip lagamino talpa. Galima supakuoti išmaniau, bet negalima supakuoti be galo daug vietos.
-
-
Suderinta programinės įrangos paketo versija (tvarkyklė + CUDA vykdymo aplinka + suderinamumas su sistema) ( „PyTorch Get Started“ (CUDA selektorius) , „TensorFlow“ diegimas (pip) )
-
Greitas saugojimas (NVMe labai padeda dideliems duomenų rinkiniams)
-
Geras procesorius ir operatyvioji atmintis , kad duomenų įkėlimas neapkrautų GPU ( PyTorch našumo derinimo vadovas )
-
Aušinimo ir galios rezervas (nepakankamai įvertintas, kol per daug nepervertinamas 😬)
-
Atkuriama aplinka („venv“ / „conda“ arba konteineriai), kad atnaujinimai netaptų chaosu ( „NVIDIA Container Toolkit“ apžvalga )
Ir dar vienas dalykas, kurį žmonės praleidžia:
-
Stebėjimo įprotis – GPU atmintį ir jos panaudojimą tikrinate taip, lyg tikrintumėte veidrodžius vairuodami. ( „NVIDIA nvidia-smi“ dokumentai )
3) Palyginimo lentelė – populiarūs mokymo būdai su NVIDIA GPU (su ypatybėmis) 📊
Žemiau pateikiamas trumpas paaiškinimas „kuris tinka?“. Kainos yra apytikslės (nes realybė skiriasi), ir taip, vienas iš šių elementų yra šiek tiek padrikas, ne veltui.
| Įrankis / metodas | Geriausiai tinka | Kaina | Kodėl tai veikia (dažniausiai) |
|---|---|---|---|
| PyTorch (vanilės) PyTorch | dauguma žmonių, dauguma projektų | Nemokama | Lanksti, didžiulė ekosistema, lengvas derinimas – taip pat kiekvienas turi savo nuomonę |
| „PyTorch Lightning“ „Lightning“ dokumentai | komandos, struktūrizuoti mokymai | Nemokama | Sumažina standartinį veikimą, švaresnius ciklus; kartais atrodo kaip „magija“, kol galiausiai taip nebeatrodo |
| Apkabinančių veidų transformeriai + trenerio trenerio dokumentai | NLP + LLM tikslinimas | Nemokama | Treniruotės su baterijomis, puikūs numatytieji nustatymai, greitos pergalės 👍 |
| Accelerate “ dokumentai | kelių GPU be skausmo | Nemokama | Padaro DDP mažiau erzinantį, tinka mastelio keitimui neperrašant visko |
| „DeepSpeed ZeRO“ dokumentai | dideli modeliai, atminties triukai | Nemokama | „ZeRO“, apkrovos mažinimas, mastelio keitimas – gali būti sudėtinga, bet malonu, kai viskas veikia |
| „TensorFlow“ + „Keras TF“ diegimas | gamybos tipo vamzdynai | Nemokama | Puikūs įrankiai, gera diegimo istorija; vieniems tai patinka, kitiems – ne |
| JAX + „Flax“ JAX greitas paleidimas / „Flax“ dokumentai | tyrimų + greičio mėgėjai | Nemokama | XLA kompiliavimas gali būti neįtikėtinai greitas, bet derinimas gali atrodyti... abstraktus |
| NVIDIA NeMo NeMo apžvalga | kalbos + LLM darbo eigos | Nemokama | NVIDIA optimizuotas rinkinys, geri receptai – jautiesi lyg gamintum su prašmatnia orkaite 🍳 |
| „Docker“ + „NVIDIA Container Toolkit “ įrankių rinkinio apžvalga | atkuriamos aplinkos | Nemokama | „Veikia mano mašinoje“ tampa „veikia mūsų mašinose“ (dažniausiai, vėlgi) |
4) Pirmas žingsnis – įsitikinkite, kad jūsų GPU tinkamai matomas 🕵️♂️
Prieš diegdami keliolika dalykų, patikrinkite pagrindus.
Dalykai, kurie nori būti tiesa:
-
Mašina mato GPU
-
NVIDIA tvarkyklė įdiegta teisingai
-
GPU neužstrigęs darydamas ką nors kita
-
Galite patikimai paklausti
Klasikinis patikrinimas yra toks:
-
nvidia-smi( NVIDIA nvidia-smi dokumentacija )
Ko ieškote:
-
GPU pavadinimas (pvz., RTX, A serija ir kt.)
-
Vairuotojo versija
-
Atminties naudojimas
-
Vykdomi procesai ( NVIDIA nvidia-smi dokumentai )
Jei „nvidia-smi“ nepavyksta, tuoj pat sustokite. Dar neįdiekite karkasinių sistemų. Tai tas pats, kas bandyti kepti duoną, kai orkaitė neįjungta. ( NVIDIA sistemos valdymo sąsaja (NVSMI) )
Maža žmogiška pastaba: kartais „nvidia-smi“ veikia, bet mokymas vis tiek nepavyksta, nes jūsų sistemos naudojama CUDA vykdymo aplinka neatitinka tvarkyklės lūkesčių. Tai ne jūsų kvailumas. Taip yra... tiesiog yra 😭 ( PyTorch pradžia (CUDA selektorius) , TensorFlow diegimas (pip) )
5) Sukurkite programinės įrangos paketą – tvarkykles, CUDA, cuDNN ir „suderinamumo šokį“ 💃
Štai čia žmonės praranda valandas. Visa esmė: išsirink kelią ir jo laikykis .
A variantas: Su sistema susieta CUDA (dažnai lengviausia)
Daugelis „PyTorch“ kompiliacijų turi savo CUDA vykdymo aplinką, o tai reiškia, kad nereikia įdiegti viso CUDA įrankių rinkinio visoje sistemoje. Dažniausiai tereikia suderinamo NVIDIA tvarkyklės. ( „PyTorch“ pradžiamokslis (CUDA parinkiklis) , ankstesnės „PyTorch“ versijos (CUDA ratukai) ).
Privalumai:
-
Mažiau judančių dalių
-
Lengvesnis diegimas
-
Labiau atkartojama kiekvienoje aplinkoje
Minusai:
-
Jei nerūpestingai maišysite aplinkas, galite susipainioti
B variantas: sistemos CUDA įrankių rinkinys (daugiau valdymo galimybių)
Įdiegiate CUDA įrankių rinkinį sistemoje ir viską suderinate su juo. ( CUDA įrankių rinkinio dokumentacija )
Privalumai:
-
Daugiau valdymo galimybių individualiems projektams, kai kurie specialūs įrankiai
-
Patogu kompiliuojant tam tikras operacijas
Minusai:
-
Daugiau būdų nesuderinti versijų ir tyliai verkti
cuDNN ir NCCL, kalbant apie žmones
-
„cuDNN“ pagreitina gilaus mokymosi primityvus (konvoliucijas, RNN bitus ir kt.) ( „NVIDIA cuDNN“ dokumentai )
-
NCCL yra greita „GPU-GPU komunikacijos“ biblioteka, skirta kelių GPU mokymui ( NCCL apžvalga )
Jei mokotės dirbti su keliais GPU, NCCL yra geriausias jūsų draugas – o kartais ir kaprizingas kambariokas. ( NCCL apžvalga )
6) Pirmasis jūsų GPU mokymo ciklas („PyTorch“ pavyzdžio mąstysena) ✅🔥
Norint sekti „Kaip naudoti NVIDIA GPU dirbtinio intelekto mokymui“ , pirmiausia nereikia didelio projekto. Jums reikia nedidelės sėkmės.
Pagrindinės idėjos:
-
Aptikti įrenginį
-
Perkelti modelį į GPU
-
Perkelti tenzorius į GPU
-
Patvirtinkite, kad tiesioginis perdavimas vyksta ten ( PyTorch CUDA dokumentai )
Dalykai, kuriuos visada iš anksto patikrinu dėl savo sveiko proto:
-
torch.cuda.is_available()grąžinaTrue( torch.cuda.is_available ) -
next(model.parameters()).devicerodo„cuda“( „PyTorch“ forumas: modelio patikrinimas CUDA ) -
Vienos partijos perdavimas į priekį nesukelia klaidos
-
GPU atminties padaugėja pradėjus mokymą (geras ženklas!) ( „NVIDIA nvidia-smi“ dokumentai )
Dažnas klausimas „kodėl jis lėtas?“, supratote
-
Jūsų duomenų įkėlimo programa yra per lėta (GPU laukia, kol neveikia) ( „PyTorch“ našumo derinimo vadovas )
-
Pamiršote perkelti duomenis į GPU (oi)
-
Partijos dydis mažas (GPU nepakankamai išnaudota)
-
Mokymo etape atliekate intensyvų procesoriaus išankstinį apdorojimą
Be to, taip, jūsų GPU dažnai atrodys „ne tokia užimta“, jei kliūtis yra duomenys. Tai tas pats, kas pasamdyti lenktynininką ir priversti jį laukti degalų kiekviename rate.
7) VRAM žaidimas – partijos dydis, mišrus tikslumas ir nesprogimas 💥🧳
Dauguma praktinių mokymo problemų kyla dėl atminties. Jei išmoksite vieną įgūdį, išmokite valdyti vaizdo atmintinę.
Greiti būdai sumažinti atminties naudojimą
-
Mišrus tikslumas (FP16/BF16)
-
Paprastai ir didelis greičio padidėjimas. Abipusiai naudinga 😌 ( PyTorch AMP dokumentai , TensorFlow mišraus tikslumo vadovas )
-
-
Gradiento kaupimas
-
Didesnio paketo dydžio modeliavimas kaupiant gradientus per kelis žingsnius ( „Transformers“ mokymo dokumentai (gradientų kaupimas, 16 etapas) ).
-
-
Mažesnis sekos ilgis / apkarpymo dydis
-
Žiaurus, bet efektyvus
-
-
Aktyvinimo kontrolinis taškas
-
Skaičiavimo mainai į atmintį (aktyvacijų perskaičiavimas atgalinio apdorojimo metu) ( torch.utils.checkpoint )
-
-
Naudokite lengvesnį optimizatorių
-
Kai kurie optimizatoriai saugo papildomas būsenas, kurios kramto VRAM
-
Akimirka „kodėl VRAM vis dar pilna po sustojimo?“
Karkasai dažnai kaupia atmintį našumui užtikrinti. Tai normalu. Tai atrodo bauginančiai, bet ne visada tai yra nutekėjimas. Išmokstama skaityti šablonus. ( „PyTorch CUDA“ semantika: talpyklos paskirstytojas )
Praktinis įprotis:
-
Stebėjimo paskirta ir rezervuota atmintis (konkrečiam karkasui) ( „PyTorch CUDA“ semantika: talpyklos paskirstytojas )
-
Nepanikuokite išgirdę pirmą bauginantį skaičių 😅
8) Priverskite GPU iš tikrųjų veikti – našumo derinimas, kuris vertas jūsų laiko 🏎️
Pirmas žingsnis – priversti „GPU mokymą veikti“. Antras žingsnis – greitai
Didelio poveikio optimizavimas
-
Didinkite porcijos dydį (kol pradės skaudėti, tada šiek tiek sumažinkite)
-
Naudoti prisegtą atmintį duomenų įkėlimo programose (greitesnės kopijos iš pagrindinio kompiuterio į įrenginį) ( „PyTorch“ našumo derinimo vadovas , „PyTorch“ pin_memory/non_blocking pamoka )
-
Padidinkite duomenų įkėlimo programos darbuotojų skaičių (atsargiai, per daug jų gali sukelti priešingą rezultatą) ( „PyTorch“ našumo derinimo vadovas )
-
Iš anksto gauti paketus , kad GPU neveiktų neveiklumo režimu
-
Naudoti sujungtas operacijas / optimizuotus branduolius, kai įmanoma
-
Naudokite mišrų tikslumą (vėlgi, tai labai gerai) ( „PyTorch AMP“ dokumentai )
Labiausiai nepastebima kliūtis
Jūsų saugojimo ir išankstinio apdorojimo srautas. Jei jūsų duomenų rinkinys yra didelis ir saugomas lėtame diske, jūsų GPU tampa brangiu šildytuvu. Labai pažangus, labai blizgus šildytuvas.
Taip pat mažas prisipažinimas: valandą „optimizavau“ modelį, kad suprasčiau, jog kliūtimi tapo registravimas. Per didelis spausdinimas gali sulėtinti mokymąsi. Taip, gali.
9) Kelių GPU mokymai – DDP, NCCL ir mastelio keitimas be chaoso 🧩🤝
Kai norite didesnio greičio ar galingesnių modelių, pereinate prie kelių GPU. Štai čia ir prasideda pikantiškumas.
Įprasti metodai
-
Duomenų lygiagretumas (DDP)
-
Padalinkite partijas tarp GPU, sinchronizuokite gradientus
-
Paprastai numatytoji parinktis „gera“ ( „PyTorch DDP“ dokumentai )
-
-
Modelis lygiagretus / Tenzorius lygiagretus
-
Padalinti modelį tarp GPU (labai dideliems modeliams)
-
-
Lygiagretus vamzdynas
-
Padalinti modelio sluoksnius į etapus (kaip surinkimo liniją, bet tenzoriams)
-
Jei pradedate, DDP stiliaus mokymai yra idealus pasirinkimas. ( PyTorch DDP pamoka )
Praktiniai patarimai dėl kelių GPU
-
Įsitikinkite, kad GPU gali būti panašiai galingi (maišymas gali sukelti kliūčių)
-
Stebėkite sujungimą: NVLink ir PCIe skirtumai svarbūs esant dideliems sinchronizavimo darbo krūviams ( NVIDIA NVLink apžvalga , NVIDIA NVLink dokumentai )
-
Išlaikykite subalansuotus GPU paketų dydžius
-
Neignoruokite procesoriaus ir atminties – kelių GPU naudojimas gali padidinti duomenų perdavimo kliūtis
Ir taip, NCCL klaidos gali atrodyti kaip mįslė, įvyniota į paslaptį, įvyniotą į klausimą „kodėl dabar“. Jūs nesate prakeiktas. Tikriausiai. ( NCCL apžvalga )
10) Stebėjimas ir profiliavimas – negražūs dalykai, kurie sutaupo jums valandas 📈🧯
Pradžiai nereikia įmantrių ataskaitų suvestinių. Reikia pastebėti, kada kažkas negerai.
Svarbiausi signalai, į kuriuos reikia atkreipti dėmesį
-
GPU panaudojimas : ar jis nuolat didelis, ar staigus?
-
Atminties naudojimas : stabilus, laipiojantis ar keistas?
-
Energijos sąnaudos : neįprastai mažos gali reikšti nepakankamą energijos suvartojimą
-
Temperatūra : nuolatinė aukšta temperatūra gali slopinti našumą
-
CPU naudojimas : čia rodomos duomenų perdavimo problemos ( „PyTorch“ našumo derinimo vadovas )
Profiliavimo mąstysena (paprastoji versija)
-
Jei GPU mažai naudojamas – duomenų arba procesoriaus kliūtis
-
Jei GPU sparta didelė, bet lėta – branduolio neefektyvumas, tikslumas arba modelio architektūra
-
Jei mokymo greitis atsitiktinai sumažėja – terminis droselis, foniniai procesai, įvesties/išvesties sutrikimai
Žinau, stebėjimas skamba nemaloniai. Bet tai tas pats, kas valytis dantų siūlu. Erzina, o tada staiga tavo gyvenimas pagerėja.
11) Trikčių šalinimas – įprasti įtartini veiksniai (ir rečiau) 🧰😵💫
Šis skyrius iš esmės yra toks: „tie patys penki klausimai amžinai“
Problema: CUDA trūksta atminties
Pataisymai:
-
sumažinti partijos dydį
-
naudoti mišrų tikslumą ( „PyTorch AMP“ dokumentai , „TensorFlow“ mišraus tikslumo vadovas )
-
gradiento kaupimas ( Transformerių mokymo dokumentai (gradiento kaupimas, 16 psl.) )
-
Kontrolinių taškų aktyvacijos ( torch.utils.checkpoint )
-
uždarykite kitus GPU procesus
Problema: Mokymas netyčia vykdomas naudojant procesorių
Pataisymai:
-
užtikrinti, kad modelis būtų perkeltas į
„Cuda“ -
užtikrinti, kad tenzoriai būtų perkelti į
„Cuda“ -
Patikrinkite karkaso įrenginio konfigūraciją ( „PyTorch CUDA“ dokumentai )
Problema: keisti gedimai arba neteisėta prieiga prie atminties
Pataisymai:
-
patvirtinti tvarkyklės ir vykdymo aplinkos suderinamumą ( „PyTorch Get Started“ (CUDA parinkiklis) , „TensorFlow“ diegimas (pip) )
-
išbandykite švarią aplinką
-
sumažinti pasirinktinių operacijų skaičių
-
pakartokite su deterministiniais nustatymais, kad atkurtumėte
Problema: Lėtesnis nei tikėtasi
Pataisymai:
-
Patikrinkite duomenų įkėlimo programos pralaidumą ( „PyTorch“ našumo derinimo vadovas )
-
padidinti partijos dydį
-
sumažinti medienos ruošą
-
įgalinti mišrų tikslumą ( „PyTorch AMP“ dokumentai )
-
profilio žingsnio laiko suskirstymas
Problema: Užstringa dėl kelių GPU
Pataisymai:
-
patvirtinti teisingus serverio nustatymus ( „PyTorch“ paskirstytieji dokumentai )
-
patikrinkite NCCL aplinkos konfigūracijas (atsargiai) ( NCCL apžvalga )
-
pirmiausia išbandykite vieną GPU
-
užtikrinti, kad tinklas / jungtys būtų sveikos
Maža pastaba atgal: kartais pataisymas tiesiogine prasme yra perkrovimas. Tai atrodo kvaila. Tai veikia. Kompiuteriai tokie.
12) Kaina ir praktiškumas – tinkamos NVIDIA GPU ir sąrankos pasirinkimas be per didelio mąstymo 💸🧠
Ne kiekvienam projektui reikia didžiausio GPU. Kartais reikia pakankamai GPU.
Jei tiksliai derinate vidutinio dydžio modelius
-
Pirmenybę teikite VRAM ir stabilumui
-
Mišrus tikslumas labai padeda ( „PyTorch AMP“ dokumentai , „TensorFlow“ mišraus tikslumo vadovas ).
-
Dažnai galite išsiversti su vienu galingu GPU
Jei mokote didesnius modelius nuo nulio
-
Jums reikės kelių GPU arba labai didelės VRAM
-
Jums rūpės NVLink ir ryšio greitis ( NVIDIA NVLink apžvalga , NCCL apžvalga )
-
Tikriausiai naudosite atminties optimizavimo priemones („ZeRO“, perkrovą ir kt.) ( „DeepSpeed ZeRO“ dokumentai , „Microsoft Research: ZeRO/DeepSpeed “).
Jei atliekate eksperimentus
-
Norite greito iteracijos
-
Neišleiskite visų pinigų GPU, o tada neeikvokite atminties ir RAM
-
Subalansuota sistema nugali nesubalansuotą (daugelį dienų)
Ir tiesą sakant, galite gaišti savaites ieškodami „tobulų“ aparatinės įrangos pasirinkimų. Sukurkite kažką veikiančio, išmatuokite ir pakoreguokite. Tikrasis priešas yra grįžtamojo ryšio ciklo nebuvimas.
Baigiamosios pastabos – kaip naudoti NVIDIA GPU dirbtinio intelekto mokymui neišeinant iš proto 😌✅
kaip naudoti NVIDIA GPU dirbtinio intelekto mokymui nieko daugiau nepasimokysite , pasinaudokite šiuo:
-
įsitikinkite, kad
„nvidia-smi“veikia ( NVIDIA „nvidia-smi“ dokumentacija ) -
Pasirinkite švarų programinės įrangos kelią (dažnai lengviausia naudoti su sistema susietą CUDA) ( „PyTorch Get Started“ (CUDA selektorius) ).
-
Prieš didinant mastelį, patvirtinkite nedidelį GPU mokymo ciklą ( torch.cuda.is_available )
-
Tvarkykite VRAM taip, lyg tai būtų ribota sandėliuko lentyna
-
Mišrų tikslumą naudokite anksti – tai ne tik „pažangūs dalykai“ ( „PyTorch AMP“ dokumentai , „TensorFlow“ mišraus tikslumo vadovas ).
-
Jei jis lėtas, įtarkite duomenų įkėlimo programą ir įvesties/išvesties procesorių, prieš kaltindami GPU ( „PyTorch“ našumo derinimo vadovas )
-
Kelių GPU technologija yra galinga, bet didina sudėtingumą – mastelio keitimas vyksta palaipsniui ( PyTorch DDP dokumentai , NCCL apžvalga )
-
Stebėkite naudojimą ir tempus, kad problemos išryškėtų anksti ( NVIDIA nvidia-smi dokumentai )
Mokymasis dirbti su NVIDIA vaizdo plokštėmis yra vienas iš tų įgūdžių, kurie gali atrodyti bauginantys, o staiga tai tampa tiesiog... įprasta. Kaip mokytis vairuoti. Iš pradžių viskas triukšminga ir painu, ir vairą suspaudi per stipriai. Tada vieną dieną jau važiuoji stabiliai, gurkšnoji kavą ir nerūpestingai sprendi partijos dydžio problemą, tarsi tai nebūtų didelė problema ☕😄
DUK
Ką reiškia apmokyti dirbtinio intelekto modelį naudojant NVIDIA GPU
Mokymas naudojant NVIDIA GPU reiškia, kad jūsų modelio parametrai ir mokymo paketai yra GPU VRAM atmintyje, o sudėtingi matematiniai veiksmai (tiesioginis perdavimas, atgalinis perdavimas, optimizavimo veiksmai) atliekami naudojant CUDA branduolius. Praktiškai tai dažnai reiškia, kad reikia užtikrinti, jog modelis ir tenzoriai būtų CUDA , o tada stebėti atmintį, jos panaudojimą ir temperatūrą, kad pralaidumas išliktų pastovus.
Kaip patikrinti, ar NVIDIA GPU veikia prieš diegiant ką nors kita
Pradėkite nuo „nvidia-smi“ . Ji turėtų rodyti GPU pavadinimą, tvarkyklės versiją, dabartinį atminties naudojimą ir visus veikiančius procesus. Jei „nvidia-smi“ nepavyksta, palaukite, kol bus paleistas „PyTorch“ / „TensorFlow“ / „JAX“ – pirmiausia pataisykite tvarkyklės matomumą. Tai yra bazinis GPU mokymo patikrinimas „ar orkaitė įjungta į elektros tinklą“.
Pasirinkimas tarp sistemos CUDA ir CUDA, komplektuojamos su „PyTorch“
Įprastas būdas yra naudoti su sistema susietą CUDA (kaip ir daugelį „PyTorch“ ratų), nes tai sumažina judančių dalių skaičių – jums daugiausia reikia suderinamo NVIDIA tvarkyklės. Įdiegus visą sistemos CUDA įrankių rinkinį, suteikiama daugiau valdymo galimybių (pasirinktiniai kompiliavimai, kompiliavimo operacijos), tačiau taip pat atsiranda daugiau galimybių versijų neatitikimams ir painiems vykdymo laiko klaidoms.
Kodėl mokymai vis tiek gali būti lėti net ir naudojant NVIDIA GPU
Dažnai GPU apkrauna įvesties srautas. Dėl delsimo veikiantys duomenų įkėlimo įrenginiai, intensyvus procesoriaus išankstinis apdorojimas mokymo etape, maži paketų dydžiai arba lėtas saugojimas gali priversti galingą GPU elgtis kaip nenaudojamą vietos šildytuvą. Prieš kaltinant modelį, dažniausiai reikia padidinti duomenų įkėlimo įrenginių skaičių, įjungti prisegtą atmintį, pridėti išankstinį nuskaitymą ir apkarpyti žurnalavimą.
Kaip išvengti klaidų „CUDA atminties trūkumas“ mokant NVIDIA GPU
Dauguma pataisymų yra susiję su VRAM taktika: sumažinti partijos dydį, įgalinti mišrų tikslumą (FP16/BF16), naudoti gradiento kaupimą, sutrumpinti sekos ilgį/apkarpymo dydį arba naudoti aktyvinimo kontrolinius taškus. Taip pat patikrinkite, ar nėra kitų GPU procesų, kurie naudoja atmintį. Kai kurie bandymai ir klaidos yra normalu – VRAM biudžeto sudarymas tampa pagrindiniu įpročiu praktiniame GPU mokyme.
Kodėl VRAM gali atrodyti pilna net ir pasibaigus mokymo scenarijui
Sistemos dažnai kaupia GPU atmintį talpykloje, kad padidintų greitį, todėl rezervuotos atminties kiekis gali išlikti didelis net ir tada, kai skiriamos atminties sumažėja. Tai gali būti panašu į nutekėjimą, tačiau dažnai talpyklos paskirstytojas elgiasi taip, kaip numatyta. Praktinis įprotis yra sekti modelį laikui bėgant ir palyginti „paskirstytą ir rezervuotą“, o ne sutelkti dėmesį į vieną nerimą keliančią momentinę nuotrauką.
Kaip patvirtinti, kad modelis tyliai nesitreniruoja su procesoriumi
Ankstyvas loginio patikrinimo metodas: confirm torch.cuda.is_available() grąžina True , verify next(model.parameters()).device rodo cuda ir paleiskite vieną bandymą į priekį be klaidų. Jei našumas atrodo įtartinai lėtas, taip pat patikrinkite, ar jūsų partijos perkeliamos į GPU. Įprasta, kad modelis perkeliamas ir netyčia paliekami duomenys.
Paprasčiausias kelias į kelių GPU mokymą
Duomenų lygiagretusis mokymas (DDP stiliaus mokymas) dažnai yra geriausias pirmas žingsnis: padalinkite paketus tarp GPU ir sinchronizuokite gradientus. Tokios priemonės kaip „Accelerate“ gali sumažinti kelių GPU darbo skausmą be visiško perrašymo. Tikėkitės papildomų kintamųjų – NCCL ryšio, sujungimų skirtumų („NVLink“ ir „PCIe“) ir padidėjusių duomenų kliūčių – todėl laipsniškas mastelio keitimas po sėkmingo vieno GPU veikimo paprastai vyksta geriau.
Į ką atkreipti dėmesį mokant NVIDIA GPU, kad problemos būtų pastebėtos anksti
Stebėkite GPU apkrovą, atminties naudojimą (stabilus ar kylantis), energijos suvartojimą ir temperatūrą – greičio ribojimas gali nepastebimai sumažinti greitį. Taip pat stebėkite procesoriaus apkrovą, nes duomenų perdavimo problemos dažnai pirmiausia išryškėja ten. Jei apkrovos lygis staigus arba mažas, įtarkite įvesties/išvesties arba duomenų įkėlimo įrenginius; jei jis didelis, bet žingsnio laikas vis tiek lėtas, apdorokite branduolių profilį, tikslumo režimą ir žingsnio laiko suskirstymą.
Nuorodos
-
NVIDIA – NVIDIA nvidia-smi dokumentai – docs.nvidia.com
-
NVIDIA – NVIDIA sistemos valdymo sąsaja (NVSMI) – developer.nvidia.com
-
NVIDIA – NVIDIA NVLink apžvalga – nvidia.com
-
„PyTorch“ – „PyTorch“ pradžiamokslis (CUDA parinkiklis) – pytorch.org
-
„PyTorch“ – „PyTorch CUDA“ dokumentacija – docs.pytorch.org
-
„TensorFlow“ – „TensorFlow“ diegimas (pip) – tensorflow.org
-
JAX – JAX greitas paleidimas – docs.jax.dev
-
Apkabinantis veidas – trenerio dokumentai – huggingface.co
-
„Lightning“ dirbtinis intelektas – „Lightning“ dokumentai – lightning.ai
-
„DeepSpeed“ – „ZeRO“ dokumentai – deepspeed.readthedocs.io
-
„Microsoft Research“ – „Microsoft Research“: „ZeRO“ / „DeepSpeed“ – microsoft.com
-
„PyTorch“ forumai – „PyTorch“ forumas: modelio patikrinimas CUDA – discuss.pytorch.org