Կարճ պատասխան. Օգտագործեք NVIDIA GPU-ները արհեստական ինտելեկտի մարզումների համար՝ նախ 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-ի կարգավորումները աշխատում են, խուսափել CUDA քաոսից և կառուցել կրկնվող մարզումների ցիկլ՝ նախքան ավելի մեծ սարքավորումների կամ ամպային աշխատանքների վրա գումար ծախսելը։.
Ինչ է անհրաժեշտ կարգավորման համար
Այս տեսակի թեստի համար ձեզ հարկավոր կլինի
Մեքենա՝ մեկ NVIDIA GPU-ով և բավարար VRAM-ով՝ խմբաքանակի չափի համար։
Աշխատող NVIDIA դրայվերը հաստատվել է nvidia-smi-ի միջոցով
Մաքուր Python միջավայր PyTorch-ի, TensorFlow-ի կամ JAX-ի համար
Փոքր պիտակավորված պատկերի տվյալների հավաքածու, իդեալականորեն բաժանված վերապատրաստման, վավերացման և փորձարկման թղթապանակների
Համեմատության համար CPU-ի բազային ժամանակի հաշվարկ
Պարզ գրանցման աղյուսակ՝ քայլերի ժամանակի, GPU հիշողության, GPU-ի օգտագործման, ջերմաստիճանի և վավերացման ճշգրտության վերաբերյալ։
Մինչև պատշաճ մարզումը սկսելը, թիմը պետք է անցկացնի CUDA-ի փոքրիկ թեստ՝ բեռնելով մեկ խմբաքանակ, տեղափոխելով մոդելը և խմբաքանակը CUDA, կատարելով մեկ առաջխաղացում և հաստատելով GPU հիշողության ավելացումը nvidia-smi-ում։.
Օրինակային հրահանգ
Գործնական նախագծի հրահանգը կարող է այսպիսի տեսք ունենալ
Մարզեք փոքր ապրանքի պատկերի դասակարգիչ՝ օգտագործելով նախապես մարզված ResNet ոճի մոդել: Նախ հաստատեք, որ nvidia-smi-ն կարող է տեսնել գրաֆիկական պրոցեսորը: Այնուհետև լրիվ մարզումից առաջ անցկացրեք մեկ խմբաքանակով CUDA թեստ: Օգտագործեք խառը ճշգրտություն, եթե այն աջակցվում է: Սկսեք 32 խմբաքանակի չափից, մեծացրեք միայն այն դեպքում, եթե գրաֆիկական պրոցեսորի հիշողությունը մնա կայուն, և յուրաքանչյուր գործարկումից հետո գրանցեք քայլի ժամանակը, գրաֆիկական պրոցեսորի հիշողության օգտագործումը, գրաֆիկական պրոցեսորի օգտագործումը, ջերմաստիճանը և վավերացման ճշգրտությունը: Եթե հայտնվի CUDA-ի հիշողությունը սպառված է, մոդելը փոխելուց առաջ նվազեցրեք խմբաքանակի չափը:.
Ինչպես փորձարկել այն
Խելամիտ փորձարկման պլանը կլինի հետևյալը
-
Գործարկեք nvidia-smi հրամանը և գրանցեք գրաֆիկական պրոցեսորի անունը, դրայվերի տարբերակը, անգործուն հիշողության օգտագործումը և ջերմաստիճանը։.
-
Գործարկեք CPU-ի մեկ խմբաքանակի թեստ՝ տվյալների հավաքածուի և մոդելի կոդի աշխատանքը հաստատելու համար։.
-
Գործարկեք նույն մեկ խմբաքանակի թեստը Cuda-ի վրա։.
-
Մարզվեք 200 քայլով՝ 32 խմբաքանակով։.
-
Կրկնեք խառը ճշգրտությունը միացված վիճակում։.
-
Փորձեք 64-րդ խմբաքանակի չափը միայն այն դեպքում, եթե առաջին գործարկումը բավարար VRAM ազատ տարածք է թողնում։.
-
Համեմատեք ստուգման ճշգրտությունը, միջին քայլի ժամանակը, գագաթնակետային VRAM-ը և GPU ջերմաստիճանը։.
Լավ արդյունքը պարզապես «մարզվելը» չէ։ Լավ արդյունքը «մարզվել է գրաֆիկական պրոցեսորի վրա, արագությունը բարելավվել է, հիշողությունը մնացել է կայուն, և աշխատանքը կարող է կրկնվել վաղը առանց ամեն ինչ վերատեղադրելու»։.
Արդյունք
Նկարազարդ արդյունք, որը հիմնված է երեք փոքր 200 քայլանոց թեստերի ժամանակագրման վրա՝ պրոցեսորից մեկ NVIDIA GPU-ի վրա մարզումը տեղափոխելուց առաջ և հետո։
Միայն CPU-ի բազային արժեքը՝ 3.4 վայրկյան յուրաքանչյուր մարզման քայլի համար
GPU FP32-ով. 0.42 վայրկյան մարզման յուրաքանչյուր քայլի համար
GPU խառը ճշգրտությամբ՝ 0.28 վայրկյան մարզման յուրաքանչյուր քայլի համար
Առավելագույն GPU հիշողություն 32 խմբաքանակի չափսով՝ 5.8 ԳԲ
GPU-ի առավելագույն հզորության հիշողություն՝ 64 խմբաքանակի չափսով՝ 10.9 ԳԲ
Փաթեթի չափս 96. ձախողվեց CUDA-ի հիշողության պակասի պատճառով
Գրաֆիկական պրոցեսորի օգտագործումը կայուն աշխատանքի ժամանակ՝ 76%-ից մինչև 91%
Ջերմաստիճանը կայուն պայմաններում՝ 67°C-ից մինչև 73°C
Կարճ փորձարկումից հետո վավերացման ճշգրտությունը՝ 82% FP32-ի դեպքում, 82.4% խառը ճշգրտությամբ։
Այս օրինակի գնահատման մեջ, խառը ճշգրտությունը կրճատել է քայլի ժամանակը մոտ 33%-ով՝ համեմատած FP32 GPU-ի աշխատանքի հետ, միաժամանակ պահպանելով վավերացման ճշգրտությունը մոտավորապես նույնը: Թիմը կարողացել է ստուգել այս թվերը՝ ժամանակացույց սահմանելով յուրաքանչյուր մարզման քայլի համար, ստուգելով nvidia-smi-ն աշխատանքի ընթացքում և պահպանելով վավերացման ճշգրտությունը յուրաքանչյուր փորձարկումից հետո:.
Ի՞նչը կարող է սխալ ընթանալ
Ամենատարածված սխալը չափազանց վաղ մասշտաբավորումն է։ Եթե մեկ խմբաքանակով CUDA թեստը ձախողվի, ամբողջական մարզումը կախարդականորեն չի լուծի խնդիրը։.
Այլ հեշտ թակարդներ
CUDA-ի մի քանի տարբերակների տեղադրում և չիմանալ, թե որ տարբերակն է օգտագործում շրջանակը։
Մոդելը տեղափոխում ենք CUDA, բայց խմբաքանակները թողնում ենք CPU-ի վրա։
Ընտրելով խմբաքանակի չափ, որը մեկ անգամ է տեղավորվում, բայց մի քանի քայլից հետո ձախողվում է
VRAM-ն արդեն օգտագործող այլ գործընթացների անտեսում
Մեղադրել GPU-ին, երբ տվյալների բեռնիչը չափազանց դանդաղ է
CPU-ի և GPU-ի համեմատությունը՝ առանց նույն տվյալների հավաքածուի, խմբաքանակի չափի և մոդելի օգտագործման
Մարդը պետք է վերանայի նաև առաջին մի քանի կանխատեսումները։ Արագ ուսուցումը քիչ արժեք ունի, եթե պիտակները աղմկոտ են, դասերը՝ անհավասարակշիռ, կամ մոդելը սովորում է կարճ ճանապարհներ, ինչպիսիք են ֆոնի գույնը՝ ապրանքի տեսակի փոխարեն։.
Գործնական ուսուցողական նյութ
NVIDIA GPU-ի հուսալի մարզման աշխատանքային հոսքը սկսվում է փոքրից. ապացուցեք, որ դրայվերն աշխատում է, ապացուցեք, որ CUDA-ն աշխատում է, ապացուցեք, որ մեկ խմբաքանակն աշխատում է, ապա աստիճանաբար մեծացրեք խմբաքանակի չափը և մարզման տևողությունը: Ամենաարագ կարգավորումը այն չէ, որն ունի թղթի վրա ամենատպավորիչ GPU-ն, այլ այն է, որը ձեզ ապահովում է կայուն, չափելի աշխատանք՝ առանց ժամեր վատնելու խուսափելի տարբերակի, VRAM-ի և տվյալների բեռնման խնդիրների վրա:.
Հաճախակի տրվող հարցեր
Ի՞նչ է նշանակում արհեստական բանականության մոդել մարզել 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