Įvadas: kodėl verta praleisti savaitgalį kuriant TensorRT-LLM
Jei kada nors stebėjote, kaip GPU dirba tik 60 % pajėgumu, kol jūsų LLM juda lėtai, žinote, kad turite nepanaudotos galios. TensorRT-LLM paverčia šią atsargą našumu: sulieti branduoliai, puslapinis dėmesys, kvantavimas ir grafiko lygmens optimizavimas, kurie sumažina delsą ir padidina žodžių per sekundę skaičių. Šiame praktiniame vadove žingsnis po žingsnio paaiškinsime viską – nuo įdiegimo iki variklio kūrimo ir aptarnavimo – kad galėtumėte užtikrintai diegti greitesnę ir pigesnę išvadą NVIDIA GPU.
Ši mokymo medžiaga parašyta praktiniu ir į sprendimus orientuotu stiliumi. Naudosime klausimais pagrįstą struktūrą su nukopijuojamomis komandomis, dažnomis klaidomis ir sprendimų taškais dėl FP16 vs INT8, paketų kūrimo ir KV talpyklos strategijų. Taip pat remsimės oficialiais šaltiniais, kad prireikus galėtumėte giliau pasigilinti į temas.
Ko išmoksite
- Kaip nustatyti aplinką, skirtą TensorRT-LLM
- Kaip paruošti modelį (iš Hugging Face arba kontrolinių taškų) variklio kūrimui
- Kaip sukurti FP16/INT8 variklius ir optimizuoti našumą
- Kaip vykdyti išvadą per Python/C++ ir HTTP aptarnavimą
- Kaip atlikti etaloninius testus, kurti paketus ir derinti
Kam tai skirta
- ML inžinieriams, diegiantiems LLM NVIDIA GPU
- Praktikams, optimizuojantiems sąnaudas/delsą gamyboje
- Kūrėjams, pereinantiems nuo PyTorch Transformers prie labai optimizuotos išvados
- Kas yra TensorRT-LLM ir kada jį naudoti?
TensorRT-LLM yra išvadų rinkinys, kuris kompiliuoja Transformer modelius į labai optimizuotus GPU „variklius“. Palyginti su grynu PyTorch arba bendrosiomis vykdymo aplinkomis, paprastai gausite:
- Mažesnė delsą vienam žodžiui
- Didesnis pralaidumas esant dideliems paketų dydžiams
- Geresnis atminties efektyvumas su puslapiniu KV talpykla ir kvantavimu
Naudokite jį, kai veikiate NVIDIA GPU ir jums rūpi gamybos lygio našumas. Jis ypač vertingas dekoderio tipo LLM (pvz., Llama, Mistral, Phi, BLOOM) ir tokiems scenarijams kaip pokalbių robotai, RAG ir didelio QPS API paslaugos.
- Būtinosios sąlygos ir aplinkos nustatymas
Pagrindiniai reikalavimai
- NVIDIA GPU su naujausia skaičiavimo galimybe (pvz., Ampere, Ada, Hopper)
- Atitinkančios CUDA ir TensorRT versijos, plius tinkami tvarkyklės
- Python 3.8+ ir kūrimo įrankiai, jei kompiliuojate iš šaltinio
Versijos pastaba: prieš diegdami visada patikrinkite oficialią TensorRT palaikymo matricą ir leidimo pastabas, kad įsitikintumėte, jog CUDA/TensorRT versijos ir funkcijos yra suderinamos.
Greito paleidimo parinktys
- Konteinerizuotas: naudokite NVIDIA konteinerius su iš anksto įdiegtu CUDA/TensorRT – tai greičiausias būdas išvengti versijų neatitikimų.
- Vietinis įdiegimas: vadovaukitės oficialiu greito paleidimo vadovu, skirtu bazinei TensorRT, tada ant viršaus uždėkite TensorRT-LLM.
- Modelio paruošimas (Hugging Face → TensorRT-LLM)
Dažni šaltiniai
- Hugging Face: Llama/Mistral/BLOOM variantai
- Vietiniai kontroliniai taškai: pasirinktiniai patikslinimai
Paruošimo kontrolinis sąrašas
- Patvirtinkite, kad modelio architektūra palaikoma TensorRT-LLM.
- Atsisiųskite modelio svorius ir tokenizatorių.
- Jei reikia, konvertuokite safetensors į numatytus formatus arba eksportuokite į ONNX naudodami projekto scenarijus.
Patarimas: oficialiame greito paleidimo vadove dažnai yra scenarijų, skirtų modeliams gauti ir konvertuoti į tinkamą tarpinę formą. Norėdami peržiūrėti pamokos stiliaus apžvalgą su BLOOM pavyzdžiu, peržiūrėkite Dell vadovą, kaip konvertuoti Hugging Face LLM į TensorRT-LLM.
- TensorRT-LLM variklio kūrimas (darbo eigos esmė)
Koncepcijos, kurias turėtumėte žinoti
- Variklis: sukompiliuotas, aparatinės įrangos optimizuotas artefaktas, kurį įkeliate išvadoms.
- Tikslumas: FP16/BF16 stipriam pagrindui; INT8 arba FP8 didesniam pralaidumui, jei tikslumas išlieka.
- KV talpykla: puslapinis KV talpykla sumažina atminties susiskaidymą ir padidina ilgo konteksto našumą.
Aukšto lygio veiksmai
- Apibrėžkite kūrimo konfigūraciją: maksimalus paketas, sekos ilgiai, tikslumas, kvantavimas ir GPU architektūra.
- Nurodykite modelio kontrolinius taškus ir tokenizatorių.
- Kompiliuokite variklį savo tiksliniam (-iams) GPU.
Nuoroda: variklių kūrimas naudojant oficialią dokumentaciją ir konfigūracijas. Jei planuojate aptarnauti per Hugging Face Text Generation Inference (TGI), peržiūrėkite TRT-LLM vidinės sąsajos pastabas apie išankstinį variklių kompiliavimą pagal GPU architektūrą ir konfigūraciją.
Pradinis sprendimų medis
- Pirmasis kūrimas: FP16, vidutinis maksimalus sekos ilgis (pvz., 4K–8K), vidutinis paketas (pvz., 4–8). Patvirtinkite teisingumą.
- Mastelio keitimas: įgalinkite puslapinį KV talpyklą. Padidinkite maksimalų paketų/spindulio dydžius. Eksperimentuokite su FP8 arba INT8.
- Gamyba: prisegkite konfigūracijas, atitinkančias delsos/QPS SLO; sukurkite atskirus variklius kiekvienam scenarijui (trumpi raginimai vs ilgas kontekstas).
- Išvados vykdymas: Python, C++ ir HTTP
Turite tris įprastus kelius:
- Python: greitas prototipų kūrimas, idealiai tinka konvejeriams ir bloknotams.
- C++: maksimalus našumas, integravimas į vietines paslaugas.
- HTTP aptarnavimas: naudokite TGI su TRT-LLM vidine sąsaja arba vykdymo aplinkos aptarnavimo pavyzdžiais, kad galėtumėte diegti keičiamo dydžio.
Hugging Face TGI vidinė sąsaja
- Iš anksto kompiliuokite variklius, kad jie tiksliai atitiktų jūsų GPU/tikslumo nustatymą.
- Paleiskite TGI su TRT-LLM vidine sąsaja ir nukreipkite ją į variklio katalogą.
- Siųskite užklausas per /generate arba su openai suderinamus maršrutus ir keiskite mastelį su replikomis.
- Našumo optimizavimas, kuris iš tikrųjų ką nors keičia
Nuo ko pradėti
- Tikslumas: FP16 yra jūsų patikimas pagrindas. INT8/FP8 gali dar labiau sumažinti delsą, tačiau patvirtinkite kokybę.
- Paketų kūrimas: dinaminis paketų kūrimas ir užklausų apjungimas labai padidina pralaidumą; išmatuokite galinę delsą.
- Puslapinis KV talpykla: būtinas ilgiems raginimams ir srautiniam perdavimui; sumažina atminties spaudimą.
- Maksimalūs ilgiai: didesni maksimalūs sekos ilgiai padidina variklio dydį ir gali sumažinti laikrodžio greitį; sukurkite tikslui pritaikytus variklius.
Praktiniai patarimai
- Atlikite etaloninius testus su tikroviškais raginimais: atskirai išmatuokite išankstinio užpildymo ir dekodavimo etapus.
- Tokenizatoriaus pralaidumas yra svarbus: atlikite jį GPU, jei jūsų sistema jį palaiko.
- Stebėkite CUDA grafikus/sulietus branduolius: jie sumažina CPU pridėtines išlaidas ir branduolio paleidimo delsą.
- Kelių GPU atveju: teikite pirmenybę tenzoriniam lygiagretumui arba konvejerio lygiagretumui pagal savo modelio dydį ir delsos reikalavimus.
- Etaloniniai testai: įrodykite pergalę
Kontrolinis sąrašas
- Žodžiai/sek. (pralaidumas) esant tiksliniams paketų dydžiams
- Laikas iki pirmojo žodžio (TTFT) ir bendra delsą vienai užklausai
- GPU panaudojimas ir atminties atsarga esant didžiausiam QPS
- Tikslumas: BLEU/perplexity arba užduočiai specifiniai įvertinimai, jei kvantuojate
Naudokite nuoseklius sėklas ir raginimų rinkinius visose bazinėse linijose (PyTorch vs TensorRT-LLM), kad patvirtintumėte teisingumą ir deltas.
- Derinimas ir dažnos klaidos
- Nesutampančios versijos: sulygiuokite CUDA, tvarkyklių ir TensorRT versijas pagal oficialią palaikymo matricą.
- Variklis netinkamas įrenginiui: perkurkite variklius specialiai savo GPU architektūrai.
- OOM kūrimo metu: sumažinkite maksimalų sekos ilgį arba paketą; įgalinkite puslapinį KV; apsvarstykite kvantavimą.
- Tikslumo sumažėjimas su INT8: kalibruokite domeno reprezentatyviais duomenimis; išbandykite tenzorinį kvantavimą ir patikrinkite sluoksnio jautrumą.
- Lėtas TTFT nepaisant didelio pralaidumo: sureguliuokite puslapinį KV talpyklą, įgalinkite CUDA grafikus ir patikrinkite, ar nėra tokenizatoriaus trikdžių.
- Darbo eigos pavyzdys: nuo Hugging Face modelio iki gamybos
Scenarijus: norite mažos delsos pokalbių modelio A100.
- Pasirinkite modelį: 7B–13B Llama/Mistral variantas.
- Paruoškite: atsisiųskite svorius ir tokenizatorių; patikrinkite, ar architektūra palaikoma.
- Pirmasis variklis: FP16, maksimalus įvesties 4K, maksimalus išvesties 1K, paketas 4; puslapinis KV įjungtas.
- Patvirtinkite: palyginkite išvestis su savo PyTorch baziniu lygmeniu.
- Optimizuokite: išbandykite INT8 arba FP8; išmatuokite TTFT ir pralaidumą. Padidinkite paketą, skirtą serverio režimui.
- Aptarnaukite: naudokite TGI TRT-LLM vidinę sąsają; keiskite replikų mastelį už apkrovos balansavimo įrenginio; pridėkite srautinį perdavimą.
- Sąnaudų ir pajėgumų planavimas
- Pralaidumas vienam GPU: išmatuokite žodžių/sek. esant tiksliniam kontekstui. Naudokite jį QPS pajėgumui apskaičiuoti.
- Kaina už 1M žodžių: su greitesniu dekodavimu ir didesniu paketų panaudojimu, TRT-LLM paprastai sumažina kainą už žodį.
- Tinkamo dydžio varikliai: sukurkite atskirus variklius trumpos formos ir ilgos formos, kad sumažintumėte atsargos švaistymą.
- DUK vadovo viduje
K: Ar man reikia perkurti variklius kiekvienam GPU tipui?
A: Taip. Varikliai yra specifiniai aparatinei įrangai. Kurkite kiekvienai GPU architektūrai, kurią diegsite.
K: Kiek INT8 veikia kokybę?
A: Tai priklauso nuo modelio ir užduoties. Su gerais kalibravimo duomenimis daugelis modelių išlaiko beveik FP16 kokybę, tuo pačiu užtikrindami didelį pagreitį.
K: Ar galiu paleisti ilgus kontekstus (pvz., 32K)?
A: Taip, bet atidžiai planuokite atmintį. Naudokite puslapinį KV talpyklą ir sureguliuokite bloko dydžius; atminkite, kad ilgesni kontekstai padidina variklio dydį ir dekodavimo kainą.
K: Ar TGI yra būtinas?
A: Ne. Galite paleisti Python/C++ tiesiogiai. TGI yra patogus gamybos lygio HTTP API su automatiniu mastelio keitimu ir registravimu.
Verta paminėti apie darbo eigos pagreitinimą
Jei dažnai kartojate raginimus, lyginate išvestis tarp variklių arba dokumentuojate eksperimentus, šalia esantis AI asistentas, kuris palaiko greitus pakartojimus, kodo bloko vykdymą ir žiniatinklio fragmentus, gali pagreitinti jūsų ciklą. Beje, Sider.AI siūlo darbalaukio patirtį, pritaikytą inžinieriams – patogu fiksuoti etaloninius testus, išbandyti raginimus ir tvarkyti užrašus optimizuojant TensorRT-LLM konvejerį. Kiti veiksmai kontrolinis sąrašas
- Perskaitykite oficialų greito paleidimo vadovą, kad patvirtintumėte savo aplinką.
- Patvirtinkite CUDA/TensorRT suderinamumą palaikymo matricoje.
- Vykdykite variklių kūrimo vadovą ir pirmiausia pasirinkite FP16.
- Jei aptarnaujate per TGI, iš anksto kompiliuokite variklius ir sukonfigūruokite TRT-LLM vidinę sąsają.
- Pasirinktinai peržiūrėkite pamokos stiliaus apžvalgą, skirtą Hugging Face modeliams, pvz., BLOOM.
Pagrindinės išvados
- TensorRT-LLM kompiliuoja jūsų Transformer į GPU gimtąjį variklį, kad užtikrintų maksimalų pralaidumą ir mažesnę delsą.
- Pradėkite nuo FP16, įgalinkite puslapinį KV talpyklą ir išmatuokite. Tada ištirkite INT8/FP8, kad pasiektumėte didesnį greitį.
- Varikliai yra specifiniai GPU ir konfigūracijai; kurkite kiekvienam diegimo tikslui.
- Gamybai susiekite variklius su tvirtu aptarnavimo sluoksniu (pvz., TGI) ir stebėkite TTFT, pralaidumą ir kokybę.
DUK
1 klausimas: kaip teisingai įdiegti ir nustatyti TensorRT-LLM?
Naudokite konteinerį su atitinkančiu CUDA/TensorRT arba vadovaukitės oficialiu greito paleidimo vadovu ir palaikymo matrica, kad išvengtumėte versijų neatitikimų. Prieš kompiliuodami variklius, patikrinkite GPU tvarkykles ir kūrimo įrankius.
2 klausimas: kaip naudoti TensorRT-LLM su Hugging Face modeliais?
Atsisiųskite modelį ir tokenizatorių, patvirtinkite palaikymą ir, jei reikia, konvertuokite prieš kurdami variklį. Jei aptarnaujate su TGI, kompiliuokite variklius savo GPU ir nukreipkite vidinę sąsają į variklio katalogą.
3 klausimas: ar turėčiau pasirinkti FP16, FP8 arba INT8 TensorRT-LLM?
Pradėkite nuo FP16, kad užtikrintumėte stabilumą, tada išbandykite FP8/INT8, kad padidintumėte pralaidumą. Po kvantavimo visada patvirtinkite užduoties tikslumą.
4 klausimas: ar galiu aptarnauti TensorRT-LLM per HTTP?
A: Taip. Galite naudoti Python/C++ tiesiogiai arba aptarnauti per Hugging Face TGI TRT-LLM vidinę sąsają, kad sukurtumėte keičiamo dydžio, gamybai paruoštus API su srautiniu perdavimu.
5 klausimas: kokie yra dažni našumo trikdžiai naudojant TensorRT-LLM?
Tokenizatoriaus pridėtinės išlaidos, neoptimalus paketų kūrimas ir puslapinio KV talpyklos trūkumas yra dažnos problemos. Sureguliuokite paketų dydžius, įgalinkite CUDA grafikus ir stebėkite TTFT, palyginti su bendru žodžių per sekundę skaičiumi.