Կարճ պատասխան. nvidia-smi-ի միջոցով ստուգելով, որ դրայվերը և GPU-ն տեսանելի են , այնուհետև տեղադրելով համատեղելի framework/CUDA stack և գործարկելով փոքրիկ «model + batch on cuda» թեստը: Եթե հիշողությունը սպառվել է, նվազեցրեք batch-ի չափը և օգտագործեք խառը ճշգրտություն՝ միաժամանակ վերահսկելով օգտագործումը, հիշողությունը և ջերմաստիճանը:
Հիմնական եզրակացություններ՝
Հիմնական ստուգումներ . Սկսեք nvidia-smi- ; շտկեք դրայվերի տեսանելիությունը նախքան շրջանակները տեղադրելը։
Ստեքի համատեղելիություն . Պահպանեք դրայվերի, CUDA-ի գործարկման և շրջանակի տարբերակների համապատասխանությունը՝ խափանումներից և անկայուն տեղադրումներից խուսափելու համար։
Փոքրիկ հաջողություն . փորձարկումները մասշտաբավորելուց առաջ հաստատեք CUDA-ի վրա մեկ առաջ անցման կատարումը։
VRAM կարգապահություն . հենվեք խառը ճշգրտության, գրադիենտային կուտակման և ստուգիչ կետերի վրա՝ ավելի մեծ մոդելներին համապատասխանելու համար։
Մոնիթորինգի սովորություն . հետևեք օգտագործմանը, հիշողության օրինաչափություններին, հզորությանը և ջերմաստիճաններին, որպեսզի վաղ հայտնաբերեք խոչընդոտները:

Հոդվածներ, որոնք կարող են ձեզ դուր գալ կարդալ սրանից հետո
🔗 Ինչպես ստեղծել արհեստական բանականության գործակալ
Նախագծեք ձեր գործակալի աշխատանքային հոսքը, գործիքները, հիշողությունը և անվտանգության միջոցները։.
🔗 Ինչպես տեղակայել արհեստական բանականության մոդելները
Հուսալիորեն կարգավորեք միջավայրերը, փաթեթավորեք մոդելները և առաքեք արտադրության։.
🔗 Ինչպես չափել արհեստական բանականության արդյունավետությունը
Ընտրեք չափանիշներ, անցկացրեք գնահատումներ և հետևեք արդյունավետությանը ժամանակի ընթացքում։.
🔗 Ինչպես ավտոմատացնել առաջադրանքները արհեստական բանականության միջոցով
Ավտոմատացրեք կրկնվող աշխատանքը՝ օգտագործելով հուշումներ, աշխատանքային հոսքեր և ինտեգրացիաներ։.
1) Ընդհանուր պատկերը՝ ինչ եք անում, երբ «մարզվում եք GPU-ով» 🧠⚡
Երբ դուք մարզում եք արհեստական բանականության մոդելներ, դուք հիմնականում կատարում եք մատրիցային մաթեմատիկայի մի ամբողջ լեռ։ Գրաֆիկական պրոցեսորները նախատեսված են նման զուգահեռ աշխատանքի համար, ուստի PyTorch-ի, TensorFlow-ի և JAX-ի նման շրջանակները կարող են ծանր բեռը թեթևացնել գրաֆիկական պրոցեսորի վրա։ ( PyTorch CUDA փաստաթղթեր , TensorFlow տեղադրում (pip) , JAX արագ մեկնարկ )
Գործնականում «NVIDIA GPU-ների օգտագործումը մարզումների համար» սովորաբար նշանակում է
-
Ձեր մոդելի պարամետրերը (հիմնականում) գտնվում են GPU VRAM-ում
-
Ձեր խմբաքանակները RAM-ից տեղափոխվում են VRAM յուրաքանչյուր քայլով
-
Ձեր առաջ և հետընթաց փոխանցումները կատարվում են CUDA միջուկների վրա ( CUDA ծրագրավորման ուղեցույց )
-
Ձեր օպտիմիզատորի թարմացումները տեղի են ունենում GPU-ի վրա (իդեալականում)
-
Դուք վերահսկում եք ջերմաստիճանը, հիշողությունը, օգտագործումը, որպեսզի ոչինչ չեփեք 🔥 ( NVIDIA nvidia-smi փաստաթղթեր )
Եթե դա շատ է թվում, մի անհանգստացեք։ Դա հիմնականում ստուգաթերթիկ է և մի քանի սովորություններ, որոնք դուք ժամանակի ընթացքում եք ձեռք բերում։.
2) Ի՞նչն է NVIDIA GPU AI մարզումների համակարգի լավ տարբերակը դարձնում 🤌
Սա «մի՛ կառուցեք տուն ժելեի վրա» բաժինն է։ NVIDIA GPU-ների արհեստական ինտելեկտի մարզումների համար է այն, որը ցածր դրամա է։ Ցածր դրամա է կայունը։ Կայուն է արագը։ Արագը… լավ, արագ է 😄
Հաստատուն մարզման համակարգը սովորաբար ներառում է
-
Բավարար VRAM ձեր խմբաքանակի չափի + մոդելի + օպտիմիզատորի վիճակների համար
-
VRAM-ը նման է ճամպրուկի տարածքի։ Կարող ես ավելի խելացիորեն փաթեթավորել, բայց անվերջ չես կարող փաթեթավորել։.
-
-
Համապատասխան ծրագրային ապահովման փաթեթ (դրայվեր + CUDA runtime + framework համատեղելիություն) ( PyTorch Get Started (CUDA selector) , TensorFlow install (pip) )
-
Արագ պահեստավորում (NVMe-ն շատ է օգնում մեծ տվյալների հավաքածուների համար)
-
Լավ CPU + RAM, այնպես որ տվյալների բեռնումը չի ծանրաբեռնում GPU-ն ( PyTorch-ի կատարողականի կարգավորման ուղեցույց )
-
Սառեցման և հզորության հզորություն (չգնահատված մինչև վերջ 😬)
-
Վերարտադրելի միջավայր (venv/conda կամ կոնտեյներներ), որպեսզի թարմացումները չվերածվեն քաոսի ( NVIDIA կոնտեյներների գործիքակազմի ակնարկ )
Եվս մեկ բան, որը մարդիկ բաց են թողնում
-
Մոնիթորինգի սովորություն . դուք ստուգում եք GPU հիշողությունը և օգտագործումը, ինչպես հայելիները նայում եք վարելիս: ( NVIDIA nvidia-smi փաստաթղթեր )
3) Համեմատական աղյուսակ - NVIDIA GPU-ներով մարզվելու հայտնի եղանակներ (առանձնահատկություններով) 📊
Ստորև բերված է արագ «որն է համապատասխանում» խորամանկ հարցաթերթիկը։ Գները մոտավոր են (քանի որ իրականությունը տարբեր է), և այո, այս բջիջներից մեկը մի փոքր անկապ է, միտումնավոր։.
| Գործիք / մոտեցում | Լավագույնը | Գինը | Ինչու է այն աշխատում (հիմնականում) |
|---|---|---|---|
| PyTorch (վանիլային) PyTorch | մարդկանց մեծ մասը, նախագծերի մեծ մասը | Անվճար | Ճկուն, հսկայական էկոհամակարգ, հեշտ վրիպազերծում - նաև բոլորն ունեն կարծիքներ |
| PyTorch Lightning Lightning փաստաթղթերը | թիմեր, կառուցվածքային մարզումներ | Անվճար | Նվազեցնում է ստանդարտ, ավելի մաքուր ցիկլերը. երբեմն թվում է «կախարդանք», մինչև որ այլևս չի գործում |
| Գրկախառնվող դեմք Տրանսֆորմերներ + Մարզիչ Մարզիչի փաստաթղթեր | NLP + LLM նուրբ կարգավորում | Անվճար | Մարտկոցներով հագեցած մարզում, հիանալի կարգավորումներ, արագ հաղթանակներ 👍 |
| Արագացնել Արագացնել փաստաթղթերը | բազմա-GPU առանց ցավի | Անվճար | DDP-ն դարձնում է պակաս նյարդայնացնող, հարմար է մասշտաբը մեծացնելու համար՝ առանց ամեն ինչ վերաշարադրելու։ |
| DeepSpeed ZeRO փաստաթղթեր | մեծ մոդելներ, հիշողության հնարքներ | Անվճար | ZeRO, բեռնաթափում, մասշտաբավորում - կարող են լինել բարդ, բայց բավարարող, երբ սեղմում են |
| TensorFlow + Keras TF տեղադրում | արտադրական խողովակաշարեր | Անվճար | Հզոր գործիքակազմ, լավ տեղակայման պատմություն. ոմանց դուր է գալիս, ոմանց՝ աննկատ՝ ոչ |
| JAX + Flax JAX արագ մեկնարկ / Flax փաստաթղթեր | հետազոտություն + արագության սիրահարներ | Անվճար | XLA կոմպիլյացիան կարող է աներևակայելի արագ լինել, բայց վրիպազերծումը կարող է թվալ… աբստրակտ |
| NVIDIA NeMo NeMo-ի ակնարկ | խոսքի + իրավունքի կառավարման աշխատանքային հոսքեր | Անվճար | NVIDIA-ի համար օպտիմալացված հավաքածու, լավ բաղադրատոմսեր՝ զգացողություն է, կարծես թե պատրաստում եք շքեղ ջեռոցում 🍳 |
| Docker + NVIDIA Container Toolkit գործիքակազմի ակնարկ | վերարտադրելի միջավայրեր | Անվճար | «Աշխատում է իմ մեքենայի վրա» դառնում է «աշխատում է մեր մեքենաների վրա» (կրկին, հիմնականում) |
4) Քայլ մեկ՝ համոզվեք, որ ձեր GPU-ն ճիշտ է երևում 🕵️♂️
Մինչև տասնյակ բաներ տեղադրելը, ստուգեք հիմունքները։.
Բաներ, որոնք դուք կցանկանայիք, որ իրական լինեն
-
Մեքենան տեսնում է գրաֆիկական պրոցեսորը
-
NVIDIA դրայվերը ճիշտ է տեղադրված
-
GPU-ն ուրիշ բանով չի զբաղված
-
Դուք կարող եք հուսալիորեն հարցնել այն
Դասական ստուգումը հետևյալն է
-
nvidia-smi( NVIDIA nvidia-smi փաստաթղթեր )
Ինչ եք փնտրում՝
-
GPU-ի անվանումը (օրինակ՝ RTX, A-սերիա և այլն)
-
Վարորդի տարբերակը
-
Հիշողության օգտագործումը
-
Գործող գործընթացներ ( NVIDIA nvidia-smi փաստաթղթեր )
Եթե nvidia-smi-ն ձախողվի, կանգ առեք այստեղ։ Դեռ մի տեղադրեք շրջանակներ։ Դա նման է հաց թխելու փորձին, երբ ձեր վառարանը միացված չէ։ ( NVIDIA համակարգի կառավարման ինտերֆեյս (NVSMI) )
Փոքր մարդկային նշում. երբեմն nvidia-smi-ն աշխատում է, բայց ձեր մարզումը դեռևս ձախողվում է, քանի որ ձեր շրջանակի կողմից օգտագործվող CUDA runtime-ը չի համապատասխանում դրայվերի սպասումներին: Դուք հիմարություն չեք անում: Ահա թե ինչպես է… պարզապես այդպես է 😭 ( PyTorch Get Start (CUDA selector) , TensorFlow install (pip) )
5) Կառուցեք ծրագրային ապահովման փաթեթը՝ դրայվերներ, CUDA, cuDNN և «համատեղելիության պարը» 💃
Ահա թե որտեղ են մարդիկ ժամեր կորցնում։ Հնարքն այն է, որ ընտրեք ուղի և հետևեք դրան ։
Ընտրանք A. Framework-ի հետ համատեղելի CUDA (հաճախ ամենահեշտը)
Շատ PyTorch համակարգեր ունեն իրենց սեփական CUDA runtime-ը, ինչը նշանակում է, որ ձեզ անհրաժեշտ չէ համակարգում տեղադրված CUDA գործիքակազմի ամբողջական փաթեթ։ Հիմնականում ձեզ անհրաժեշտ է միայն համատեղելի NVIDIA դրայվեր։ ( PyTorch-ի մեկնարկ (CUDA selector) , PyTorch-ի նախորդ տարբերակներ (CUDA wheels) )
Առավելություններ՝
-
Ավելի քիչ շարժվող մասեր
-
Ավելի հեշտ տեղադրումներ
-
Ավելի վերարտադրելի է յուրաքանչյուր միջավայրի համար
Թերություններ՝
-
Եթե միջավայրերը պատահականորեն խառնեք, կարող եք շփոթվել
Ընտրանք B. Համակարգի CUDA գործիքակազմ (ավելի շատ վերահսկողություն)
Դուք տեղադրում եք CUDA գործիքակազմը համակարգի վրա և ամեն ինչ համապատասխանեցնում դրան։ ( CUDA Toolkit փաստաթղթեր )
Առավելություններ՝
-
Ավելի շատ վերահսկողություն պատվերով կառուցվածքների համար, որոշ հատուկ գործիքակազմ
-
Հարմար է որոշակի գործողությունների կոմպիլյացիայի համար
Թերություններ՝
-
Ավելի շատ եղանակներ՝ տարբերակները չհամապատասխանելու և լուռ լաց լինելու համար
cuDNN և NCCL, մարդկային առումով
-
cuDNN-ը արագացնում է խորը ուսուցման պրիմիտիվները (փաթաթումներ, RNN բիթեր և այլն) ( NVIDIA cuDNN փաստաթղթեր )
-
NCCL-ը արագ «GPU-ից GPU հաղորդակցության» գրադարան է բազմա-GPU մարզումների համար ( NCCL-ի ակնարկ ):
Եթե դուք մարզվում եք բազմաթիվ գրաֆիկական պրոցեսորներով, NCCL-ը ձեր լավագույն ընկերն է, իսկ երբեմն՝ նաև ձեր քմահաճ սենյակակիցը։ ( NCCL-ի ակնարկ )
6) Ձեր առաջին GPU մարզումը (PyTorch-ի օրինակով մտածելակերպ) ✅🔥
NVIDIA GPU-ների արհեստական ինտելեկտի մարզումների համար օգտագործման ուղեցույցը հետևելու համար ձեզ նախ մեծ նախագիծ պետք չէ։ Ձեզ անհրաժեշտ է փոքրիկ հաջողություն։
Հիմնական գաղափարներ՝
-
Սարքի հայտնաբերում
-
Տեղափոխել մոդելը GPU-ի վրա
-
Տեղափոխել թենզորները GPU
-
Հաստատեք առաջ անցումները այնտեղ ( PyTorch CUDA փաստաթղթեր )
Բաներ, որոնցով ես միշտ շուտ եմ ստուգում իմ ողջամտությունը
-
torch.cuda.is_available()-ը վերադարձնում էTrue( torch.cuda.is_available ) -
next(model.parameters()).device-ըցույց է տալիսcuda-ն( PyTorch Ֆորում. մոդելի ստուգում CUDA-ի վրա ) -
Մեկ խմբաքանակով առաջ անցնելը սխալ չի առաջացնում
-
GPU հիշողությունը մեծանում է, երբ սկսում եք մարզվել (լավ նշան է!) ( NVIDIA nvidia-smi փաստաթղթեր )
Հաճախ հանդիպող «ինչու՞ է դանդաղ» հարցերը
-
Ձեր տվյալների բեռնիչը չափազանց դանդաղ է (GPU-ն անգործուն է) ( PyTorch-ի աշխատանքի կարգավորման ուղեցույց )
-
Դուք մոռացել եք տվյալները տեղափոխել GPU (վա՜յ):
-
Փաթեթի չափը փոքր է (GPU-ն թերօգտագործված է)
-
Դուք մարզման փուլում ծանրաբեռնված եք CPU նախնական մշակմամբ
Այո՛, ձեր գրաֆիկական պրոցեսորը հաճախ «այնքան էլ զբաղված» չի թվում, եթե խնդիրը տվյալները են։ Դա նման է մրցարշավորդ վարձելուն, ապա նրան ամեն շրջանի վառելիքի սպասեցնելուն։.
7) VRAM խաղը՝ խմբաքանակի չափ, խառը ճշգրտություն և ոչ պայթուցիկ 💥🧳
Գործնական մարզման խնդիրների մեծ մասը հանգում է հիշողությանը։ Եթե դուք սովորում եք մեկ հմտություն, սովորեք VRAM կառավարում։.
Հիշողության օգտագործումը կրճատելու արագ եղանակներ
-
Խառը ճշգրտություն (FP16/BF16)
-
Սովորաբար նաև մեծ արագության բարձրացում։ Երկու կողմերի համար էլ շահեկան է 😌 ( PyTorch AMP փաստաթղթեր , TensorFlow խառը ճշգրտության ուղեցույց )
-
-
Գրադիենտային կուտակում
-
Սիմուլյացրեք ավելի մեծ խմբաքանակի չափսը՝ գրադիենտներ կուտակելով մի քանի քայլերի ընթացքում ( Transformers-ի ուսումնական փաստաթղթեր (գրադիենտների կուտակում, fp16) ):
-
-
Ավելի փոքր հաջորդականության երկարություն / կտրվածքի չափ
-
Դաժան, բայց արդյունավետ
-
-
Ակտիվացման ստուգիչ ստուգում
-
Փոխանակեք հաշվարկը հիշողության հետ (վերահաշվարկեք ակտիվացումները հետընթացի ընթացքում) ( torch.utils.checkpoint )
-
-
Օգտագործեք ավելի թեթև օպտիմիզատոր
-
Որոշ օպտիմիզատորներ պահպանում են լրացուցիչ վիճակներ, որոնք կլանում են VRAM-ը։
-
«Ինչո՞ւ է VRAM-ը դեռ լիքը, երբ ես կանգ եմ առնում» պահը
Ֆրեյմվորքները հաճախ քեշավորում են հիշողությունը ՝ կատարողականության համար։ Սա նորմալ է։ Սա սարսափելի է թվում, բայց միշտ չէ, որ արտահոսք է։ Դուք սովորում եք կարդալ օրինաչափությունները։ ( PyTorch CUDA semantics: caching allocator )
Գործնական սովորություն
-
Հատկացված և պահուստավորված հիշողության դիտում (շրջանակին հատուկ) ( PyTorch CUDA semantics: caching allocator )
-
Մի՛ խուճապի մատնվեք առաջին սարսափելի թվից 😅
8) Իրականացրեք GPU-ի աշխատունակությունը՝ ժամանակի արժեք ունեցող կատարողականի կարգավորում 🏎️
«GPU-ի մարզումը աշխատեցնելը» առաջին քայլն է։ Այն արագացնելը ՝ երկրորդ քայլը։
Բարձր ազդեցության օպտիմալացումներ
-
Մեծացրեք խմբաքանակի չափը (մինչև ցավը սկսվի, ապա մի փոքր նվազեցրեք)
-
Օգտագործեք ամրացված հիշողություն տվյալների բեռնիչներում (հոսթից սարք ավելի արագ պատճեններ) ( PyTorch-ի աշխատանքի կարգավորման ուղեցույց , PyTorch pin_memory/non_blocking ձեռնարկ )
-
Ավելացրեք տվյալների բեռնիչի աշխատողների քանակը (զգույշ եղեք, չափազանց շատերը կարող են հակառակ արդյունք տալ) ( PyTorch-ի կատարողականի կարգավորման ուղեցույց )
-
Նախնական ներբեռնումը խմբաքանակներով է կատարվում , որպեսզի GPU-ն չաշխատի անգործուն վիճակում
-
Օգտագործեք միաձուլված գործողություններ / օպտիմիզացված միջուկներ , երբ հասանելի է
-
Օգտագործեք խառը ճշգրտություն (կրկին, դա այդքան լավ է) ( PyTorch AMP փաստաթղթեր )
Ամենաանտեսված խոչընդոտը
Ձեր պահեստավորման և նախնական մշակման խողովակաշարը։ Եթե ձեր տվյալների բազմությունը հսկայական է և պահվում է դանդաղ սկավառակի վրա, ձեր գրաֆիկական պրոցեսորը դառնում է թանկարժեք տարածքային ջեռուցիչ։ Շատ առաջադեմ, շատ փայլուն տարածքային ջեռուցիչ։.
Նաև, մի փոքրիկ խոստովանություն. ես մեկ ժամ «օպտիմալացրել» եմ մոդելը, միայն թե հասկացա, որ գրանցման գործընթացը խոչընդոտ է։ Շատ տպագրելը կարող է դանդաղեցնել մարզումը։ Այո, կարող է։.
9) Բազմա-GPU մարզում - DDP, NCCL և մասշտաբավորում առանց քաոսի 🧩🤝
Երբ ուզում եք ավելի մեծ արագություն կամ ավելի մեծ մոդելներ, ապա օգտագործում եք բազմա-տեսա-կարող։ Ահա թե որտեղ է ամեն ինչ ավելի բարդանում։.
Ընդհանուր մոտեցումներ
-
Տվյալների զուգահեռ (DDP)
-
Բաժանեք խմբաքանակները GPU-ների միջև, համաժամեցրեք գրադիենտները
-
Սովորաբար լռելյայն «լավ» տարբերակն է ( PyTorch DDP փաստաթղթեր )
-
-
Մոդելային զուգահեռ / Տենզորային զուգահեռ
-
Մոդելը բաժանեք GPU-ների միջև (շատ մեծ մոդելների համար)
-
-
Խողովակաշարի զուգահեռ
-
Մոդելի շերտերը բաժանել փուլերի (ինչպես հավաքման գծում, բայց թենզորների համար)
-
Եթե նոր եք սկսում, DDP ոճի մարզումը լավագույն տարբերակն է: ( PyTorch DDP ձեռնարկ )
Գործնական խորհուրդներ բազմա-GPU-ի համար
-
Համոզվեք, որ գրաֆիկական պրոցեսորները նմանապես կարող են աշխատել (խառնումը կարող է խոչընդոտ լինել)
-
Դիտեք միջկապը. NVLink-ը և PCIe-ն կարևոր են համաժամեցման ծանրաբեռնվածության դեպքում ( NVIDIA NVLink-ի ակնարկ , NVIDIA NVLink փաստաթղթեր )
-
Պահպանեք մեկ GPU-ի համար խմբաքանակների չափերի հավասարակշռությունը
-
Մի անտեսեք պրոցեսորը և պահեստը. բազմա-տեսախցիկ պրոցեսորը կարող է մեծացնել տվյալների խցանումները
Եվ այո, NCCL սխալները կարող են թվալ հանելուկ, որը փաթաթված է «ինչու՞ հիմա» հարցի մեջ։ Դուք անիծված չեք։ Հավանաբար։ ( NCCL-ի ակնարկ )
10) Մոնիթորինգ և պրոֆիլավորում՝ ոչ հմայիչ բաներ, որոնք ձեզ ժամեր են խնայում 📈🧯
Սկսելու համար ձեզ պետք չեն շքեղ վահանակներ։ Դուք պետք է նկատեք, երբ ինչ-որ բան սխալ է։.
Հիմնական ազդանշաններ, որոնք պետք է դիտարկել
-
GPU-ի օգտագործումը . այն մշտապես բարձր է, թե՞ կտրուկ։
-
Հիշողության օգտագործումը . կայուն, բարձրացող, թե՞ տարօրինակ։
-
Էլեկտրաէներգիայի սպառում . անսովոր ցածրը կարող է նշանակել թերօգտագործում
-
Ջերմաստիճաններ . բարձր ջերմաստիճանի կայունությունը կարող է դանդաղեցնել աշխատանքի արդյունավետությունը
-
CPU-ի օգտագործումը . տվյալների փոխանցման խողովակաշարի խնդիրները երևում են այստեղ ( PyTorch-ի աշխատանքի կարգավորման ուղեցույց )
Պրոֆիլավորման մտածելակերպ (պարզ տարբերակ)
-
Եթե GPU-ն ցածր է օգտագործվում՝ տվյալների կամ CPU-ի խցանում
-
Եթե GPU-ն բարձր է, բայց դանդաղ՝ միջուկի անարդյունավետություն, ճշգրտություն կամ մոդելի ճարտարապետություն
-
Եթե մարզման արագությունը պատահականորեն նվազում է՝ ջերմային սահմանափակում, ֆոնային գործընթացներ, մուտքի/ելքի խափանումներ
Գիտեմ, մոնիթորինգը զվարճալի չի թվում։ Բայց դա նման է ատամնաթել օգտագործելուն։ Նյարդայնացնող է, բայց հանկարծ կյանքդ լավանում է։.
11) Անսարքությունների լուծում՝ սովորական կասկածյալներ (և ոչ այնքան սովորականներ) 🧰😵💫
Այս բաժինը հիմնականում հետևյալն է. «նույն հինգ հարցերը՝ ընդմիշտ»։
Խնդիր՝ CUDA-ի հիշողությունը սպառվել է
Շտկումներ՝
-
կրճատել խմբաքանակի չափը
-
օգտագործել խառը ճշգրտություն ( PyTorch AMP փաստաթղթեր , TensorFlow խառը ճշգրտության ուղեցույց )
-
Գրադիենտային կուտակում ( Տրանսֆորմերների ուսումնական փաստաթղթեր (գրադիենտային կուտակում, fp16) )
-
անցակետերի ակտիվացումներ ( torch.utils.checkpoint )
-
փակել GPU-ի մյուս գործընթացները
Խնդիր. Մարզումը պատահաբար է աշխատում պրոցեսորի վրա
Շտկումներ՝
-
համոզվեք, որ մոդելը տեղափոխվել է
CUDA -
համոզվեք, որ թենզորները տեղափոխվել են
CUDA -
Ստուգեք շրջանակային սարքի կարգավորումը ( PyTorch CUDA փաստաթղթեր )
Խնդիր՝ Տարօրինակ խափանումներ կամ հիշողությանը անօրինական մուտք
Շտկումներ՝
-
հաստատել դրայվերի + գործարկման ժամանակի համատեղելիությունը ( PyTorch Get Started (CUDA selector) , TensorFlow install (pip) )
-
փորձեք մաքուր միջավայր
-
նվազեցնել հատուկ գործողությունները
-
վերագործարկել դետերմինիստական կարգավորումներով՝ վերարտադրելու համար
Խնդիր՝ Ավելի դանդաղ, քան սպասվում էր
Շտկումներ՝
-
ստուգեք տվյալների բեռնիչի թողունակությունը ( PyTorch-ի կատարողականի կարգավորման ուղեցույց )
-
մեծացնել խմբաքանակի չափը
-
կրճատել անտառահատումը
-
միացնել խառը ճշգրտությունը ( PyTorch AMP փաստաթղթեր )
-
պրոֆիլի քայլերի ժամանակի բաշխում
Խնդիր. Բազմա-տեսախցիկի կախումներ
Շտկումներ՝
-
հաստատեք ճիշտ backend կարգավորումները ( PyTorch բաշխված փաստաթղթեր )
-
ստուգեք NCCL միջավայրի կարգավորումները (ուշադիր) ( NCCL-ի ակնարկ )
-
նախ փորձարկեք մեկ GPU
-
համոզվեք, որ ցանցը / միջկապը առողջ է
Փոքրիկ հետադարձ նշում. երբեմն լուծումը բառացիորեն վերագործարկումն է։ Դա հիմարություն է թվում։ Այն աշխատում է։ Համակարգիչներն այդպիսին են։.
12) Արժեք և գործնականություն՝ ճիշտ NVIDIA GPU-ի ընտրություն և կարգավորում՝ առանց չափազանց շատ մտածելու 💸🧠
Ոչ բոլոր նախագծերն են պահանջում ամենամեծ GPU-ն։ Երբեմն ձեզ բավարար GPU է պետք։
Եթե դուք մանրակրկիտ կարգավորում եք միջին չափի մոդելները
-
Առաջնահերթություն տվեք VRAM-ին և կայունությանը
-
Խառը ճշգրտությունը շատ է օգնում ( PyTorch AMP փաստաթղթեր , TensorFlow խառը ճշգրտության ուղեցույց )
-
Դուք հաճախ կարող եք ազատվել մեկ հզոր GPU-ով
Եթե դուք մարզում եք ավելի մեծ մոդելներ զրոյից
-
Ձեզ անհրաժեշտ կլինի մի քանի գրաֆիկական պրոցեսորներ կամ շատ մեծ VRAM
-
Դուք կհետաքրքրվեք NVLink-ով և կապի արագությամբ ( NVIDIA NVLink-ի ակնարկ , NCCL-ի ակնարկ ):
-
Դուք հավանաբար կօգտագործեք հիշողության օպտիմիզատորներ (ZeRO, offload և այլն) ( DeepSpeed ZeRO փաստաթղթեր , Microsoft Research: ZeRO/DeepSpeed )
Եթե դուք փորձարկումներ եք անում
-
Դուք ցանկանում եք արագ կրկնություն
-
Մի՛ ծախսեք ձեր ամբողջ գումարը GPU-ի վրա, իսկ հետո մի՛ սպառեք հիշողությունն ու օպերատիվ հիշողությունը
-
Հավասարակշռված համակարգը գերազանցում է անհավասար համակարգը (օրերի մեծ մասում)
Եվ իրականում, դուք կարող եք շաբաթներ վատնել «իդեալական» սարքավորումների ընտրության վրա։ Ստեղծեք ինչ-որ բան, չափեք, ապա կարգավորեք։ Իրական թշնամին հետադարձ կապի օղակ չունենալն է։.
Եզրափակիչ նշումներ - Ինչպես օգտագործել NVIDIA GPU-ները արհեստական ինտելեկտի մարզումների համար՝ առանց խելագարվելու 😌✅
Եթե այս ուղեցույցից ուրիշ ոչինչ չեք հասկանում, թե ինչպես օգտագործել NVIDIA GPU-ները արհեստական ինտելեկտի մարզումների համար , ապա հետևեք հետևյալին.
-
Նախ համոզվեք, որ
nvidia-smi-նNVIDIA nvidia-smi փաստաթղթեր ) -
Ընտրեք մաքուր ծրագրային ուղի (framework-ի հետ համատեղելի CUDA-ն հաճախ ամենահեշտն է) ( PyTorch Get Started (CUDA selector) )
-
Հաստատեք GPU-ի փոքր մարզման գործարկումը մասշտաբավորումից առաջ ( torch.cuda.is_available ):
-
Կառավարեք VRAM-ը այնպես, կարծես այն սահմանափակ պահեստային դարակ լինի
-
Օգտագործեք խառը ճշգրտությունը վաղ փուլում՝ դա պարզապես «առաջադեմ նյութ» չէ ( PyTorch AMP փաստաթղթեր , TensorFlow խառը ճշգրտության ուղեցույց ):
-
Եթե դանդաղ է, կասկածեք տվյալների բեռնիչի և I/O-ի վրա, նախքան GPU-ին մեղադրելը ( PyTorch Performance Tuning Guide ):
-
Բազմա-գրաֆիկական պրոցեսորը հզոր է, բայց բարդացնում է գործընթացը՝ մասշտաբը աստիճանաբար մեծացրեք ( PyTorch DDP փաստաթղթեր , NCCL-ի ակնարկ ):
-
Հետևեք օգտագործմանը և ջերմաստիճաններին, որպեսզի խնդիրները վաղ ի հայտ գան ( NVIDIA nvidia-smi փաստաթղթեր )
NVIDIA գրաֆիկական պրոցեսորների վրա մարզվելը այն հմտություններից մեկն է, որը թվում է վախեցնող, հետո հանկարծ այն պարզապես… նորմալ է դառնում։ Ինչպես մեքենա վարել սովորելը։ Սկզբում ամեն ինչ աղմկոտ է և շփոթեցնող, և դուք չափազանց ուժեղ եք սեղմում ղեկը։ Հետո մի օր դուք վարում եք մեքենան, սուրճ եք խմում և անփույթ լուծում խմբաքանակի չափի խնդիրը, կարծես դա մեծ բան չէ ☕😄
Հաճախակի տրվող հարցեր
Ի՞նչ է նշանակում արհեստական բանականության մոդել մարզել NVIDIA GPU-ի վրա
NVIDIA GPU-ի վրա մարզումը նշանակում է, որ ձեր մոդելի պարամետրերը և մարզման խմբերը պահվում են GPU VRAM-ում, իսկ ծանր մաթեմատիկական գործողությունները (forward pass, backprop, optimizer steps) կատարվում են CUDA միջուկների միջոցով: Գործնականում սա հաճախ կախված է մոդելի և թենզորների CUDA-ի , այնուհետև հիշողության, օգտագործման և ջերմաստիճանի վրա հսկողությունից, որպեսզի թողունակությունը մնա կայուն:
Ինչպես ստուգել, որ NVIDIA GPU-ն աշխատում է, նախքան որևէ այլ բան տեղադրելը
Սկսեք nvidia-smi- ։ Այն պետք է ցույց տա GPU-ի անունը, դրայվերի տարբերակը, հիշողության ընթացիկ օգտագործումը և բոլոր գործող գործընթացները։ Եթե nvidia-smi-ն ձախողվի, սպասեք PyTorch/TensorFlow/JAX-ի վրա՝ նախ շտկեք դրայվերի տեսանելիությունը։ Սա GPU-ի մարզման համար բազային ստուգում է՝ «միացված է վառարանը» հարցով։
Ընտրություն համակարգային CUDA-ի և PyTorch-ի հետ համատեղելի CUDA-ի միջև
Տարածված մոտեցում է framework-ի հետ կապված CUDA-ի օգտագործումը (ինչպես շատ PyTorch անիվներ), քանի որ այն նվազեցնում է շարժվող մասերի քանակը. ձեզ հիմնականում անհրաժեշտ է համատեղելի NVIDIA դրայվեր: Համակարգի ամբողջական CUDA գործիքակազմի տեղադրումը ապահովում է ավելի մեծ վերահսկողություն (պատվերով կառուցվածքներ, գործողությունների կոմպիլյացիա), բայց այն նաև ավելի շատ հնարավորություններ է ստեղծում տարբերակների անհամապատասխանությունների և շփոթեցնող գործարկման սխալների համար:.
Ինչու՞ մարզումը կարող է դանդաղ լինել նույնիսկ NVIDIA GPU-ով
Հաճախ GPU-ն ծանրաբեռնված է մուտքային հոսքագծի պատճառով։ Տվյալների բեռնիչները, որոնք դանդաղում են, մարզման փուլում CPU-ի ծանր նախնական մշակումը, փոքր խմբաքանակների չափերը կամ դանդաղ պահեստավորումը կարող են հզոր GPU-ին ստիպել գործել որպես պարապ տարածքի ջեռուցիչ։ Տվյալների բեռնիչների ավելացումը, ամրացված հիշողության միացումը, նախնական բեռնման ավելացումը և գրանցումների կրճատումը մոդելին մեղադրելուց առաջ տարածված առաջին քայլերն են։.
Ինչպես կանխել «CUDA-ն հիշողությունից դուրս է» սխալները NVIDIA GPU-ի մարզման ժամանակ
Լուծումների մեծ մասը VRAM մարտավարություն է՝ կրճատել խմբաքանակի չափը, միացնել խառը ճշգրտությունը (FP16/BF16), օգտագործել գրադիենտային կուտակում, կրճատել հաջորդականության երկարությունը/կտրման չափը կամ օգտագործել ակտիվացման ստուգիչ ստուգում: Ստուգեք նաև հիշողությունը սպառող այլ GPU պրոցեսների առկայությունը: Որոշակի փորձարկումներ և սխալներ նորմալ են. VRAM բյուջետավորումը դառնում է GPU-ի գործնական մարզումների հիմնական սովորություն:.
Ինչու՞ VRAM-ը կարող է դեռ լիքը թվալ մարզման սկրիպտի ավարտից հետո
Ֆրեյմվորքները հաճախ քեշավորում են GPU հիշողությունը՝ արագության համար, ուստի պահուստավորված հիշողությունը կարող է բարձր մնալ նույնիսկ այն դեպքում, երբ հատկացված հիշողությունը նվազում է: Սա կարող է նմանվել արտահոսքի, բայց հաճախ քեշավորման բաշխիչն է գործում ըստ նախատեսվածի: Գործնական սովորությունն այն է, որ ժամանակի ընթացքում հետևեք օրինաչափությանը և համեմատեք «հատկացվածն ու պահուստավորվածը», այլ ոչ թե կենտրոնանաք մեկ տագնապալի պատկերի վրա:.
Ինչպես ստուգել, որ մոդելը լուռ չի մարզվում պրոցեսորի վրա
Վաղ ստուգում՝ հաստատեք, որ torch.cuda.is_available()- ը վերադարձնում է True , ստուգեք, որ next(model.parameters()).device-ը ցուցադրում է cuda , և առանց սխալների կատարում է մեկ առաջխաղացում։ Եթե աշխատանքը կասկածելիորեն դանդաղ է, հաստատեք նաև, որ ձեր խմբաքանակները տեղափոխվում են GPU։ Հաճախակի է լինում մոդելը տեղափոխելը և պատահաբար տվյալները թողնելը։
Բազմա-GPU մարզման ամենապարզ ուղին
Տվյալների զուգահեռ մշակումը (DDP ոճի ուսուցում) հաճախ լավագույն առաջին քայլն է. բաժանեք խմբաքանակները GPU-ների միջև և համաժամեցրեք գրադիենտները: Accelerate-ի նման գործիքները կարող են բազմա-GPU-ն ավելի քիչ ցավոտ դարձնել առանց լրիվ վերաշարադրման: Ակնկալեք լրացուցիչ փոփոխականներ՝ NCCL հաղորդակցություն, միջկապակցման տարբերություններ (NVLink vs PCIe) և տվյալների ուժեղացված խցանումներ, ուստի մեկ GPU-ով ամուր աշխատանքից հետո աստիճանական մասշտաբավորումը, որպես կանոն, ավելի լավ է ընթանում:.
Ինչին հետևել NVIDIA GPU-ի մարզման ժամանակ՝ խնդիրները վաղ հայտնաբերելու համար
Հետևեք GPU-ի ծանրաբեռնվածությանը, հիշողության ծանրաբեռնվածությանը (կայուն կամ բարձրացող), էներգիայի սպառմանը և ջերմաստիճաններին. սահմանափակումը կարող է աննկատորեն սպառել արագությունը: Ուշադրություն դարձրեք նաև CPU-ի ծանրաբեռնվածությանը, քանի որ տվյալների խողովակաշարի խնդիրները հաճախ առաջին հերթին այնտեղ են ի հայտ գալիս: Եթե ծանրաբեռնվածությունը կտրուկ կամ ցածր է, կասկածեք I/O կամ տվյալների բեռնիչներին. եթե այն բարձր է, բայց քայլի ժամանակը դեռ դանդաղ է, պրոֆիլավորեք միջուկները, ճշգրտության ռեժիմը և քայլի ժամանակի բաշխումը:.
Հղումներ
-
NVIDIA - NVIDIA nvidia-smi փաստաթղթեր - docs.nvidia.com
-
NVIDIA - NVIDIA համակարգի կառավարման ինտերֆեյս (NVSMI) - developer.nvidia.com
-
NVIDIA - NVIDIA NVLink-ի ակնարկ - nvidia.com
-
PyTorch - PyTorch-ի մեկնարկ (CUDA ընտրիչ) - pytorch.org
-
PyTorch - PyTorch CUDA փաստաթղթեր - docs.pytorch.org
-
TensorFlow - TensorFlow-ի տեղադրում (pip) - tensorflow.org
-
JAX - JAX արագ մեկնարկ - docs.jax.dev
-
Գրկախառնվող դեմք - Մարզչի փաստաթղթեր - huggingface.co
-
Lightning AI - Lightning-ի փաստաթղթեր - lightning.ai
-
DeepSpeed - ZeRO փաստաթղթեր - deepspeed.readthedocs.io
-
Microsoft Research - Microsoft Research: ZeRO/DeepSpeed - microsoft.com
-
PyTorch Ֆորումներ - PyTorch Ֆորում. մոդելի ստուգում CUDA-ում - discuss.pytorch.org