Kaip optimizuoti dirbtinio intelekto modelius

Kaip optimizuoti dirbtinio intelekto modelius

Trumpas atsakymas: norint optimizuoti dirbtinio intelekto modelius, pasirinkite vieną pagrindinį apribojimą (vėlavimo laiką, kainą, atmintį, kokybę, stabilumą arba pralaidumą), tada prieš ką nors keisdami užfiksuokite patikimą bazinį lygį. Pirmiausia pašalinkite gamybos srauto kliūtis, tada pritaikykite mažos rizikos veiksnius, pvz., mišrų tikslumą ir paketavimą; jei kokybė išlieka, pereikite prie kompiliatoriaus / vykdymo laiko įrankių ir tik tada, kai reikia, sumažinkite modelio dydį kiekybiškai arba distiliuodami.

Svarbiausios išvados:

Apribojimas : pasirinkite vieną ar du tikslinius rodiklius; optimizavimas yra kompromisų, o ne nemokamų pergalių, laukas.

Matavimas : profiliuokite realius darbo krūvius su p50/p95/p99, pralaidumu, panaudojimu ir atminties pikais.

Vamzdynas : prieš liečiant modelį, ištaisykite žetonų iššifravimą, duomenų įkėlimo programas, išankstinį apdorojimą ir paketavimą.

Pateikimas : naudokite talpyklą, sąmoningą paketavimą, lygiagretumo derinimą ir atidžiai stebėkite uodegos delsą.

Apsauginiai turėklai : po kiekvieno našumo pakeitimo paleiskite auksinius raginimus, užduočių metriką ir atsitiktinius patikrinimus.

Kaip optimizuoti dirbtinio intelekto modelius (infografikas)

🔗 Kaip efektyviai įvertinti dirbtinio intelekto modelius.
Pagrindiniai kriterijai ir žingsniai, skirti modeliams teisingai ir patikimai įvertinti.

🔗 Kaip išmatuoti dirbtinio intelekto našumą naudojant realius rodiklius.
Palyginimui naudokite etalonus, delsos laiką, kainą ir kokybės signalus.

🔗 Kaip išbandyti dirbtinio intelekto modelius prieš pradedant gamybą.
Praktinis testavimo procesas: duomenų skaidymas, streso atvejai ir stebėjimas.

🔗 Kaip naudoti dirbtinį intelektą turiniui kurti.
Greičiau paverskite idėjas juodraščiais naudodami struktūrizuotus raginimus ir iteraciją.


1) Ką „Optimizuoti“ reiškia praktiškai (nes kiekvienas tai naudoja skirtingai) 🧠

Kai žmonės sako „optimizuoti dirbtinio intelekto modelį“, jie gali turėti omenyje:

  • Padarykite jį greitesnį (mažesnis delsos laikas)

  • Pigiau (mažiau GPU valandų, mažesnės išlaidos debesijos technologijoms)

  • Sumažinkite (atminties naudojimas, diegimas periferiniuose tinkluose)

  • Padarykite jį tikslesnį (pagerinkite kokybę, sumažinkite haliucinacijų skaičių)

  • Padaryti jį stabilesnį (mažiau dispersijos, mažiau gedimų gamyboje)

  • Palengvinti aptarnavimą (pralaidumas, paketavimas, nuspėjamas našumas)

Štai šiek tiek erzinanti tiesa: negalite visų šių dalykų maksimaliai išnaudoti vienu metu. Optimizavimas yra tarsi baliono suspaudimas – įstumiate vieną pusę, o kita iššoka. Ne visada, bet pakankamai dažnai, kad turėtumėte planuoti kompromisus.

Taigi, prieš ką nors paliesdami, pasirinkite pagrindinį apribojimą :


2) Kaip atrodo gera dirbtinio intelekto modelių optimizavimo versija ✅

Geras optimizavimo variantas nėra tiesiog „pritaikyti kvantavimą ir melstis“. Tai sistema. Geriausios konfigūracijos paprastai turi:

  • Patikimas atskaitos taškas.
    Jei negalite atkurti dabartinių rezultatų, negalite žinoti, kad ką nors pagerinote. Paprasta... bet žmonės tai praleidžia. Tada jie suklumpa.

  • Aiškus tikslinis rodiklis
    „Greitesnis“ yra miglotas. „Sumažinti p95 delsą nuo 900 ms iki 300 ms išlaikant tą patį kokybės balą“ yra realus tikslas.

  • Kokybės apsaugos priemonės.
    Kiekviena našumo pergalė rizikuoja tyliu kokybės nuosmukiu. Jums reikia testų, vertinimų ar bent jau sveiko proto rinkinio.

  • Aparatinės įrangos suvokimas.
    „Greitas“ modelis viename GPU gali nuskaityti kitame. CPU yra savotiškas chaosas.

  • Iteraciniai pakeitimai, o ne staigus perrašymas.
    Kai vienu metu pakeičiate penkis dalykus ir našumas pagerėja, nežinote, kodėl. O tai... kelia nerimą.

Optimizavimas turėtų jaustis kaip gitaros derinimas – nedideli pakeitimai, atidžiai klausykis, kartok 🎸. Jei jautiesi kaip žongliravimas peiliais, kažkas negerai.


3) Palyginimo lentelė: populiarios dirbtinio intelekto modelių optimizavimo parinktys 📊

Žemiau pateikiama trumpa ir šiek tiek netvarkinga dažniausiai naudojamų optimizavimo įrankių / metodų palyginimo lentelė. Ne, ji nėra visiškai „sąžininga“ – realus gyvenimas taip pat nėra.

Įrankis / parinktis Auditorija Kaina Kodėl tai veikia
„PyTorch“ torch.compile ( PyTorch dokumentacija ) PyTorch žmonės Nemokama Grafų fiksavimas ir kompiliavimo gudrybės gali sumažinti išlaidas... kartais tai magija ✨
ONNX vykdymo aplinka ( ONNX vykdymo aplinkos dokumentai ) Dislokavimo komandos Laisvas Stiprus išvadų optimizavimas, platus palaikymas, tinka standartizuotam pateikimui
„TensorRT“ ( NVIDIA „TensorRT“ dokumentai ) NVIDIA diegimas Mokamos vibracijos (dažnai įtraukiamos į paketus) Agresyvus branduolių suliejimas + tikslus valdymas, labai greitas spragtelėjus
„DeepSpeed“ ( ZeRO dokumentai ) Mokymo komandos Nemokama Atminties ir pralaidumo optimizavimas (ZeRO ir kt.). Gali jaustis kaip reaktyvinis variklis
FSDP (PyTorch) ( PyTorch FSDP dokumentai ) Mokymo komandos Nemokama Shards parametrai / gradientai, todėl dideli modeliai tampa mažiau bauginantys
bitų ir baitų kvantavimas ( bitai ir baitai ) LLM meistrai Nemokama Mažas bitų svoris, didžiulės atminties santaupos – kokybė priklauso nuo aplinkybių, bet vau 😬
Distiliavimas ( Hinton ir kt., 2015 ) Produktų komandos „Laiko sąnaudos“ Mažesnis studentų modelis paveldi elgseną, paprastai užtikrina geriausią ilgalaikę investicijų grąžą
Genėjimas ( PyTorch genėjimo pamoka ) Tyrimai + produkcija Nemokama Pašalina nereikalingą svorį. Veikia geriau, kai derinama su perkvalifikavimu
„Flash Attention“ / sulieti branduoliai ( „FlashAttention“ popierius ) Spektaklio entuziastai Nemokama Greitesnis dėmesys, geresnė atmintis. Tikra pergalė transformeriams
„Triton“ išvadų serveris ( dinaminis paketavimas ) Operacijos / infrastruktūra Nemokama Gamybos aptarnavimas, partijų apdorojimas, kelių modelių srautai – atrodo, kad tai įmonės lygio procesas

Formatavimo keistenybės prisipažinimas: „Kaina“ yra netvarkinga, nes atvirojo kodo programinė įranga vis tiek gali kainuoti savaitgalį derinimo, o tai yra... kaina. 😵💫


4) Pradėkite nuo matavimo: kurkite profilį tokį, kokio norite 🔍

Jei iš viso šio vadovo darote tik vieną dalyką, darykite tai: tinkamai išmatuokite.

Mano paties bandymuose didžiausi „optimizavimo proveržiai“ atsirado atradus kažką gėdingai paprasto, pavyzdžiui:

  • duomenų įkroviklis apkrauna GPU

  • CPU išankstinio apdorojimo kliūtis

  • maži partijų dydžiai, dėl kurių padidėja branduolio paleidimo išlaidos

  • lėtas tokenizavimas (tokenizatoriai gali būti tylūs piktadariai)

  • atminties fragmentacija ( PyTorch CUDA atminties paskirstytojo pastabos )

  • vieno sluoksnio dominuojantis skaičiavimas

Ką matuoti (minimalus rinkinys)

  • Latencija (p50, p95, p99) ( SRE latencijos procentilėse )

  • Pralaidumas (žetonai/sek., užklausos/sek.)

  • GPU panaudojimas (skaičiavimas + atmintis)

  • VRAM / RAM piko vertės

  • Kaina už 1 tūkst. žetonų (arba už išvadą)

Praktinis profiliavimo mąstymas

  • Aprašykite vieną jums rūpimą scenarijų (ne žaislo tema).

  • Viską užsirašykite mažame „perf žurnale“.
    Taip, tai nuobodu... bet tai apsaugo jus nuo vėlesnio savęs apgaudinėjimo.

(Jei norite pradėti nuo konkretaus įrankio: dažniausiai pasitaikantys įtariamieji yra „PyTorch Profiler“ ( „torch.profiler“ dokumentacija ) ir „Nsight Systems“ ( „NVIDIA Nsight Systems


5) Duomenys + Treniruočių optimizavimas: Tylioji supergalia 📦🚀

Žmonės pernelyg susitelkia ties modelių architektūra ir pamiršta apie patį konvejerį. Tuo tarpu šis tyliai sunaudoja pusę GPU.

Lengvos pergalės, kurios pasirodo greitai

  • Naudokite mišrų tikslumą (FP16/BF16, kur stabilus) ( PyTorch AMP / torch.amp ).
    Paprastai greičiau, dažnai gerai, bet atkreipkite dėmesį į skaitinius trūkumus.

  • Gradiento kaupimas , kai partijos dydis yra ribotas ( 🤗 Pagreitinimo vadovas )
    Išlaiko optimizavimo stabilumą neišnaudojant atminties.

  • Gradiento kontrolinis taškas ( torch.utils.checkpoint ).
    Pakeičia skaičiavimo pajėgumus į atmintį – leidžia naudoti didesnius kontekstus.

  • Efektyvus tokenizavimas ( 🤗 Tokenizatoriai ).
    Tokenizavimas gali tapti kliūtimi dideliu mastu. Tai ne žavinga, o svarbu.

  • Duomenų įkėlimo įrenginio derinimas.
    Daugiau darbuotojų, prisegta atmintis, išankstinis įkėlimas – negražu, bet efektyvu 😴➡️💪 ( „PyTorch“ našumo derinimo vadovas )

Tikslus parametrų derinimas

Jei tiksliai derinate didelius modelius, PEFT metodai (pvz., LoRA stiliaus adapteriai) gali gerokai sumažinti mokymo išlaidas, tuo pačiu išlikdami stebėtinai patikimi ( 🤗 „Transformers PEFT“ vadovas , LoRA straipsnis ). Tai vienas iš tų momentų, kai kyla klausimas „kodėl mes to nepadarėme anksčiau?“.


6) Architektūros lygio optimizavimas: tinkamo dydžio modelis 🧩

Kartais geriausias būdas optimizuoti yra... nustoti naudoti per didelį modelį. Žinau, šventvagystė 😄.

Paskambinkite atlikdami kelis pagrindinius veiksmus:

  • Nuspręskite, ar jums reikia visiško bendrosios žvalgybos išsilavinimo, ar specialisto.

  • Kontekstinio lango dydį palaikykite tokį, kokio reikia, o ne didesnį.

  • Naudokite konkrečiam darbui parengtą modelį (klasifikavimo modelius klasifikavimo darbui ir pan.).

Praktinės tinkamo dydžio strategijos

  • Daugumai užklausų
    perjunkite į mažesnį magistralinį tinklą. Tada „sunkias užklausas“ nukreipkite į didesnį modelį.

  • Naudokite dviejų etapų nustatymą.
    Greiti modelio juodraščiai, geresni modelio patikrinimai arba redagavimai.
    Tai tarsi rašymas su išrankiu draugu – erzina, bet efektyvu.

  • Sumažinkite išvesties ilgį.
    Išvesties žetonai kainuoja pinigus ir laiką. Jei jūsų modelis klaidžioja, jūs mokate už tą klaidžiojimą.

Mačiau, kaip komandos smarkiai sumažino išlaidas, taikydamos trumpesnius rezultatus. Atrodo, kad tai smulkmena, bet veikia.


7) Kompiliatoriaus + grafikų optimizavimas: iš kur kyla greitis 🏎️

Tai yra sluoksnis „priversti kompiuterį atlikti protingesnius kompiuterinius darbus“.

Įprasti metodai:

Paprastai tariant: jūsų modelis gali būti greitas matematiškai, bet lėtas operaciškai. Kompiliatoriai iš dalies tai ištaiso.

Praktiniai patarimai (dar žinomi kaip randai)

  • Šie optimizavimai gali būti jautrūs modelio formos pokyčiams.

  • Kai kurie modeliai labai pagreitėja, kiti vos pajuda.

  • Kartais pasitaiko pagreitėjimas ir mįslinga klaida – tarsi įsikraustė gremlinas 🧌

Vis dėlto, kai tai veikia, tai viena švariausių pergalių.


8) Kvantavimas, genėjimas, distiliavimas: mažesnis be verkimo (per daug) 🪓📉

Štai tokios skilties žmonės nori... nes tai skamba kaip nemokamas pasirodymas. Gali būti, bet į tai reikia žiūrėti kaip į operaciją.

Kvantavimas (mažesnio tikslumo svoriai / aktyvacijos)

  • Puikiai tinka išvadų darymo greičiui ir atminčiai

  • Rizika: kokybė krenta, ypač kraštutiniais atvejais

  • Geriausia praktika: vertinkite naudodami realų testų rinkinį, o ne vibracijas

Įprasti skoniai, apie kuriuos išgirsite:

Genėjimas (parametrų pašalinimas)

  • Pašalina „nesvarbius“ svorius arba struktūras ( „PyTorch“ genėjimo pamoka )

  • Paprastai reikia perkvalifikuoti, kad būtų atkurta kokybė

  • Veikia geriau, nei žmonės mano... kai daroma atsargiai

Distiliavimas (mokinys mokosi iš mokytojo)

Tai mano mėgstamiausias ilgalaikis svertas. Distiliavimas gali sukurti mažesnį modelį, kuris elgiasi panašiai ir dažnai yra stabilesnis nei ekstremalus kvantavimas („ Žinių distiliavimas neuroniniame tinkle “).

Netobula metafora: distiliavimas yra tarsi sudėtingos sriubos pilimas per filtrą ir... mažesnės sriubos gavimas. Sriuba taip nedirbama, bet mintį suprantate 🍲.


9) Padavimai ir išvados: tikroji mūšio zona 🧯

Galite „optimizuoti“ modelį ir vis tiek jį prastai aptarnauti. Pateikimas yra ta vieta, kur vėlavimas ir kaina tampa realūs.

Svarbios pergalės padavimo metu

  • Paketavimas
    pagerina pralaidumą. Tačiau padidina delsą, jei persistengiate. Subalansuokite. ( „Triton“ dinaminis paketavimas )

  • Kaupimas talpykloje. Greitas
    kaupimas talpykloje ir KV talpyklos pakartotinis naudojimas gali būti labai svarbus pasikartojantiems kontekstams. ( KV talpyklos paaiškinimas )

  • Srautinio perdavimo išvestis.
    Vartotojai mano, kad tai greičiau, net jei bendras laikas yra panašus. Suvokimas yra svarbus 🙂.

  • Žetonų išlaidų mažinimas
    Kai kurie stekai atlieka papildomą darbą su kiekvienu žetonu. Sumažinkite šias išlaidas ir laimėsite daug.

Saugokitės uodegos vėlavimo

Jūsų vidurkis gali atrodyti puikiai, o p99 – katastrofa. Deja, vartotojai gyvena uodegoje. ( „Uodegos delsa“ ir kodėl vidurkiai meluoja )


10) Aparatinės įrangos optimizavimas: suderinkite modelį su įrenginiu 🧰🖥️

Optimizavimas nežinant apie techninę įrangą yra tas pats, kas lenktyninio automobilio derinimas netikrinus padangų. Žinoma, galite tai padaryti, bet tai šiek tiek kvaila.

GPU aspektai

  • Atminties pralaidumas dažnai yra ribojantis veiksnys, o ne neapdoroti skaičiavimai

  • Didesnės partijos gali padėti, kol jos nebepadeda

  • Branduolio suliejimas ir dėmesio optimizavimas yra labai svarbūs transformatoriams ( „FlashAttention“: IO-aware tikslus dėmesys )

CPU aspektai

  • Sriegimas, vektorizavimas ir atminties lokalumas yra labai svarbūs

  • Tokenizavimo pridėtinės išlaidos gali dominuoti ( 🤗 „greiti“ tokenizatoriai )

  • Jums gali prireikti kitokių kvantavimo strategijų nei naudojant GPU

Apsvarstymai dėl periferinių / mobiliųjų įrenginių

  • Atminties pėdsakas tampa svarbiausiu prioritetu

  • Vėlavimo dispersija yra svarbi, nes įrenginiai yra… nuotaikingi

  • Mažesni, specializuoti modeliai dažnai pranoksta didelius, bendrus modelius


11) Kokybiški apsauginiai turėklai: neoptimizuokite savęs į klaidą 🧪

Kiekvieną greičio pergalę turėtų lydėti kokybės patikrinimas. Priešingu atveju švęsite, išsiųsite prekę ir gausite pranešimą, pavyzdžiui, „kodėl asistentas staiga prabilo kaip piratas?“ 🏴☠️

Pragmatiški apsauginiai turėklai:

  • Auksiniai raginimai (fiksuotas raginimų rinkinys, kurį visada išbandote)

  • Užduoties metrikos (tikslumas, F1, BLEU, kas tinka)

  • Žmonių atliekami atsitiktiniai patikrinimai (taip, rimtai)

  • Regresijos ribos („leidžiamas ne didesnis kaip X % sumažėjimas“)

Taip pat sekite gedimų režimus:

  • formatavimo poslinkis

  • atsisakymo elgesio pokyčiai

  • haliucinacijų dažnis

  • atsako ilgio infliacija

Optimizavimas gali pakeisti elgesį netikėtais būdais. Keistai. Erzinančiai. Nuspėjamai, žvelgiant atgal.


12) Kontrolinis sąrašas: kaip žingsnis po žingsnio optimizuoti dirbtinio intelekto modelius ✅🤖

Jei norite aiškios operacijų tvarkos, kaip optimizuoti dirbtinio intelekto modelius , pateikiame darbo eigą, kuri padeda žmonėms išlikti sveiko proto:

  1. Apibrėžkite sėkmę.
    Pasirinkite 1–2 pagrindinius rodiklius (vėlavimo laiką, kainą, pralaidumą, kokybę).

  2. Išmatuokite bazinio
    profilio realius darbo krūvius, įrašykite p50/p95, atmintį, kainą. ( „PyTorch Profiler “)

  3. srauto kliūčių šalinimas.
    Duomenų įkėlimas, tokenizavimas, išankstinis apdorojimas, paketavimas.

  4. Taikyti mažos rizikos skaičiavimo laimėjimus.
    Mišrus tikslumas, branduolio optimizavimas, geresnis paketavimas.

  5. Išbandykite kompiliatoriaus / vykdymo aplinkos optimizavimą:
    grafų fiksavimą, išvadų vykdymo aplinką, operatorių suliejimą. ( torch.compile pamoka , ONNX vykdymo aplinkos dokumentai )

  6. Sumažinkite modelio kainą.
    Kruopščiai įvertinkite kiekybiškai, jei įmanoma, distiliuokite ir, jei reikia, apkarpykite.

  7. Tune aptarnavimo
    talpyklos, lygiagretumo, apkrovos testavimo, uodegos delsos pataisymai.

  8. Patvirtinkite kokybę.
    Atlikite regresinius testus ir palyginkite rezultatus greta.

  9. Kartoti.
    Maži pakeitimai, aiškios pastabos, kartoti. Nedemonstratyvu – efektyvu.

Ir taip, tai vis dar yra „Kaip optimizuoti dirbtinio intelekto modelius“, net jei tai labiau panašu į „Kaip nustoti mindžioti ant grėblių“. Tas pats.


13) Dažniausios klaidos (kad jų nekartotumėte kaip mes visi) 🙃

  • Optimizavimas prieš vertinimą.
    Sugaišite laiką. O tada užtikrintai optimizuosite netinkamą dalyką...

  • Vieno etalono vaikymasis.
    Etalonai meluoja dėl praleidimo. Jūsų darbo krūvis yra tiesa.

  • Atminties problemų ignoravimas
    sukelia sulėtėjimą, gedimus ir virpėjimą. ( CUDA atminties naudojimo supratimas „PyTorch“ programoje )

  • Per ankstyvas per didelis kvantavimas.
    Mažo bitų kiekio kvantavimas gali būti nuostabus, bet pirmiausia pradėkite nuo saugesnių žingsnių.

  • Nėra atšaukimo plano.
    Jei negalite greitai atšaukti, kiekvienas diegimas tampa įtemptas. Stresas sukelia klaidų.


Baigiamosios pastabos: Žmogiškas būdas optimizuoti 😌⚡

Dirbtinio intelekto modelių optimizavimas nėra vienas triukas. Tai daugiasluoksnis procesas: išmatuokite, taisykite srautą, naudokite kompiliatorius ir vykdymo aplinkas, sureguliuokite pateikimą, tada, jei reikia, sumažinkite modelį kvantavimo arba distiliavimo būdu. Darykite tai žingsnis po žingsnio, išlaikykite kokybės apsaugos priemones ir nepasikliaukite „jaučiasi greičiau“ kaip metrika (jūsų jausmai yra puikūs, jūsų jausmai nėra profiliavimo įrankis).

Jei norite trumpiausio išsineštinio maisto:

  • Pirmiausia išmatuokite 🔍

  • Optimizuokite vamzdyną toliau 🧵

  • Tada optimizuokite modelį 🧠

  • Tada optimizuokite patiekimą 🏗️

  • Nuolat tikrinkite kokybę ✅

Ir jei tai padeda, priminkite sau: tikslas nėra „tobulas modelis“. Tikslas yra modelis, kuris yra greitas, įperkamas ir pakankamai patikimas, kad galėtumėte miegoti naktį... daugumą naktų 😴.

DUK

Ką praktiškai reiškia dirbtinio intelekto modelio optimizavimas

„Optimizuoti“ paprastai reiškia vieno pagrindinio apribojimo – delsos, kainos, atminties naudojimo, tikslumo, stabilumo arba aptarnavimo našumo – gerinimą. Sunkiausia dalis yra kompromisai – vienos srities spaudimas gali pakenkti kitai. Praktiškas būdas – pasirinkti aiškų tikslą (pvz., p95 delsą arba kokybės pasiekimo laiką) ir optimizuoti pagal jį. Neturint tikslo, lengva „tobulėti“ ir vis tiek prarasti.

Kaip optimizuoti dirbtinio intelekto modelius nepakenkiant kokybei

Kiekvieną greičio ar kainos pokytį traktuokite kaip potencialią tylią regresiją. Naudokite apsaugines priemones, tokias kaip auksiniai raginimai, užduočių metrikos ir greiti žmonių atliekami patikrinimai. Nustatykite aiškią priimtinos kokybės svyravimo ribą ir palyginkite rezultatus greta. Taip išvengsite, kad po pateikimo „tai greičiau“ nevirstų „kodėl gamyboje tai staiga pasidarė keista?“.

Ką reikia išmatuoti prieš pradedant optimizuoti

Pradėkite nuo delsos procentilių (p50, p95, p99), pralaidumo (žetonų/sek. arba užklausų/sek.), GPU panaudojimo ir didžiausios VRAM/RAM atminties. Stebėkite kainą už išvadą arba už 1000 žetonų, jei kaina yra apribojimas. Apibūdinkite realų jūsų aptarnaujamą scenarijų, o ne žaislinę užduotį. Trumpas „našumo žurnalas“ padės išvengti spėlionių ir klaidų kartojimo.

Greitos, mažos rizikos pergalės treniruočių rezultatams

Mišrus tikslumas (FP16/BF16) dažnai yra greičiausias pirmasis svertas, tačiau atkreipkite dėmesį į skaitinius niuansus. Jei paketo dydis ribotas, gradiento kaupimas gali stabilizuoti optimizavimą neeikvojant atminties. Gradiento kontrolinis taškas atima papildomus skaičiavimus, kad būtų mažesnė atmintis, taip įgalinant didesnius kontekstus. Neignoruokite tokenizavimo ir duomenų įkėlimo įrenginio derinimo – jie gali tyliai apkrauti GPU.

Kada naudoti „torch.compile“, „ONNX Runtime“ arba „TensorRT“

Šie įrankiai skirti operacinėms išlaidoms spręsti: grafų fiksavimui, branduolio suliejimui ir vykdymo laiko grafų optimizavimui. Jie gali užtikrinti aiškų išvadų pagreitinimą, tačiau rezultatai skiriasi priklausomai nuo modelio formos ir aparatinės įrangos. Kai kurie nustatymai veikia magiškai, kiti vos juda. Tikėkitės jautrumo formos pokyčiams ir retkarčiais pasitaikančių „gremlinų“ klaidų – išmatuokite prieš ir po realaus darbo krūvio.

Ar verta kvantizuoti ir kaip neperžengti ribos

Kvantavimas gali sumažinti atminties kiekį ir pagreitinti išvadų darymą, ypač naudojant INT8, tačiau kraštutiniais atvejais kokybė gali suprastėti. Mažesnio bitų skaičiaus parinktys (pvz., INT4/k-bit) leidžia sutaupyti daugiau, tačiau rizikuoja labiau. Saugiausias įprotis yra vertinti realiame bandymų rinkinyje ir palyginti rezultatus, o ne nuojautą. Pirmiausia pradėkite nuo saugesnių žingsnių, o tada, jei reikia, mažinkite tikslumą.

Skirtumas tarp genėjimo ir distiliavimo siekiant sumažinti modelio dydį

Genėjimas pašalina „nepanaudoto svorio“ parametrus ir dažnai reikalauja pakartotinio mokymo, kad būtų atkurta kokybė, ypač kai tai daroma agresyviai. Distiliavimas apmoko mažesnį mokinio modelį imituoti didesnio mokytojo elgesį, ir tai gali būti didesnė ilgalaikė investicijų grąža nei ekstremalus kvantavimas. Jei norite mažesnio modelio, kuris elgtųsi panašiai ir išliktų stabilus, distiliavimas dažnai yra švaresnis kelias.

Kaip sumažinti išvadų kainą ir delsą patobulinus pateikimą

Optimizavimas tampa apčiuopiamas aptarnaujant: paketavimas padidina pralaidumą, tačiau per didelis gali pakenkti delsai, todėl jį reikia atidžiai koreguoti. Talpyklos kaupimas (greitas kaupimas talpykloje ir KV talpyklos pakartotinis naudojimas) gali būti labai svarbus, kai kontekstai kartojasi. Srautinio perdavimo išvestis pagerina suvokiamą greitį, net jei bendras laikas yra panašus. Taip pat atkreipkite dėmesį į kiekvieno žetono pridėtinę vertę savo steke – nedidelis darbas su vienu žetonu greitai kaupiasi.

Kodėl uodegos delsa yra tokia svarbi optimizuojant dirbtinio intelekto modelius

Vidurkiai gali atrodyti puikiai, o „p99“ yra katastrofa, o vartotojai linkę gyventi „uodegoje“. „Uodegos delsa“ dažnai kyla dėl trikdžių: atminties fragmentacijos, procesoriaus išankstinio apdorojimo šuolių, tokenizavimo sulėtėjimo arba prasto paketavimo elgesio. Štai kodėl vadove pabrėžiami procentiliai ir realūs darbo krūviai. Optimizuodami tik „p50“, vis tiek galite teikti patirtį, kuri „atsitiktinai atrodo lėta“

Nuorodos

  1. „Amazon Web Services“ (AWS)AWS „CloudWatch“ procentiliai (statistikos apibrėžimai)docs.aws.amazon.com

  2. „Google“„The Tail at Scale“ (geriausios praktikos uodegos delsa)sre.google

  3. „Google“paslaugų lygio tikslai (SRE knyga) – delsos procentiliaisre.google

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

  5. „PyTorch“„FullyShardedDataParallel“ (FSDP)docs.pytorch.org

  6. PyTorchPyTorch Profilerdocs.pytorch.org

  7. PyTorch - CUDA semantika: atminties valdymas (CUDA atminties paskirstytojo pastabos) - docs.pytorch.org

  8. „PyTorch“automatinis mišrus tikslumas (torch.amp / AMP)docs.pytorch.org

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

  10. „PyTorch“našumo derinimo vadovasdocs.pytorch.org

  11. PyTorchGenėjimo pamokadocs.pytorch.org

  12. „PyTorch“CUDA atminties naudojimo „PyTorch“ supratimasdocs.pytorch.org

  13. „PyTorch“„torch.compile“ pamoka / apžvalgadocs.pytorch.org

  14. ONNX vykdymo aplinkaONNX vykdymo aplinkos dokumentacijaonnxruntime.ai

  15. NVIDIA„TensorRT“ dokumentacijadocs.nvidia.com

  16. NVIDIA„TensorRT“ kvantiniai tipaidocs.nvidia.com

  17. NVIDIA„Nsight Systems“kūrėjas.nvidia.com

  18. NVIDIA„Triton Inference Server“ – dinaminis paketavimasdocs.nvidia.com

  19. „DeepSpeed“„ZeRO Stage 3“ dokumentacijadeepspeed.readthedocs.io

  20. bitsandbytes (bitsandbytes-foundation) - bitsandbytes - github.com

  21. Apkabinantis veidaspagreitėjimas: gradiento kaupimo vadovashuggingface.co

  22. „Hugging Face“Tokenizerių dokumentacijahuggingface.co

  23. Apkabinantis veidasTransformeriai: PEFT vadovashuggingface.co

  24. Apkabinantis veidasTransformeriai: KV talpyklos paaiškinimashuggingface.co

  25. Apkabinantis veidasTransformeriai: „Greiti“ tokenizatoriai (tokenizatorių klasės)huggingface.co

  26. arXivŽinių išgryninimas neuroniniame tinkle (Hinton ir kt., 2015)arxiv.org

  27. arXivLoRA: didelių kalbų modelių žemo rango adaptacijaarxiv.org

  28. arXiv„FlashAttention“: greitas ir atmintį taupantis tikslus dėmesys su IO-Awarenessarxiv.org

Raskite naujausią dirbtinį intelektą oficialioje dirbtinio intelekto asistentų parduotuvėje

Apie mus

Atgal į tinklaraštį