Ինչպես օպտիմալացնել արհեստական ​​բանականության մոդելները

Ինչպես օպտիմալացնել արհեստական ​​բանականության մոդելները

Կարճ պատասխան. Արհեստական ​​բանականության մոդելները օպտիմալացնելու համար ընտրեք մեկ հիմնական սահմանափակում (լատենտություն, արժեք, հիշողություն, որակ, կայունություն կամ թողունակություն), այնուհետև որևէ բան փոխելուց առաջ գրանցեք վստահելի բազային գիծ: Սկզբում հեռացրեք խողովակաշարի խոչընդոտները, այնուհետև կիրառեք ցածր ռիսկի ձեռքբերումներ, ինչպիսիք են խառը ճշգրտությունը և խմբաքանակավորումը. եթե որակը պահպանվում է, անցեք կոմպիլյատորի/գործարկման ժամանակի գործիքավորմանը և միայն դրանից հետո կրճատեք մոդելի չափը՝ անհրաժեշտության դեպքում քվանտացման կամ թորման միջոցով:

Հիմնական եզրակացություններ՝

Սահմանափակում . ընտրեք մեկ կամ երկու նպատակային չափանիշ. օպտիմալացումը փոխզիջումների, այլ ոչ թե անվճար հաղթանակների աշխարհ է։

Չափում . 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) Կոմպիլյատոր + Գրաֆի օպտիմալացումներ. Որտեղի՞ց է գալիս արագությունը 🏎️

Սա «ստիպեք համակարգչին անել ավելի խելացի համակարգչային բաներ» շերտն է։.

Հաճախակի օգտագործվող տեխնիկաներ՝

Պարզ ասած՝ ձեր մոդելը կարող է մաթեմատիկորեն արագ լինել, բայց գործառնականորեն դանդաղ։ Կոմպիլյատորները որոշ չափով շտկում են դա։.

Գործնական նշումներ (այսինքն՝ սպիներ)

  • Այս օպտիմալացումները կարող են զգայուն լինել մոդելի ձևի փոփոխությունների նկատմամբ։.

  • Որոշ մոդելներ շատ արագանում են, որոշները՝ հազիվ թե շարժվեն։.

  • Երբեմն արագացում ես ունենում և հանելուկային սխալ, օրինակ՝ գրեմլին է տեղափոխվել 🧌

Այնուամենայնիվ, երբ այն աշխատում է, դա ամենամաքուր հաղթանակներից մեկն է։.


8) Քվանտացում, կտրում, թորում. Փոքր՝ առանց լաց լինելու (չափազանց շատ) 🪓📉

Սա այն բաժինն է, որը մարդիկ ուզում են… որովհետև այն հնչում է որպես անվճար ներկայացում։ Կարող է լինել, բայց դրան պետք է վերաբերվել որպես վիրահատության։.

Քվանտացում (ցածր ճշգրտության կշիռներ/ակտիվացումներ)

  • Հիանալի է եզրակացության արագության և հիշողության համար

  • Ռիսկ՝ որակի անկում, հատկապես եզրային պատյանների դեպքում

  • Լավագույն փորձը՝ գնահատել իրական թեստային հավաքածուի վրա, այլ ոչ թե թրթռումների վրա

Տարածված համեր, որոնց մասին կլսեք

Կտրում (պարամետրերի հեռացում)

  • Հեռացնում է «անկարևոր» կշիռները կամ կառուցվածքները ( PyTorch կտրման ձեռնարկ )

  • Սովորաբար անհրաժեշտ է վերապատրաստում՝ որակը վերականգնելու համար

  • Ավելի լավ է աշխատում, քան մարդիկ կարծում են… երբ արվում է ուշադիր

Թորում (ուսանողը սովորում է ուսուցչից)

Սա իմ անձնական սիրելի երկարաժամկետ լծակն է։ Թորումը կարող է ստեղծել ավելի փոքր մոդել, որը նման կերպ է վարվում, և այն հաճախ ավելի կայուն է, քան ծայրահեղ քվանտացումը ( Գիտելիքի թորումը նեյրոնային ցանցում ):

Անկատար փոխաբերություն. թորումը նման է բարդ ապուրը ֆիլտրի միջով լցնելուն և… ավելի փոքր ապուր ստանալուն։ Ապուրն այդպես չի աշխատում, բայց դուք հասկացաք գաղափարը 🍲։.


9) Մատուցում և եզրակացություն. իրական մարտական ​​գոտի 🧯

Դուք կարող եք «օպտիմալացնել» մոդելը և միևնույն է վատ մատուցել այն։ Սպասարկումն այն է, երբ լատենտությունն ու արժեքը իրական են դառնում։.

Հաղթանակների մատուցումը կարևոր է

  • Փաթեթավորումը
    բարելավում է թողունակությունը։ Սակայն չափից շատ օգտագործելու դեպքում մեծացնում է լատենտությունը։ Հավասարակշռեք այն։ ( Տրիտոնի դինամիկ փաթեթավորում )

  • Քեշավորում։
    Քեշավորման արագացումը և KV-քեշի վերօգտագործումը կարող են հսկայական լինել կրկնվող համատեքստերի համար։ ( KV քեշի բացատրություն )

  • Հոսքային հեռարձակում։
    Օգտատերերը կարծում են, որ այն ավելի արագ է, նույնիսկ եթե ընդհանուր ժամանակը նման է։ Ընկալումը կարևոր է 🙂։

  • Ժետոնների առ ժետոնների վերադիր ծախսերի կրճատում։
    Որոշ կուտակումներ լրացուցիչ աշխատանք են կատարում յուրաքանչյուր ժետոնի համար։ Կրճատեք այդ վերադիր ծախսերը և դուք մեծ շահում եք։

Ուշադրություն դարձրեք պոչի լատենտությանը

Ձեր միջին ցուցանիշը կարող է հիանալի տեսք ունենալ, մինչդեռ ձեր p99-ը աղետալի է։ Օգտատերերը, ցավոք, ապրում են «պոչի» մեջ։ ( «Պոչի լատենտություն» և ինչու են միջին ցուցանիշները ստում )


10) Սարքավորումների վրա հիմնված օպտիմալացում. համապատասխանեցրեք մոդելը մեքենային 🧰🖥️

Առանց սարքավորումների մասին իրազեկվածության օպտիմալացումը նման է մրցարշավային մեքենայի կարգաբերմանը՝ առանց անվադողերը ստուգելու։ Անշուշտ, դուք կարող եք դա անել, բայց դա մի փոքր հիմարություն է։.

Գրաֆիկական պրոցեսորի (GPU) նկատառումներ

  • Հիշողության թողունակությունը հաճախ սահմանափակող գործոն է, այլ ոչ թե հում հաշվարկը

  • Ավելի մեծ խմբաքանակները կարող են օգնել, մինչև որ դրանք չօգնեն

  • Միջուկի միաձուլումը և ուշադրության օպտիմալացումը հսկայական նշանակություն ունեն տրանսֆորմերների համար ( FlashAttention: IO-aware exact attention ):

CPU-ի նկատառումները

  • Թրեդինգը, վեկտորացումը և հիշողության տեղայնացումը մեծ նշանակություն ունեն

  • Տոկենիզացիայի ծախսերը կարող են գերակշռել ( 🤗 «Արագ» տոկենիզատորներ )

  • Ձեզ կարող են անհրաժեշտ լինել տարբեր քվանտացման ռազմավարություններ, քան GPU-ի դեպքում։

Edge / Mobile-ի հետ կապված նկատառումներ

  • Հիշողության հետքը դառնում է առաջնահերթություն

  • Լատենտության տատանումը կարևոր է, քանի որ սարքերը… տրամադրության տատանումներ են ունենում

  • Փոքր, մասնագիտացված մոդելները հաճախ գերազանցում են խոշոր ընդհանուր մոդելներին


11) Որակյալ պաշտպանիչ ցանկապատեր. մի՛ «օպտիմալացրեք» ձեզ սխալի մեջ 🧪

Յուրաքանչյուր արագության հաղթանակ պետք է ուղեկցվի որակի ստուգմամբ։ Հակառակ դեպքում դուք կտոնեք, կուղարկեք, ապա կստանաք հաղորդագրություն, օրինակ՝ «ինչո՞ւ է օգնականը հանկարծ խոսում ծովահենի պես» 🏴☠️

Պրագմատիկ պաշտպանիչ ցանկապատեր

  • Ոսկե հուշումներ (հուշումների ֆիքսված հավաքածու, որը դուք միշտ ստուգում եք)

  • Առաջադրանքի չափանիշներ (ճշգրտություն, F1, BLEU, ինչ որ համապատասխանում է)

  • Մարդկային ստուգումներ (այո, լուրջ եմ ասում)

  • Ռեգրեսիայի շեմեր («թույլատրվում է ոչ ավելի, քան X% անկում»)

Նաև հետևեք ձախողման ռեժիմներին

  • ձևաչափման շեղում

  • մերժման վարքագծի փոփոխություններ

  • հալյուցինացիաների հաճախականությունը

  • արձագանքի երկարության ինֆլյացիա

Օպտիմալացումը կարող է փոխել վարքագիծը զարմանալի ձևերով։ Հատկապես։ Գրգռող կերպով։ Հետադարձ հայացքով կանխատեսելիորեն։.


12) Ստուգաթերթիկ. Ինչպես քայլ առ քայլ օպտիմալացնել արհեստական ​​բանականության մոդելները ✅🤖

«Ինչպես օպտիմալացնել արհեստական ​​ինտելեկտի մոդելները» գրքի գործողությունների հստակ հերթականությունը , ահա աշխատանքային հոսքը, որը մարդկանց խելամիտ է պահում.

  1. Հաջողության սահմանում՝
    ընտրեք 1-2 հիմնական չափանիշ (լատենտություն, արժեք, թողունակություն, որակ):

  2. Չափել բազային
    պրոֆիլի իրական աշխատանքային բեռները, գրանցել p50/p95-ը, հիշողությունը, արժեքը: ( PyTorch Profiler )

  3. Խողովակաշարերի խցանումների շտկում՝
    տվյալների բեռնում, տոկենիզացիա, նախնական մշակում, խմբաքանակավորում։

  4. Կիրառել ցածր ռիսկային հաշվողական հաղթանակներ։
    Խառը ճշգրտություն, միջուկի օպտիմալացում, ավելի լավ խմբաքանակավորում։

  5. Փորձեք կոմպիլյատորի/գործարկման ժամանակի օպտիմալացումները՝
    գրաֆիկի գրանցում, եզրակացության կատարման ժամանակներ, օպերատորների միաձուլում: ( torch.compile ձեռնարկ , ONNX Runtime փաստաթղթեր )

  6. Նվազեցրեք մոդելի արժեքը։
    Զգուշորեն քվանտացրեք, հնարավորության դեպքում թորեք, անհրաժեշտության դեպքում կտրատեք։

  7. Կարգավորել մատուցումները
    ՝ քեշավորում, զուգահեռություն, բեռի թեստավորում, պոչային լատենտության ուղղումներ։

  8. Հաստատեք որակը։
    Կատարեք ռեգրեսիոն թեստեր և համեմատեք արդյունքները կողք կողքի։

  9. Կրկնել՝
    փոքր փոփոխություններ, հստակ նշումներ, կրկնել։ Անցուցադրական՝ արդյունավետ։

Եվ այո, սա դեռ « Ինչպես օպտիմալացնել արհեստական ​​ինտելեկտի մոդելները , նույնիսկ եթե այն ավելի շատ նման է «Ինչպես դադարեցնել ոտնակոխ անելը»։ Նույն բանն է։


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-ը, դեռ կարող եք ապահովել «պատահականորեն դանդաղ» զգացողություն ունեցող փորձ։

Հղումներ

  1. Amazon Web Services (AWS) - AWS CloudWatch տոկոսային ցուցանիշներ (վիճակագրության սահմանումներ) - docs.aws.amazon.com

  2. Google - The Tail at Scale (պոչի լատենտության լավագույն փորձը) - sre.google

  3. Google - Ծառայության մակարդակի նպատակներ (SRE գիրք) - լատենտության տոկոսային ցուցանիշներ - sre.google

  4. PyTorch - torch.compile - docs.pytorch.org

  5. PyTorch - FullyShardedDataParallel (FSDP) - docs.pytorch.org

  6. PyTorch - PyTorch Profiler - docs.pytorch.org

  7. PyTorch - CUDA սեմանտիկա. հիշողության կառավարում (CUDA հիշողության բաշխիչի նշումներ) - docs.pytorch.org

  8. PyTorch - Ավտոմատ խառը ճշգրտություն (torch.amp / AMP) - docs.pytorch.org

  9. PyTorch - torch.utils.checkpoint - docs.pytorch.org

  10. PyTorch - Արդյունավետության կարգավորման ուղեցույց - docs.pytorch.org

  11. PyTorch - Կտրման ձեռնարկ - docs.pytorch.org

  12. PyTorch - CUDA հիշողության օգտագործման հասկացումը PyTorch-ում - docs.pytorch.org

  13. PyTorch - torch.compile ձեռնարկ / ակնարկ - docs.pytorch.org

  14. ONNX Runtime - ONNX Runtime փաստաթղթեր - onnxruntime.ai

  15. NVIDIA - TensorRT փաստաթղթեր - docs.nvidia.com

  16. NVIDIA - TensorRT քվանտացված տիպեր - docs.nvidia.com

  17. NVIDIA - Nsight Systems - developer.nvidia.com

  18. NVIDIA - Triton Inference Server - դինամիկ խմբաքանակավորում - docs.nvidia.com

  19. DeepSpeed ​​- ZeRO Stage 3 փաստաթղթեր - deepspeed.readthedocs.io

  20. bitsandbytes (bitsandbytes-հիմնադրամ) - bitsandbytes - github.com

  21. Գրգռող դեմք - Արագացում. Գրադիենտային կուտակման ուղեցույց - huggingface.co

  22. Գրկախառնվող դեմք - Տոկենիզատորների փաստաթղթեր - huggingface.co

  23. Գրկախառնվող դեմք - Տրանսֆորմերներ։ PEFT ուղեցույց - huggingface.co

  24. Գրկախառնված դեմք - Transformers: KV cache-ի բացատրությունը - huggingface.co

  25. Գրկախառնվող դեմք - Տրանսֆորմերներ. «Արագ» տոկենիզատորներ (տոկենիզատորների դասեր) - huggingface.co

  26. arXiv - Գիտելիքների խտացում նեյրոնային ցանցում (Հինտոն և այլք, 2015) - arxiv.org

  27. arXiv - LoRA: Մեծ լեզվական մոդելների ցածրակարգ ադապտացիա - arxiv.org

  28. arXiv - FlashAttention. Արագ և հիշողության արդյունավետություն, ճշգրիտ ուշադրություն IO-Awareness-ի միջոցով - arxiv.org

Գտեք արհեստական ​​բանականության վերջին նորույթները պաշտոնական արհեստական ​​բանականության օգնականների խանութում

Մեր մասին

Վերադառնալ բլոգ