Uvod: Zakaj je TensorRT-LLM vreden vašega vikend projekta
Če ste kdaj opazovali, da je vaša grafična kartica obremenjena le 60 %, medtem ko se vaš LLM počasi izvaja, veste, da je na voljo še brezplačna zmogljivost. TensorRT-LLM to rezervo spremeni v pretočnost: združena jedra, stranična pozornost, kvantizacija in optimizacije na ravni grafa, ki zmanjšujejo zakasnitev in povečujejo število žetonov na sekundo. V tem priročniku bomo šli od začetka do konca – od namestitve do izdelave pogona in strežbe – tako da boste lahko samozavestno uvedli hitrejše in cenejše sklepanje na grafičnih karticah NVIDIA.
Ta vadnica je napisana v praktičnem slogu, usmerjenem v rešitve. Uporabili bomo strukturo, ki temelji na vprašanjih, z ukazi, ki jih je mogoče kopirati, pogostimi pastmi in točkami odločanja za FP16 proti INT8, paketno obdelavo in strategije predpomnilnika KV. Sklicevali se bomo tudi na uradne vire za globlje potopise, kjer je to primerno.
Kaj se boste naučili
- Kako nastaviti okolje za TensorRT-LLM
- Kako pripraviti model (iz Hugging Face ali kontrolnih točk) za izdelavo pogona
- Kako izdelati pogone FP16/INT8 in prilagoditi zmogljivost
- Kako izvajati sklepanje prek Python/C++ in HTTP strežbe
- Kako meriti zmogljivost, paketno obdelovati in odpravljati napake
Komu je to namenjeno
- Strokovnjakom za strojno učenje, ki uvajajo LLM-je na grafičnih karticah NVIDIA
- Praktikom, ki optimizirajo stroške/zakasnitev v proizvodnji
- Razvijalcem, ki prehajajo iz PyTorch Transformers v visoko optimizirano sklepanje
- Kaj je TensorRT-LLM in kdaj ga uporabiti?
TensorRT-LLM je sklad za sklepanje, ki prevede modele Transformer v visoko optimizirane grafične "pogone." V primerjavi s surovim PyTorchom ali splošnimi izvajalnimi okolji običajno dobite:
- Manjšo zakasnitev na žeton
- Večjo pretočnost pri velikih velikostih paketov
- Boljšo učinkovitost pomnilnika s straničnim predpomnilnikom KV in kvantizacijo
Uporabite ga, ko delate na grafičnih karticah NVIDIA in vam je mar za zmogljivost proizvodne stopnje. Posebej je dragocen za LLM-je samo za dekoder (npr. Llama, Mistral, Phi, BLOOM) in scenarije, kot so klepetalnice, RAG in storitve API z visokim QPS.
- Predpogoji in nastavitev okolja
Osnovne zahteve
- Grafična kartica NVIDIA z nedavno računalniško zmogljivostjo (npr. Ampere, Ada, Hopper)
- Ujemajoče se različice CUDA in TensorRT, plus ustrezni gonilniki
- Python 3.8+ in orodja za gradnjo, če prevajate iz izvorne kode
Opomba o različicah: Pred namestitvijo vedno preverite uradno matriko podpore TensorRT in opombe o izdaji za združljive različice in funkcije CUDA/TensorRT.
Možnosti hitrega začetka
- Vsebniki: Uporabite vsebnike NVIDIA s prednameščenimi CUDA/TensorRT – najhitrejši način, da se izognete neusklajenostim različic.
- Izvorna namestitev: Sledite uradnemu hitremu začetku za osnovni TensorRT, nato pa nanj naložite TensorRT-LLM.
- Priprava vašega modela (Hugging Face → TensorRT-LLM)
Pogosti viri
- Hugging Face: Llama/Mistral/BLOOM različice
- Lokalne kontrolne točke: Fino uglaševanje po meri
Kontrolni seznam za pripravo
- Potrdite, da arhitekturo modela podpira TensorRT-LLM.
- Prenesite uteži modela in tokenizer.
- Po potrebi pretvorite safetensors v pričakovane formate ali izvozite v ONNX prek skriptov projekta.
Nasvet: Uradni hitri začetek pogosto vključuje skripte za pridobivanje modelov in pretvorbo v pravo vmesno obliko. Za vodnik v slogu vadnice s primerom BLOOM si oglejte Dellov vodnik o pretvorbi LLM-jev Hugging Face v TensorRT-LLM.
- Izdelava pogona TensorRT-LLM (srce delovnega procesa)
Pojmi, ki bi jih morali poznati
- Pogon: Prevedeni, strojno optimizirani artefakt, ki ga naložite za sklepanje.
- Natančnost: FP16/BF16 za močno osnovo; INT8 ali FP8 za večjo pretočnost, če natančnost drži.
- Predpomnilnik KV: Stranični predpomnilnik KV zmanjšuje fragmentacijo pomnilnika in povečuje zmogljivost dolgega konteksta.
Koraki na visoki ravni
- Določite konfiguracijo gradnje: največjo serijo, dolžine zaporedij, natančnost, kvantizacijo in arhitekturo GPU.
- Pokažite na svoje kontrolne točke modela in tokenizer.
- Prevedite pogon za svoj ciljni GPU.
Referenca: Izdelava pogonov z uradno dokumentacijo in konfiguracijami. Če nameravate streči prek Hugging Face Text Generation Inference (TGI), si oglejte opombe o zaledju TRT-LLM o predhodnem prevajanju pogonov na arhitekturo in konfiguracijo GPU.
Začetno drevo odločanja
- Prva gradnja: FP16, srednja največja dolžina zaporedja (npr. 4K–8K), zmerna serija (npr. 4–8). Preverite pravilnost.
- Povečanje: Omogočite stranični predpomnilnik KV. Povečajte največje velikosti serije/snopa. Eksperimentirajte s FP8 ali INT8.
- Proizvodnja: Pripnite konfiguracije, ki izpolnjujejo SLO-je zakasnitve/QPS; ustvarite ločene pogone za vsak scenarij (kratka pozivna sporočila proti dolgemu kontekstu).
- Izvajanje sklepanja: Python, C++ in HTTP
Imate tri pogoste poti:
- Python: Hitro prototipiranje, idealno za cevovode in zvezke.
- C++: Največja zmogljivost, integracija v izvorne storitve.
- HTTP strežba: Uporabite TGI z zaledjem TRT-LLM ali primere strežbe izvajalnega okolja za razširljivo uvajanje.
Zaledje Hugging Face TGI
- Predhodno prevedite pogone za natančno nastavitev GPU/natančnosti.
- Zaženite TGI z zaledjem TRT-LLM in ga usmerite v imenik pogonov.
- Pošiljajte zahteve prek poti /generate ali združljivih s openai in jih razširite z replikami.
- Nastavitev zmogljivosti, ki dejansko premakne iglo
Kje začeti
- Natančnost: FP16 je vaša zanesljiva osnova. INT8/FP8 lahko še zmanjšata zakasnitev, vendar preverite kakovost.
- Paketno obdelovanje: Dinamično paketno obdelovanje in združevanje zahtev dramatično povečata pretočnost; izmerite zakasnitev repa.
- Stranični predpomnilnik KV: Bistven za dolge pozive in pretočno predvajanje; zmanjšuje pritisk na pomnilnik.
- Največje dolžine: Večje največje dolžine zaporedij povečajo velikost pogona in lahko zmanjšajo uro; izdelajte pogone, ki so primerni za namen.
Praktični nasveti
- Merite zmogljivost z realističnimi pozivi: ločeno izmerite fazi predizpolnitve in dekodiranja.
- Pretočnost tokenizerja je pomembna: to storite na GPU, če ga vaš okvir podpira.
- Bodite pozorni na grafe CUDA/združena jedra: zmanjšujejo obremenitev CPU in zakasnitev zagona jedra.
- Za več GPU: Dajte prednost paralelizmu tenzorjev ali paralelizmu cevovoda glede na velikost modela in zahteve glede zakasnitve.
- Merjenje zmogljivosti: dokažite zmago
Kontrolni seznam
- Žetoni/sek (pretočnost) pri ciljnih velikostih serije
- Čas do prvega žetona (TTFT) in zakasnitev od konca do konca na zahtevo
- Uporaba GPU in rezerva pomnilnika pod največjim QPS
- Natančnost: BLEU/zmedenost ali evalvacije, specifične za nalogo, če kvantizirate
Uporabite dosledna semena in nize pozivov v vseh osnovnih konfiguracijah (PyTorch proti TensorRT-LLM), da preverite pravilnost in delte.
- Odpravljanje napak in pogoste pasti
- Neusklajene različice: Uskladite različice CUDA, gonilnikov in TensorRT glede na uradno matriko podpore.
- Pogon ni veljaven za napravo: Ponovno zgradite pogone posebej za svojo arhitekturo GPU.
- OOM med gradnjo: Zmanjšajte največjo dolžino zaporedja ali serijo; omogočite stranični KV; razmislite o kvantizaciji.
- Padec natančnosti z INT8: Umerite na podatkih, ki so reprezentativni za domeno; poskusite s kvantizacijo na tenzor in preverite občutljivost po plasteh.
- Počasen TTFT kljub visoki pretočnosti: Prilagodite stranični predpomnilnik KV, omogočite grafe CUDA in preverite ozka grla tokenizerja.
- Primer delovnega procesa: od modela Hugging Face do proizvodnje
Scenarij: Želite model klepeta z nizko zakasnitvijo na A100.
- Izberite model: različica 7B–13B Llama/Mistral.
- Priprava: Prenesite uteži in tokenizer; preverite, ali je arhitektura podprta.
- Prvi pogon: FP16, največji vhod 4K, največji izhod 1K, serija 4; stranični KV vključen.
- Preverjanje: Primerjajte izhode z vašo osnovno konfiguracijo PyTorch.
- Optimizacija: Poskusite z INT8 ali FP8; izmerite TTFT in pretočnost. Povečajte serijo za strežniški način.
- Strežba: Uporabite zaledje TGI TRT-LLM; razširite replike za uravnotežilnikom obremenitve; dodajte pretočno predvajanje.
- Načrtovanje stroškov in zmogljivosti
- Pretočnost na GPU: Izmerite žetone/sek pri ciljnem kontekstu. Uporabite to za izračun zmogljivosti QPS.
- Cena na 1 milijon žetonov: S hitrejšim dekodiranjem in večjo izrabo serije TRT-LLM običajno zniža stroške na žeton.
- Pravilno dimenzionirani pogoni: Zgradite ločene pogone za kratke in dolge oblike, da zmanjšate izgubo rezerve.
- Pogosta vprašanja v vodniku
V: Ali moram ponovno zgraditi pogone za vsako vrsto GPU?
A: Da. Pogoni so specifični za strojno opremo. Zgradite za vsako arhitekturo GPU, na kateri boste uvajali.
V: Kako INT8 vpliva na kakovost?
A: Odvisno je od modela in naloge. Z dobrimi podatki za umerjanje mnogi modeli ohranijo skoraj FP16 kakovost, hkrati pa zagotavljajo znatne pospešitve.
V: Ali lahko izvajam dolge kontekste (npr. 32K)?
A: Da, vendar natančno načrtujte pomnilnik. Uporabite stranični predpomnilnik KV in prilagodite velikosti blokov; upoštevajte, da daljši konteksti povečajo odtis pogona in stroške dekodiranja.
V: Ali je TGI obvezen?
A: Ne. Python/C++ lahko izvajate neposredno. TGI je priročen za HTTP API-je proizvodne stopnje s samodejnim prilagajanjem in beleženjem.
Vredno je omeniti za pospešitev delovnega procesa
Če pogosto ponavljate pozive, primerjate izhode med pogoni ali dokumentirate poskuse, vam lahko stranski pomočnik AI, ki podpira hitre poskuse, izvajanje blokov kode in spletne izrezke, pospeši zanko. Mimogrede, Sider.AI ponuja namizno izkušnjo, prilagojeno inženirjem – priročna za zajemanje merilnih podatkov, testiranje pozivov in organiziranje vaših zapiskov, medtem ko optimizirate svoj cevovod TensorRT-LLM. Kontrolni seznam naslednjih korakov
- Preberite uradni hitri začetek, da preverite svoje okolje.
- Potrdite združljivost CUDA/TensorRT v matrici podpore.
- Sledite vodniku za izdelavo pogona in najprej izberite FP16.
- Če strežete prek TGI, predhodno prevedite pogone in konfigurirajte zaledje TRT-LLM.
- Po želji si oglejte vodnik v slogu vadnice za modele Hugging Face, kot je BLOOM.
Ključni zaključki
- TensorRT-LLM prevede vaš Transformer v pogon, ki je izvorni za GPU, za največjo pretočnost in manjšo zakasnitev.
- Začnite s FP16, omogočite stranični predpomnilnik KV in merite. Nato raziščite INT8/FP8 za več hitrosti.
- Pogoni so specifični za GPU in konfiguracijo; zgradite za vsak cilj uvajanja.
- Za proizvodnjo združite pogone z robustno plastjo strežbe (npr. TGI) in spremljajte TTFT, pretočnost in kakovost.
Pogosta vprašanja
V1: Kako pravilno namestim in nastavim TensorRT-LLM?
Uporabite vsebnik z ujemajočim se CUDA/TensorRT ali sledite uradnemu hitremu začetku in matrici podpore, da se izognete odstopanju različic. Pred prevajanjem pogonov preverite gonilnike GPU in orodja za gradnjo.
V2: Kako uporabljati TensorRT-LLM z modeli Hugging Face?
Prenesite model in tokenizer, potrdite podporo in po potrebi pretvorite pred izdelavo pogona. Če strežete s TGI, prevedite pogone za svoj GPU in usmerite zaledje v imenik pogonov.
V3: Ali naj izberem FP16, FP8 ali INT8 za TensorRT-LLM?
Začnite s FP16 za stabilnost, nato poskusite s FP8/INT8, da povečate pretočnost. Po kvantizaciji vedno preverite natančnost naloge.
V4: Ali lahko strežem TensorRT-LLM prek HTTP?
Da. Python/C++ lahko uporabljate neposredno ali strežete prek zaledja TRT-LLM Hugging Face TGI za razširljive API-je, pripravljene za proizvodnjo, s pretočnim predvajanjem.
V5: Katera so pogosta ozka grla zmogljivosti pri uporabi TensorRT-LLM?
Obremenitev tokenizerja, neoptimalno paketno obdelovanje in pomanjkanje straničnega predpomnilnika KV so pogoste težave. Prilagodite velikosti paketov, omogočite grafe CUDA in spremljajte TTFT v primerjavi s skupnim številom žetonov na sekundo.