Կարճ պատասխան. Արհեստական բանականության մոդելները օպտիմալացնելու համար ընտրեք մեկ հիմնական սահմանափակում (լատենտություն, արժեք, հիշողություն, որակ, կայունություն կամ թողունակություն), այնուհետև որևէ բան փոխելուց առաջ գրանցեք վստահելի բազային գիծ: Սկզբում հեռացրեք խողովակաշարի խոչընդոտները, այնուհետև կիրառեք ցածր ռիսկի ձեռքբերումներ, ինչպիսիք են խառը ճշգրտությունը և խմբաքանակավորումը. եթե որակը պահպանվում է, անցեք կոմպիլյատորի/գործարկման ժամանակի գործիքավորմանը և միայն դրանից հետո կրճատեք մոդելի չափը՝ անհրաժեշտության դեպքում քվանտացման կամ թորման միջոցով:
Հիմնական եզրակացություններ՝
Սահմանափակում . ընտրեք մեկ կամ երկու նպատակային չափանիշ. օպտիմալացումը փոխզիջումների, այլ ոչ թե անվճար հաղթանակների աշխարհ է։
Չափում . p50/p95/p99-ով իրական աշխատանքային բեռների պրոֆիլավորում, թողունակություն, օգտագործում և հիշողության գագաթնակետեր։
Խողովակաշար . Ուղղել տոկենիզացիան, տվյալների բեռնիչները, նախնական մշակումը և խմբաքանակավորումը մոդելին դիպչելուց առաջ։
Մատուցում . Օգտագործեք քեշավորում, միտումնավոր խմբաքանակավորում, զուգահեռ կարգավորում և ուշադիր հետևեք պոչի լատենտությանը։
Պաշտպանիչ ցանկապատեր . Յուրաքանչյուր կատարողականի փոփոխությունից հետո գործարկեք ոսկե հուշումներ, առաջադրանքի չափանիշներ և տեղում ստուգեք արդյունքները։

🔗 Ինչպես արդյունավետորեն գնահատել արհեստական բանականության մոդելները։
Հիմնական չափանիշներ և քայլեր մոդելները արդար և հուսալիորեն գնահատելու համար։
🔗 Ինչպես չափել արհեստական բանականության արդյունավետությունը իրական չափանիշներով։
Համեմատության համար օգտագործեք չափանիշեր, լատենտություն, արժեք և որակի ազդանշաններ։
🔗 Ինչպես փորձարկել արհեստական բանականության մոդելները արտադրությունից առաջ։
Գործնական փորձարկման աշխատանքային հոսք. տվյալների բաժանում, սթրեսային դեպքեր և մոնիթորինգ։
🔗 Ինչպես օգտագործել արհեստական բանականությունը բովանդակության ստեղծման համար։
Ավելի արագ գաղափարները վերածեք նախագծերի՝ կառուցվածքային հուշումների և կրկնությունների միջոցով։
1) Ի՞նչ է նշանակում «օպտիմալացնել» բառը գործնականում (քանի որ բոլորը այն տարբեր կերպ են օգտագործում) 🧠
Երբ մարդիկ ասում են «օպտիմալացնել արհեստական բանականության մոդելը», նրանք կարող են նկատի ունենալ
-
Ավելի արագացրեք (ավելի ցածր լատենտություն)
-
Դարձրեք այն ավելի էժան (ավելի քիչ GPU ժամեր, ավելի քիչ ամպային ծախսեր)
-
Փոքրացրեք այն (հիշողության հետք, եզրերի տեղակայում)
-
Դարձրեք այն ավելի ճշգրիտ (որակի բարելավումներ, հալյուցինացիաների նվազում)
-
Դարձրեք այն ավելի կայուն (ավելի քիչ տատանումներ, ավելի քիչ խափանումներ արտադրության մեջ)
-
Ավելի հեշտացնել սպասարկումը (արտադրողականություն, խմբաքանակային բաշխում, կանխատեսելի կատարողականություն)
Ահա մի փոքր նյարդայնացնող ճշմարտություն. դուք չեք կարող միաժամանակ առավելագույնի հասցնել այս բոլորը: Օպտիմալացումը նման է փուչիկ սեղմելուն՝ մի կողմը ներս մղեք, և մյուս կողմը դուրս կպչի: Ոչ միշտ, բայց բավականաչափ հաճախ, որպեսզի դուք պետք է պլանավորեք փոխզիջումներ:.
Այսպիսով, նախքան որևէ բանի դիպչելը, ընտրեք ձեր հիմնական սահմանափակումը .
-
Եթե դուք օգտատերերին ուղիղ եթերում եք սպասարկում, ապա ձեզ հետաքրքրում են p95 լատենտությունը ( AWS CloudWatch տոկոսային ցուցանիշներ ) և պոչային արդյունավետությունը ( «պոչային լատենտություն» լավագույն փորձը ) 📉
-
Եթե մարզվում եք, ապա կարևորում եք որակի ապահովման ժամանակը և GPU-ի օգտագործումը 🔥
-
Եթե տեղակայում եք սարքերի վրա, ապա ձեզ հետաքրքրում է օպերատիվ հիշողությունը և հզորությունը 🔋
2) Ինչպիսի՞ն է արհեստական բանականության մոդելի օպտիմալացման լավ տարբերակը ✅
Օպտիմալացման լավ տարբերակը պարզապես «քվանտիզացիա կիրառելը և աղոթելը» չէ։ Այն համակարգ է։ Լավագույն կարգավորումները սովորաբար ունենում են
-
Վստահելի բազային գիծ։
Եթե չեք կարողանում վերարտադրել ձեր ներկայիս արդյունքները, ապա չեք կարող իմանալ, որ ինչ-որ բան բարելավել եք։ Պարզ է… բայց մարդիկ բաց են թողնում այն։ Ապա նրանք պարուրաձև են դառնում։ -
հստակ նպատակային չափանիշը
անորոշ է։ «Նույն որակի գնահատականով p95-ի լատենտությունը 900 մվ-ից կրճատել մինչև 300 մվ» իրական նպատակ է։ -
Որակի պաշտպանիչներ։
Յուրաքանչյուր հաջողություն որակի լուռ անկման վտանգ է պարունակում։ Ձեզ անհրաժեշտ են թեստեր, գնահատումներ կամ առնվազն առողջ դատողության համակարգ։ -
Սարքավորման իրազեկություն.
Մեկ գրաֆիկական պրոցեսորի վրա «արագ» մոդելը կարող է սողալ մեկ այլի վրա: Պրոցեսորները իրենց յուրահատուկ տեսակի քաոս են: -
Իտերատիվ փոփոխություններ, այլ ոչ թե մեծ պայթյունի վերաշարադրում։
Երբ դուք միանգամից փոխում եք հինգ բան, և արտադրողականությունը բարելավվում է, դուք չգիտեք, թե ինչու։ Ինչը… անհանգստացնող է։
Օպտիմալացումը պետք է զգացվի կիթառի լարման նման՝ փոքր ճշգրտումներ, ուշադիր լսեք, կրկնեք 🎸: Եթե զգացվում է դանակներով ժոնգլյորություն անել, ապա ինչ-որ բան այն չէ:.
3) Համեմատական աղյուսակ. Արհեստական բանականության մոդելների օպտիմալացման հանրաճանաչ տարբերակներ 📊
Ստորև բերված է օպտիմալացման տարածված գործիքների/մոտեցումների արագ և մի փոքր անփույթ համեմատական աղյուսակ։ Ոչ, այն լիովին «արդար» չէ. իրական կյանքը նույնպես արդար չէ։.
| Գործիք / Ընտրանք | Լսարան | Գինը | Ինչու է այն աշխատում |
|---|---|---|---|
PyTorch torch.compile ( PyTorch փաստաթղթեր ) |
PyTorch-ի մարդիկ | Անվճար | Գրաֆի ձայնագրումը + կոմպիլյատորի հնարքները կարող են կրճատել ծախսերը… երբեմն դա կախարդանք է ✨ |
| ONNX Runtime ( ONNX Runtime փաստաթղթեր ) | Տեղակայման թիմեր | Ազատի նման | Հզոր եզրակացությունների օպտիմալացում, լայն աջակցություն, լավ է ստանդարտացված մատուցման համար |
| TensorRT ( NVIDIA TensorRT փաստաթղթեր ) | NVIDIA տեղակայում | Վճարովի Vibe-ներ (հաճախ փաթեթավորված) | Ագրեսիվ միջուկի միաձուլում + ճշգրիտ կառավարում, շատ արագ, երբ այն սեղմվում է |
| DeepSpeed ( Zero փաստաթղթեր ) | Մարզչական թիմեր | Անվճար | Հիշողության + թողունակության օպտիմալացում (Zero և այլն): Կարող է զգացվել որպես ռեակտիվ շարժիչ: |
| FSDP (PyTorch) ( PyTorch FSDP փաստաթղթեր ) | Մարզչական թիմեր | Անվճար | Շարդերի պարամետրերը/գրադիենտները մեծ մոդելները դարձնում են պակաս վախեցնող |
| bitsandbytes քվանտացում ( bitsandbytes ) | Իրավագիտության բակալավրիատի մասնագետներ | Անվճար | Փոքր բիթային քաշ, հիշողության մեծ խնայողություն՝ որակը կախված է, բայց ուֆ 😬 |
| Թորում ( Հինտոն և այլք, 2015 ) | Արտադրանքի թիմեր | «Ժամանակի ծախս» | Փոքր ուսանողական մոդելը ժառանգում է վարքագիծը, սովորաբար լավագույն ROI-ն երկարաժամկետ հեռանկարում |
| Կտրում ( PyTorch կտրման ձեռնարկ ) | Հետազոտություն + արտադրություն | Անվճար | Հեռացնում է մեռած քաշը։ Ավելի լավ է աշխատում, երբ զուգակցվում է վերապատրաստման հետ։ |
| Flash Attention / միաձուլված միջուկներ ( FlashAttention թուղթ ) | Կատարողականության սիրահարներ | Անվճար | Ավելի արագ ուշադրություն, ավելի լավ հիշողության վարքագիծ։ Իրական հաղթանակ տրանսֆորմերների համար |
| Triton Inference Server ( դինամիկ խմբաքանակավորում ) | Գործողություններ/ենթակառուցվածքներ | Անվճար | Արտադրական սպասարկում, խմբաքանակավորում, բազմամոդելային խողովակաշարեր՝ ձեռնարկությունային տպավորություն է թողնում |
Ձևաչափման առանձնահատկության խոստովանություն. «Գինը» անկանոն է, քանի որ բաց կոդով տարբերակը դեռ կարող է ձեզ արժենալ մեկ շաբաթավերջի վրիպազերծում, ինչը… գին է։ 😵💫
4) Սկսեք չափումներից. Պրոֆիլը, ինչպես դուք նկատի ունեք 🔍
Եթե այս ամբողջ ուղեցույցից միայն մեկ բան եք անում, ապա արեք սա. ճիշտ չափեք։.
Իմ սեփական փորձարկման ժամանակ, ամենամեծ «օպտիմալացման առաջընթացը» տեղի ունեցավ ամոթալիորեն պարզ մի բան հայտնաբերելուց, ինչպիսին է
-
տվյալների բեռնիչը դանդաղեցնում է գրաֆիկական պրոցեսորը
-
CPU նախնական մշակման խցանում
-
փոքր խմբաքանակների չափերը հանգեցնում են միջուկի գործարկման ծանրաբեռնվածության
-
դանդաղ տոկենիզացիա (տոկենիզատորները կարող են լինել լուռ չարագործներ)
-
հիշողության մասնատում ( PyTorch CUDA հիշողության բաշխիչի նշումներ )
-
մեկ շերտ գերիշխող հաշվարկ
Ինչ չափել (նվազագույն սահմանված)
-
Լատենտություն (p50, p95, p99) ( SRE լատենտության պերցենտիլների վրա )
-
Արտադրողականություն (տոկեններ/վրկ, հարցումներ/վրկ)
-
GPU-ի օգտագործումը (հաշվարկային + հիշողություն)
-
VRAM / RAM գագաթնակետեր
-
Արժեքը 1 հազար տոկենի համար (կամ մեկ եզրակացության համար)
Գործնական պրոֆիլավորման մտածելակերպ
-
Նկարագրեք ձեզ հետաքրքրող մեկ սցենար (ոչ թե խաղալիք-հուշում):.
-
Ամեն ինչ գրի առեք փոքրիկ «կատարողականի օրագրում»։
Այո՛, դա ձանձրալի է… բայց դա ձեզ կփրկի հետագայում չափազանց շատ ջանքեր գործադրելուց։
(Եթե ուզում եք սկսելու համար կոնկրետ գործիք. PyTorch Profiler-ը ( torch.profiler docs ) և Nsight Systems-ը ( NVIDIA Nsight Systems ) սովորաբար լավագույն տարբերակներն են):
5) Տվյալներ + Ուսուցման Օպտիմալացում. Հանգիստ Գերուժը 📦🚀
Մարդիկ տարված են մոդելային ճարտարապետությամբ և մոռանում են խողովակաշարի մասին։ Մինչդեռ խողովակաշարը լուռ այրում է գրաֆիկական պրոցեսորի կեսը։.
Հեշտ հաղթանակներ, որոնք արագ են երևում
-
Օգտագործեք խառը ճշգրտություն (FP16/BF16, որտեղ կայուն է) ( PyTorch AMP / torch.amp ):
Սովորաբար ավելի արագ է, հաճախ՝ լավ, բայց ուշադրություն դարձրեք թվային առանձնահատկություններին: -
Գրադիենտի կուտակում , երբ խմբաքանակի չափը սահմանափակ է ( 🤗 Արագացման ուղեցույց ):
Պահպանում է օպտիմալացումը կայուն՝ առանց հիշողությունը պայթեցնելու: -
Գրադիենտային ստուգիչ կետ ( torch.utils.checkpoint )
Փոխանակում է հաշվարկները հիշողության համար՝ հնարավոր դարձնելով ավելի մեծ համատեքստերը։ -
Արդյունավետ տոկենիզացիա ( 🤗 Տոկենիզատորներ )
Տոկենիզացիան կարող է դառնալ խոչընդոտ մեծ մասշտաբով։ Դա հմայիչ չէ, այն կարևոր է։ -
Տվյալների բեռնիչի կարգավորում։
Ավելի շատ աշխատողներ, ամրացված հիշողություն, նախնական բեռնում. աննկատ, բայց արդյունավետ 😴➡️💪 ( PyTorch-ի կատարողականի կարգավորման ուղեցույց )
Պարամետրերով արդյունավետ նուրբ կարգավորում
Եթե դուք մանրակրկիտ կարգավորում եք մեծ մոդելները, PEFT մեթոդները (ինչպիսիք են LoRA ոճի ադապտերները) կարող են զգալիորեն կրճատել մարզման արժեքը՝ միաժամանակ զարմանալիորեն ուժեղ մնալով ( 🤗 Transformers PEFT ուղեցույց , LoRA թուղթ ): Սա այն «ինչո՞ւ մենք սա ավելի վաղ չարեցինք» պահերից մեկն է:
6) Ճարտարապետության մակարդակի օպտիմալացում. մոդելի ճիշտ չափսերի ընտրություն 🧩
Երբեմն օպտիմալացման լավագույն միջոցը… աշխատանքի համար չափազանց մեծ մոդել օգտագործելուց հրաժարվելն է։ Գիտեմ, սրբապղծություն է 😄։.
Զանգահարեք մի քանի հիմնական կետերի վերաբերյալ
-
Որոշեք՝ ձեզ անհրաժեշտ են լիարժեք ընդհանուր հետախուզական գիտելիքներ, թե՞ մասնագետ։.
-
Պահպանեք համատեքստային պատուհանը այնքան մեծ, որքան անհրաժեշտ է, ոչ թե ավելի մեծ։.
-
Օգտագործեք տվյալ աշխատանքի համար պատրաստված մոդել (դասակարգման մոդելներ դասակարգման աշխատանքի համար և այլն):.
Գործնական ճիշտ չափսերի ռազմավարություններ
-
Հարցումների մեծ մասի համար
անցեք ավելի փոքր մայրուղային համակարգի, այնուհետև «դժվար հարցումները» ուղղորդեք ավելի մեծ մոդելի։ -
Օգտագործեք երկփուլային կարգավորում։
Արագ մոդելի նախագծեր, ավելի ուժեղ մոդելի ստուգումներ կամ խմբագրումներ։
Դա նման է գրելուն ընտրող ընկերոջ հետ՝ նյարդայնացնող, բայց արդյունավետ։ -
Նվազեցրեք արդյունքի երկարությունը։
Արդյունքի տոկենները արժեն գումար և ժամանակ։ Եթե ձեր մոդելը անկանոն է, դուք վճարում եք անկանոնության համար։
Ես տեսել եմ, թե ինչպես են թիմերը զգալիորեն կրճատել ծախսերը՝ պարտադրելով ավելի կարճ արտադրանք։ Դա աննշան է թվում։ Այն աշխատում է։.
7) Կոմպիլյատոր + Գրաֆի օպտիմալացումներ. Որտեղի՞ց է գալիս արագությունը 🏎️
Սա «ստիպեք համակարգչին անել ավելի խելացի համակարգչային բաներ» շերտն է։.
Հաճախակի օգտագործվող տեխնիկաներ՝
-
Օպերատորի միաձուլում (միջուկների համադրություն) ( NVIDIA TensorRT «շերտերի միաձուլում» )
-
Հաստատուն ծալում (նախապես հաշվարկված ֆիքսված արժեքներ) ( ONNX Runtime գրաֆիկի օպտիմալացումներ )
-
Միջուկի ընտրությունը կարգավորված է սարքավորումներին համապատասխան
-
Գրաֆի ձայնագրում՝ Python-ի ծանրաբեռնվածությունը նվազեցնելու համար (
torch.compile-իակնարկ )
Պարզ ասած՝ ձեր մոդելը կարող է մաթեմատիկորեն արագ լինել, բայց գործառնականորեն դանդաղ։ Կոմպիլյատորները որոշ չափով շտկում են դա։.
Գործնական նշումներ (այսինքն՝ սպիներ)
-
Այս օպտիմալացումները կարող են զգայուն լինել մոդելի ձևի փոփոխությունների նկատմամբ։.
-
Որոշ մոդելներ շատ արագանում են, որոշները՝ հազիվ թե շարժվեն։.
-
Երբեմն արագացում ես ունենում և հանելուկային սխալ, օրինակ՝ գրեմլին է տեղափոխվել 🧌
Այնուամենայնիվ, երբ այն աշխատում է, դա ամենամաքուր հաղթանակներից մեկն է։.
8) Քվանտացում, կտրում, թորում. Փոքր՝ առանց լաց լինելու (չափազանց շատ) 🪓📉
Սա այն բաժինն է, որը մարդիկ ուզում են… որովհետև այն հնչում է որպես անվճար ներկայացում։ Կարող է լինել, բայց դրան պետք է վերաբերվել որպես վիրահատության։.
Քվանտացում (ցածր ճշգրտության կշիռներ/ակտիվացումներ)
-
Հիանալի է եզրակացության արագության և հիշողության համար
-
Ռիսկ՝ որակի անկում, հատկապես եզրային պատյանների դեպքում
-
Լավագույն փորձը՝ գնահատել իրական թեստային հավաքածուի վրա, այլ ոչ թե թրթռումների վրա
Տարածված համեր, որոնց մասին կլսեք
-
INT8 (հաճախ պինդ) ( TensorRT քվանտացված տեսակներ )
-
INT4 / ցածր բիթ (մեծ խնայողություններ, որակի ռիսկը մեծանում է) ( բիթեր և բայթեր կբիթ քվանտացում )
-
Խառը քանակություն (ոչ բոլորին է պետք նույն ճշգրտությունը)
Կտրում (պարամետրերի հեռացում)
-
Հեռացնում է «անկարևոր» կշիռները կամ կառուցվածքները ( PyTorch կտրման ձեռնարկ )
-
Սովորաբար անհրաժեշտ է վերապատրաստում՝ որակը վերականգնելու համար
-
Ավելի լավ է աշխատում, քան մարդիկ կարծում են… երբ արվում է ուշադիր
Թորում (ուսանողը սովորում է ուսուցչից)
Սա իմ անձնական սիրելի երկարաժամկետ լծակն է։ Թորումը կարող է ստեղծել ավելի փոքր մոդել, որը նման կերպ է վարվում, և այն հաճախ ավելի կայուն է, քան ծայրահեղ քվանտացումը ( Գիտելիքի թորումը նեյրոնային ցանցում ):
Անկատար փոխաբերություն. թորումը նման է բարդ ապուրը ֆիլտրի միջով լցնելուն և… ավելի փոքր ապուր ստանալուն։ Ապուրն այդպես չի աշխատում, բայց դուք հասկացաք գաղափարը 🍲։.
9) Մատուցում և եզրակացություն. իրական մարտական գոտի 🧯
Դուք կարող եք «օպտիմալացնել» մոդելը և միևնույն է վատ մատուցել այն։ Սպասարկումն այն է, երբ լատենտությունն ու արժեքը իրական են դառնում։.
Հաղթանակների մատուցումը կարևոր է
-
Փաթեթավորումը
բարելավում է թողունակությունը։ Սակայն չափից շատ օգտագործելու դեպքում մեծացնում է լատենտությունը։ Հավասարակշռեք այն։ ( Տրիտոնի դինամիկ փաթեթավորում ) -
Քեշավորում։
Քեշավորման արագացումը և KV-քեշի վերօգտագործումը կարող են հսկայական լինել կրկնվող համատեքստերի համար։ ( KV քեշի բացատրություն ) -
Հոսքային հեռարձակում։
Օգտատերերը կարծում են, որ այն ավելի արագ է, նույնիսկ եթե ընդհանուր ժամանակը նման է։ Ընկալումը կարևոր է 🙂։ -
Ժետոնների առ ժետոնների վերադիր ծախսերի կրճատում։
Որոշ կուտակումներ լրացուցիչ աշխատանք են կատարում յուրաքանչյուր ժետոնի համար։ Կրճատեք այդ վերադիր ծախսերը և դուք մեծ շահում եք։
Ուշադրություն դարձրեք պոչի լատենտությանը
Ձեր միջին ցուցանիշը կարող է հիանալի տեսք ունենալ, մինչդեռ ձեր p99-ը աղետալի է։ Օգտատերերը, ցավոք, ապրում են «պոչի» մեջ։ ( «Պոչի լատենտություն» և ինչու են միջին ցուցանիշները ստում )
10) Սարքավորումների վրա հիմնված օպտիմալացում. համապատասխանեցրեք մոդելը մեքենային 🧰🖥️
Առանց սարքավորումների մասին իրազեկվածության օպտիմալացումը նման է մրցարշավային մեքենայի կարգաբերմանը՝ առանց անվադողերը ստուգելու։ Անշուշտ, դուք կարող եք դա անել, բայց դա մի փոքր հիմարություն է։.
Գրաֆիկական պրոցեսորի (GPU) նկատառումներ
-
Հիշողության թողունակությունը հաճախ սահմանափակող գործոն է, այլ ոչ թե հում հաշվարկը
-
Ավելի մեծ խմբաքանակները կարող են օգնել, մինչև որ դրանք չօգնեն
-
Միջուկի միաձուլումը և ուշադրության օպտիմալացումը հսկայական նշանակություն ունեն տրանսֆորմերների համար ( FlashAttention: IO-aware exact attention ):
CPU-ի նկատառումները
-
Թրեդինգը, վեկտորացումը և հիշողության տեղայնացումը մեծ նշանակություն ունեն
-
Տոկենիզացիայի ծախսերը կարող են գերակշռել ( 🤗 «Արագ» տոկենիզատորներ )
-
Ձեզ կարող են անհրաժեշտ լինել տարբեր քվանտացման ռազմավարություններ, քան GPU-ի դեպքում։
Edge / Mobile-ի հետ կապված նկատառումներ
-
Հիշողության հետքը դառնում է առաջնահերթություն
-
Լատենտության տատանումը կարևոր է, քանի որ սարքերը… տրամադրության տատանումներ են ունենում
-
Փոքր, մասնագիտացված մոդելները հաճախ գերազանցում են խոշոր ընդհանուր մոդելներին
11) Որակյալ պաշտպանիչ ցանկապատեր. մի՛ «օպտիմալացրեք» ձեզ սխալի մեջ 🧪
Յուրաքանչյուր արագության հաղթանակ պետք է ուղեկցվի որակի ստուգմամբ։ Հակառակ դեպքում դուք կտոնեք, կուղարկեք, ապա կստանաք հաղորդագրություն, օրինակ՝ «ինչո՞ւ է օգնականը հանկարծ խոսում ծովահենի պես» 🏴☠️
Պրագմատիկ պաշտպանիչ ցանկապատեր
-
Ոսկե հուշումներ (հուշումների ֆիքսված հավաքածու, որը դուք միշտ ստուգում եք)
-
Առաջադրանքի չափանիշներ (ճշգրտություն, F1, BLEU, ինչ որ համապատասխանում է)
-
Մարդկային ստուգումներ (այո, լուրջ եմ ասում)
-
Ռեգրեսիայի շեմեր («թույլատրվում է ոչ ավելի, քան X% անկում»)
Նաև հետևեք ձախողման ռեժիմներին
-
ձևաչափման շեղում
-
մերժման վարքագծի փոփոխություններ
-
հալյուցինացիաների հաճախականությունը
-
արձագանքի երկարության ինֆլյացիա
Օպտիմալացումը կարող է փոխել վարքագիծը զարմանալի ձևերով։ Հատկապես։ Գրգռող կերպով։ Հետադարձ հայացքով կանխատեսելիորեն։.
12) Ստուգաթերթիկ. Ինչպես քայլ առ քայլ օպտիմալացնել արհեստական բանականության մոդելները ✅🤖
«Ինչպես օպտիմալացնել արհեստական ինտելեկտի մոդելները» գրքի գործողությունների հստակ հերթականությունը , ահա աշխատանքային հոսքը, որը մարդկանց խելամիտ է պահում.
-
Հաջողության սահմանում՝
ընտրեք 1-2 հիմնական չափանիշ (լատենտություն, արժեք, թողունակություն, որակ): -
Չափել բազային
պրոֆիլի իրական աշխատանքային բեռները, գրանցել p50/p95-ը, հիշողությունը, արժեքը: ( PyTorch Profiler ) -
Խողովակաշարերի խցանումների շտկում՝
տվյալների բեռնում, տոկենիզացիա, նախնական մշակում, խմբաքանակավորում։ -
Կիրառել ցածր ռիսկային հաշվողական հաղթանակներ։
Խառը ճշգրտություն, միջուկի օպտիմալացում, ավելի լավ խմբաքանակավորում։ -
Փորձեք կոմպիլյատորի/գործարկման ժամանակի օպտիմալացումները՝
գրաֆիկի գրանցում, եզրակացության կատարման ժամանակներ, օպերատորների միաձուլում: (torch.compileձեռնարկ , ONNX Runtime փաստաթղթեր ) -
Նվազեցրեք մոդելի արժեքը։
Զգուշորեն քվանտացրեք, հնարավորության դեպքում թորեք, անհրաժեշտության դեպքում կտրատեք։ -
Կարգավորել մատուցումները
՝ քեշավորում, զուգահեռություն, բեռի թեստավորում, պոչային լատենտության ուղղումներ։ -
Հաստատեք որակը։
Կատարեք ռեգրեսիոն թեստեր և համեմատեք արդյունքները կողք կողքի։ -
Կրկնել՝
փոքր փոփոխություններ, հստակ նշումներ, կրկնել։ Անցուցադրական՝ արդյունավետ։
Եվ այո, սա դեռ « Ինչպես օպտիմալացնել արհեստական ինտելեկտի մոդելները , նույնիսկ եթե այն ավելի շատ նման է «Ինչպես դադարեցնել ոտնակոխ անելը»։ Նույն բանն է։
13) Հաճախակի սխալներ (որպեսզի չկրկնեք դրանք մեզ պես) 🙃
-
Չափելուց առաջ օպտիմալացում
։ Դուք ժամանակ կվատնեք։ Եվ այդ դեպքում վստահորեն կօպտիմալացնեք սխալ բանը… -
Մեկ չափանիշի հետևից ընկնելը։
Չափանիշները ստում են բացթողման միջոցով։ Ձեր աշխատանքային ծանրաբեռնվածությունն է ճշմարտությունը։ -
Հիշողության անտեսումը։
Հիշողության խնդիրները առաջացնում են դանդաղումներ, խափանումներ և թրթռում։ ( CUDA հիշողության օգտագործման ըմբռնումը PyTorch-ում ) -
Շատ վաղ չափից շատ քվանտացումը։ Ցածր
բիթային քվանտավորումը կարող է զարմանալի լինել, բայց նախ սկսեք ավելի անվտանգ քայլերից։ -
Հետադարձման պլան չկա։
Եթե չեք կարողանում արագ վերադառնալ նախկին վիճակին, յուրաքանչյուր տեղակայում սթրեսային է դառնում։ Սթրեսը սխալներ է առաջացնում։
Եզրափակիչ նշումներ. Մարդկային եղանակը օպտիմալացնելու համար 😌⚡
«Ինչպես օպտիմալացնել արհեստական ինտելեկտի մոդելները» մեկ հնարք չէ։ Այն շերտավոր գործընթաց է. չափել, շտկել խողովակաշարը, օգտագործել կոմպիլյատորներ և կատարման ժամանակներ, կարգավորել մատուցումը, ապա անհրաժեշտության դեպքում փոքրացնել մոդելը քվանտացման կամ թորման միջոցով։ Կատարեք դա քայլ առ քայլ, պահպանեք որակի պաշտպանիչ ցանկապատերը և մի վստահեք «ավելի արագ է զգացվում» սկզբունքին որպես չափանիշ (ձեր զգացմունքները հաճելի են, ձեր զգացմունքները պրոֆիլավորող չեն)։
Եթե ցանկանում եք ամենակարճ առաքումը
-
Նախ չափեք 🔍
-
Հաջորդը օպտիմալացրեք խողովակաշարը 🧵
-
Այնուհետև օպտիմալացրեք մոդելը 🧠
-
Ապա օպտիմալացրեք մատուցումը 🏗️
-
Մշտապես կատարեք որակի ստուգումներ ✅
Եվ եթե դա օգնում է, հիշեցրեք ինքներդ ձեզ. նպատակը «կատարյալ մոդել» չէ: Նպատակը այնպիսի մոդել է, որը կլինի արագ, մատչելի և բավականաչափ հուսալի, որպեսզի կարողանաք քնել գիշերները… գրեթե բոլոր գիշերները 😴:.
Հաճախակի տրվող հարցեր
Ի՞նչ է նշանակում արհեստական բանականության մոդելի օպտիմալացումը գործնականում
«Օպտիմալացնել» սովորաբար նշանակում է մեկ հիմնական սահմանափակման բարելավում՝ լատենտություն, արժեք, հիշողության ծավալ, ճշգրտություն, կայունություն կամ մատուցման թողունակություն: Դժվար մասը փոխզիջումներն են. մեկ ոլորտի առաջխաղացումը կարող է վնասել մյուսին: Գործնական մոտեցումը հստակ թիրախ ընտրելն է (օրինակ՝ p95 լատենտություն կամ որակի հասնելու ժամանակ) և դրա ուղղությամբ օպտիմալացնելը: Առանց նպատակի հեշտ է «բարելավել» և միևնույն է պարտվել:.
Ինչպես օպտիմալացնել արհեստական բանականության մոդելները՝ առանց որակին աննկատ վնաս հասցնելու
Յուրաքանչյուր արագության կամ արժեքի փոփոխությունը դիտարկեք որպես հնարավոր լուռ ռեգրեսիա: Օգտագործեք պաշտպանիչ ցանկապատեր, ինչպիսիք են ոսկե հուշումները, առաջադրանքների չափանիշները և արագ մարդկային ստուգումները: Սահմանեք ընդունելի որակի շեղման հստակ շեմ և համեմատեք արդյունքները կողք կողքի: Սա թույլ չի տա, որ «ավելի արագ է» հարցը վերածվի «ինչո՞ւ հանկարծ տարօրինակ դարձավ արտադրության մեջ» հարցի՝ առաքումից հետո:.
Ինչ չափել օպտիմալացումը սկսելուց առաջ
Սկսեք լատենտության տոկոսային ցուցանիշներից (p50, p95, p99), թողունակությունից (տոկեններ/վայրկյան կամ հարցումներ/վայրկյան), GPU-ի օգտագործումից և VRAM/RAM-ի գագաթնակետային օգտագործումից: Հետևեք յուրաքանչյուր եզրակացության կամ յուրաքանչյուր 1000 տոկենի արժեքին, եթե արժեքը սահմանափակում է: Պրոֆիլավորեք ձեր մատուցած իրական սցենարը, այլ ոչ թե խաղալիք հուշում: Փոքրիկ «կատարողականի օրագիր» պահելը կօգնի ձեզ խուսափել կռահումներից և սխալների կրկնությունից:.
Արագ, ցածր ռիսկի հաղթանակներ մարզումների արդյունավետության համար
Խառը ճշգրտությունը (FP16/BF16) հաճախ ամենաարագ առաջին լծակն է, բայց ուշադրություն դարձրեք թվային առանձնահատկություններին: Եթե խմբաքանակի չափը սահմանափակ է, գրադիենտային կուտակումը կարող է կայունացնել օպտիմալացումը՝ առանց հիշողության սպառման: Գրադիենտային ստուգիչային կետը փոխարինում է լրացուցիչ հաշվարկային հզորությունը ավելի քիչ հիշողության հետ՝ հնարավորություն տալով ավելի մեծ համատեքստեր: Մի անտեսեք տոկենիզացիան և տվյալների բեռնիչի կարգավորումը. դրանք կարող են աննկատորեն սպառել GPU-ն:.
Ե՞րբ օգտագործել torch.compile, ONNX Runtime կամ TensorRT
Այս գործիքները ուղղված են գործառնական ծախսերին՝ գրաֆների գրանցում, միջուկի միաձուլում և կատարման ժամանակի գրաֆների օպտիմալացում: Դրանք կարող են ապահովել մաքուր եզրակացությունների արագացում, սակայն արդյունքները տարբերվում են մոդելի ձևից և սարքավորումներից կախված: Որոշ կարգավորումներ կախարդանքի պես են թվում, մյուսները՝ գրեթե չեն շարժվում: Ակնկալեք զգայունություն ձևի փոփոխությունների և երբեմն-երբեմն «գրեմլին» սխալների նկատմամբ. չափեք նախքան և հետո ձեր իրական աշխատանքային բեռնվածության վրա:.
Արդյո՞ք քվանտացումը արժե դրան, և ինչպես խուսափել չափազանց հեռու գնալուց
Քվանտացումը կարող է կրճատել հիշողությունը և արագացնել եզրակացությունը, հատկապես INT8-ի դեպքում, բայց որակը կարող է անկում ապրել ծայրահեղ դեպքերում: Ավելի ցածր բիթային տարբերակները (ինչպիսին է INT4/k-բիթը) ապահովում են ավելի մեծ խնայողություններ՝ ավելի բարձր ռիսկով: Ամենաապահով սովորությունը իրական թեստային հավաքածուի վրա գնահատելն ու արդյունքները համեմատելն է, այլ ոչ թե ներքին զգացողությունը: Սկսեք նախ ավելի անվտանգ քայլերից, ապա անցեք ավելի ցածր ճշգրտության միայն անհրաժեշտության դեպքում:.
Մոդելի չափի փոքրացման համար կտրման և թորման միջև տարբերությունը
Կտրումը վերացնում է «մեռած քաշի» պարամետրերը և հաճախ անհրաժեշտ է վերապատրաստում՝ որակը վերականգնելու համար, հատկապես, երբ դա արվում է ագրեսիվ կերպով: Թորումը մարզում է ավելի փոքր ուսանողական մոդելին՝ ընդօրինակելու ավելի մեծ ուսուցչի վարքագիծը, և դա կարող է լինել ավելի ուժեղ երկարաժամկետ ROI, քան ծայրահեղ քվանտացումը: Եթե ցանկանում եք ավելի փոքր մոդել, որը նման կերպ է վարվում և մնում է կայուն, թորումը հաճախ ավելի մաքուր ուղի է:.
Ինչպես կրճատել եզրակացության արժեքը և լատենտությունը՝ մատուցման բարելավումների միջոցով
Սպասարկման ժամանակ է, որ օպտիմալացումը դառնում է շոշափելի. փաթեթավորումը մեծացնում է թողունակությունը, բայց կարող է վնասել լատենտությանը, եթե չափազանցված է, ուստի այն զգուշորեն կարգավորեք: Քեշավորումը (արագ քեշավորում և KV-քեշի վերօգտագործում) կարող է հսկայական լինել, երբ համատեքստերը կրկնվում են: Հոսքային ելքը բարելավում է ընկալվող արագությունը, նույնիսկ եթե ընդհանուր ժամանակը նման է: Նաև ուշադրություն դարձրեք ձեր ստեքում տոկեն առ տոկեն ծանրաբեռնվածությանը. յուրաքանչյուր տոկենի փոքր աշխատանքը արագ կուտակվում է:.
Ինչու է պոչային լատենտությունը այդքան կարևոր արհեստական բանականության մոդելների օպտիմալացման ժամանակ
Միջին ցուցանիշները կարող են հիանալի տեսք ունենալ, մինչդեռ p99-ը աղետալի է, և օգտատերերը հակված են մնալ «պոչային» ռեժիմում։ Պոչային լատենտությունը հաճախ առաջանում է թրթռումից՝ հիշողության մասնատումից, պրոցեսորի նախնական մշակման կտրուկ աճից, տոկենիզացիայի դանդաղեցումից կամ խմբաքանակի վատ աշխատանքի վարքագծից։ Ահա թե ինչու է ուղեցույցը շեշտը դնում տոկոսային ցուցանիշների և իրական աշխատանքային բեռների վրա։ Եթե օպտիմալացնեք միայն p50-ը, դեռ կարող եք ապահովել «պատահականորեն դանդաղ» զգացողություն ունեցող փորձ։
Հղումներ
-
Amazon Web Services (AWS) - AWS CloudWatch տոկոսային ցուցանիշներ (վիճակագրության սահմանումներ) - docs.aws.amazon.com
-
Google - The Tail at Scale (պոչի լատենտության լավագույն փորձը) - sre.google
-
Google - Ծառայության մակարդակի նպատակներ (SRE գիրք) - լատենտության տոկոսային ցուցանիշներ - sre.google
-
PyTorch - torch.compile - docs.pytorch.org
-
PyTorch - FullyShardedDataParallel (FSDP) - docs.pytorch.org
-
PyTorch - PyTorch Profiler - docs.pytorch.org
-
PyTorch - CUDA սեմանտիկա. հիշողության կառավարում (CUDA հիշողության բաշխիչի նշումներ) - docs.pytorch.org
-
PyTorch - Ավտոմատ խառը ճշգրտություն (torch.amp / AMP) - docs.pytorch.org
-
PyTorch - torch.utils.checkpoint - docs.pytorch.org
-
PyTorch - Արդյունավետության կարգավորման ուղեցույց - docs.pytorch.org
-
PyTorch - Կտրման ձեռնարկ - docs.pytorch.org
-
PyTorch - CUDA հիշողության օգտագործման հասկացումը PyTorch-ում - docs.pytorch.org
-
PyTorch - torch.compile ձեռնարկ / ակնարկ - docs.pytorch.org
-
ONNX Runtime - ONNX Runtime փաստաթղթեր - onnxruntime.ai
-
NVIDIA - TensorRT փաստաթղթեր - docs.nvidia.com
-
NVIDIA - TensorRT քվանտացված տիպեր - docs.nvidia.com
-
NVIDIA - Nsight Systems - developer.nvidia.com
-
NVIDIA - Triton Inference Server - դինամիկ խմբաքանակավորում - docs.nvidia.com
-
DeepSpeed - ZeRO Stage 3 փաստաթղթեր - deepspeed.readthedocs.io
-
bitsandbytes (bitsandbytes-հիմնադրամ) - bitsandbytes - github.com
-
Գրգռող դեմք - Արագացում. Գրադիենտային կուտակման ուղեցույց - huggingface.co
-
Գրկախառնվող դեմք - Տոկենիզատորների փաստաթղթեր - huggingface.co
-
Գրկախառնվող դեմք - Տրանսֆորմերներ։ PEFT ուղեցույց - huggingface.co
-
Գրկախառնված դեմք - Transformers: KV cache-ի բացատրությունը - huggingface.co
-
Գրկախառնվող դեմք - Տրանսֆորմերներ. «Արագ» տոկենիզատորներ (տոկենիզատորների դասեր) - huggingface.co
-
arXiv - Գիտելիքների խտացում նեյրոնային ցանցում (Հինտոն և այլք, 2015) - arxiv.org
-
arXiv - LoRA: Մեծ լեզվական մոդելների ցածրակարգ ադապտացիա - arxiv.org
-
arXiv - FlashAttention. Արագ և հիշողության արդյունավետություն, ճշգրիտ ուշադրություն IO-Awareness-ի միջոցով - arxiv.org