AI-modeller og platforme

TensorRT-LLM: En komplet vejledning til optimering af stor sprogmodeller til maksimal ydelse

mm
FÃļj Unite.AI til dine foretrukne kilder pÃĨ Google

Som efterspÃļrgslen pÃĨ store sprogmodeller (LLM’er) fortsÃĶtter med at stige, er det blevet endnu mere kritisk at sikre hurtig, effektiv og skalerbar inferens. NVIDIA’s TensorRT-LLM trÃĶder til for at imÃļdekomme denne udfordring ved at tilbyde en samling af kraftfulde vÃĶrktÃļjer og optimeringer, der er specifikt designedet til LLM-inferens. TensorRT-LLM tilbyder en imponerende rÃĶkke af ydelsesforbedringer, sÃĨsom kvantificering, kernel-fusion, flyve-batching og multi-GPU-understÃļttelse. Disse fremskridt gÃļr det muligt at opnÃĨ inferenshastigheder op til 8 gange hurtigere end traditionelle CPU-baserede metoder, hvilket ÃĶndrer mÃĨden, vi implementerer LLM’er i produktion pÃĨ.

Denne komplette vejledning vil udforske alle aspekter af TensorRT-LLM, fra dets arkitektur og nÃļglefunktioner til praktiske eksempler pÃĨ implementering af modeller. Uanset om du er en AI-ingeniÃļr, softwareudvikler eller forsker, vil denne vejledning give dig viden om, hvordan du kan udnytte TensorRT-LLM til at optimere LLM-inferens pÃĨ NVIDIA-GPU’er.

Accelererende LLM-inferens med TensorRT-LLM

TensorRT-LLM leverer dramatiske forbedringer i LLM-inferensydelse. IfÃļlge NVIDIA’s tests viser applikationer baseret pÃĨ TensorRT op til 8 gange hurtigere inferenshastigheder i forhold til CPU-baserede platforme. Dette er en afgÃļrende fremskridt i realtidsapplikationer sÃĨsom chatbots, anbefalingssystemer og autonome systemer, der krÃĶver hurtige svar.

Hvordan det fungerer

TensorRT-LLM accelererer inferens ved at optimere neurale netvÃĶrk under implementering ved hjÃĶlp af teknikker som:

  • Kvantificering: Reducerer prÃĶcisionen af vÃĶgte og aktiveringer, hvilket mindsker modelstÃļrrelsen og forbedrer inferenshastigheden.
  • Layer- og tensor-fusion: Fusionerer operationer som aktiveringsfunktioner og matrix-multiplicationer i en enkelt operation.
  • Kernel-justering: VÃĶlger de optimale CUDA-kerner til GPU-beregning, hvilket reducerer eksekveringstiden.

Disse optimeringer sikrer, at dine LLM-modeller fungerer effektivt pÃĨ tvÃĶrs af en bred vifte af implementeringsplatforme – fra hyperskala-datacentre til indbyggede systemer.

Optimering af inferensydelse med TensorRT

Bygget pÃĨ NVIDIA’s CUDA-parallelt programmeringsmodel tilbyder TensorRT hÃļjt specialiserede optimeringer til inferens pÃĨ NVIDIA-GPU’er. Ved at strÃļmline processer som kvantificering, kernel-justering og fusion af tensor-operationer sikrer TensorRT, at LLM’er kan kÃļre med minimal forsinkelse.

Nogle af de mest effektive teknikker inkluderer:

  • Kvantificering: Dette reducerer den numeriske prÃĶcision af modelparametre, mens det opretholder hÃļj nÃļjagtighed, hvilket effektivt forbedrer inferenshastigheden.
  • Tensor-fusion: Ved at fusionere multiple operationer i en enkelt CUDA-kernel minimiserer TensorRT hukommelsesoverhoved og Ãļger gennemstrÃļmningen.
  • Kernel-auto-justering: TensorRT vÃĶlger automatisk den bedste kernel til hver operation, hvilket optimerer inferens til en given GPU.

Disse teknikker giver TensorRT-LLM mulighed for at optimere inferensydelse for dyb-lÃĶring-opgaver sÃĨsom naturlig sprogbehandling, anbefalingssystemer og realtids-videoanalyse.

Accelererende AI-arbejdsbelastninger med TensorRT

TensorRT accelererer dyb-lÃĶring-arbejdsbelastninger ved at inkorporere prÃĶcisionsoptimeringer sÃĨsom INT8 og FP16. Disse reducerede-prÃĶcisions-formater giver mulighed for betydeligt hurtigere inferens, mens de opretholder nÃļjagtigheden. Dette er sÃĶrligt vÃĶrdifuldt i realtids-applikationer, hvor lav forsinkelse er en kritisk krav.

INT8 og FP16-optimeringer er sÃĶrligt effektive i:

  • Video-streaming: AI-baseret video-behandling, sÃĨsom objektdetektion, drager fordel af disse optimeringer ved at reducere tiden til at behandle billeder.
  • Anbefalingssystemer: Ved at accelerere inferens for modeller, der behandler store mÃĶngder af brugerdata, giver TensorRT mulighed for realtids-personalisering i stor mÃĨlestok.
  • Naturlig sprogbehandling (NLP): TensorRT forbedrer hastigheden af NLP-opgaver sÃĨsom tekst-generering, oversÃĶttelse og sammenfattelse, hvilket gÃļr dem egnet til realtids-applikationer.

Implementer, kÃļre og skaler med NVIDIA Triton

NÃĨr din model er blevet optimeret med TensorRT-LLM, kan du let implementere, kÃļre og skalerere den ved hjÃĶlp af NVIDIA Triton Inference Server. Triton er et open-source-software, der understÃļtter dynamisk batching, model-ensembler og hÃļj gennemstrÃļmning. Det giver en fleksibel miljÃļ til at styre AI-modeller i stor mÃĨlestok.

Nogle af de vigtigste funktioner inkluderer:

  • Samtidig model-kÃļrsel: KÃļre multiple modeller samtidigt, hvilket maksimerer GPU-udnyttelse.
  • Dynamisk batching: Kombinerer multiple inferens-anmodninger i en enkelt batch, hvilket reducerer forsinkelse og Ãļger gennemstrÃļmningen.
  • Streaming-audio-/video-input: UnderstÃļtter input-strÃļmme i realtids-applikationer, sÃĨsom live-videoanalyse eller tale-til-tekst-tjenester.

Dette gÃļr Triton til et vÃĶrdifuldt vÃĶrktÃļj til at implementere TensorRT-LLM-optimerede modeller i produktionsmiljÃļer, hvilket sikrer hÃļj skalerbarhed og effektivitet.

Kernefunktioner i TensorRT-LLM til LLM-inferens

Åben kilde Python-API

TensorRT-LLM tilbyder et hÃļjt modulÃĶrt og ÃĨben kilde Python-API, der simplificerer processen med at definere, optimere og kÃļre LLM’er. API’et giver udviklere mulighed for at oprette brugerdefinerede LLM’er eller modificere forudindstillede til at tilpasse deres behov, uden at krÃĶve dyb viden om CUDA eller dyb-lÃĶring-rammer.

Flyve-batching og pagineret opmÃĶrksomhed

En af de mest fremtrÃĶdende funktioner i TensorRT-LLM er Flyve-batching, der optimerer tekst-generering ved at behandle multiple anmodninger samtidigt. Denne funktion minimiserer ventetiden og forbedrer GPU-udnyttelse ved at dynamisk batche sekvenser.

Derudover sikrer Pagineret opmÃĶrksomhed, at hukommelsesbrug forbliver lav, selv nÃĨr der behandles lange input-sekvenser. I stedet for at allokkere kontinuert hukommelse til alle tokens, deler pagineret opmÃĶrksomhed hukommelsen i “sider”, der kan genbruges dynamisk, hvilket forhindrer hukommelses-fragmentering og forbedrer effektiviteten.

Multi-GPU og multi-node-inferens

Til stÃļrre modeller eller mere komplekse arbejdsbelastninger understÃļtter TensorRT-LLM multi-GPU og multi-node-inferens. Denne funktion giver mulighed for at distribuere model-beregninger over flere GPU’er eller noder, hvilket forbedrer gennemstrÃļmningen og reducerer den samlede inferenstid.

FP8-understÃļttelse

Med FP8 (8-bit flydende punkt) udnytter TensorRT-LLM NVIDIA’s H100-GPU’er til at konvertere model-vÃĶgte til dette format til optimeret inferens. FP8 giver mulighed for reduceret hukommelsesforbrug og hurtigere beregning, hvilket er sÃĶrligt nyttigt i stor-skala-deploymenter.

TensorRT-LLM-arkitektur og komponenter

At forstÃĨ arkitekturen i TensorRT-LLM vil hjÃĶlpe dig med at udnytte dets muligheder bedre til LLM-inferens. Lad os bryde ned de vigtigste komponenter:

Model-definition

TensorRT-LLM giver dig mulighed for at definere LLM’er ved hjÃĶlp af et simpelt Python-API. API’et konstruerer en graf-reprÃĶsentation af modellen, hvilket gÃļr det lettere at styre de komplekse lag involveret i LLM-arkitekturer sÃĨsom GPT eller BERT.

VÃĶgt-binding

FÃļr modellen kan kompileres, skal vÃĶgtene (eller parametrene) bindes til netvÃĶrket. Dette skridt sikrer, at vÃĶgtene er integreret i TensorRT-motoren, hvilket giver mulighed for hurtig og effektiv inferens. TensorRT-LLM giver ogsÃĨ mulighed for vÃĶgt-opdateringer efter kompilering, hvilket tilfÃļjer fleksibilitet for modeller, der krÃĶver hyppige opdateringer.

MÃļnster-matching og fusion

Operation-fusion er en anden kraftfuld funktion i TensorRT-LLM. Ved at fusionere multiple operationer (f.eks. matrix-multiplicationer med aktiveringsfunktioner) i en enkelt CUDA-kernel minimiserer TensorRT den overhÃĶng, der er forbundet med multiple kernel-lanceringer. Dette reducerer hukommelses-overfÃļrsler og forbedrer inferenshastigheden.

Plugins

For at udvide TensorRT’s muligheder kan udviklere skrive plugins – brugerdefinerede kerner, der giver mulighed for specifikke optimeringer eller operationer, der ikke er dÃĶkket af standard-TensorRT-biblioteket.

For eksempel er Flash-Attention-plugin’en en kendt brugerdefineret kernel, der optimerer multi-head-opmÃĶrksomheds-lag i Transformer-baserede modeller. Ved at bruge denne plugin kan udviklere opnÃĨ betydelige hastighedsforbedringer i opmÃĶrksomheds-beregning – en af de mest ressource-krÃĶvende komponenter i LLM’er.

Benchmarks: TensorRT-LLM-ydelsesforbedringer

TensorRT-LLM demonstrerer betydelige ydelsesforbedringer for LLM-inferens pÃĨ tvÃĶrs af forskellige NVIDIA-GPU’er. Her er en sammenligning af inferenshastighed (mÃĨlt i tokens per sekund) ved hjÃĶlp af TensorRT-LLM pÃĨ forskellige NVIDIA-GPU’er:

Model PrÃĶcision Input/Output LÃĶngde H100 (80GB) A100 (80GB) L40S FP8
GPTJ 6B FP8 128/128 34,955 11,206 6,998
GPTJ 6B FP8 2048/128 2,800 1,354 747
LLaMA v2 7B FP8 128/128 16,985 10,725 6,121
LLaMA v3 8B FP8 128/128 16,708 12,085 8,273

Disse benchmarks viser, at TensorRT-LLM giver betydelige ydelsesforbedringer, isÃĶr for lÃĶngere sekvenser.

Praktisk: Installation og bygning af TensorRT-LLM

Trin 1: Opret en container-miljÃļ

Til let brug tilbyder TensorRT-LLM Docker-billeder til at oprette en kontrolleret miljÃļ til bygning og kÃļrsel af modeller.

[kode sprog=”PYTHON”]
docker build –pull \
–target devel \
–file docker/Dockerfile.multi \
–tag tensorrt_llm/devel:latest .

[/kode]

Trin 2: KÃļr containern

KÃļr udviklingscontainern med adgang til NVIDIA-GPU’er:

[kode sprog=”PYTHON”]
docker run –rm -it \
–ipc=host –ulimit memlock=-1 –ulimit stack=67108864 –gpus=all \
–volume ${PWD}:/code/tensorrt_llm \
–workdir /code/tensorrt_llm \
tensorrt_llm/devel:latest

[/kode]

Trin 3: Byg TensorRT-LLM fra kilde

Inde i containern kompilÃĐr TensorRT-LLM med fÃļlgende kommando:

[kode sprog=”PYTHON”]
python3 ./scripts/build_wheel.py –trt_root /usr/local/tensorrt
pip install ./build/tensorrt_llm*.whl

[/kode]

Dette giver dig mulighed for at integrere TensorRT-LLM-optimeringer i dine brugerdefinerede C++-projekter, hvilket sikrer effektiv inferens, selv i lav-niveau- eller hÃļj-ydelses-miljÃļer.

Trin 4: Link TensorRT-LLM C++-runtime

NÃĨr du integrerer TensorRT-LLM i dine C++-projekter, sikre, at dine projekters include-stier peger pÃĨ cpp/include-mappen. Denne mappe indeholder de stabile, understÃļttede API-overskrifter. TensorRT-LLM-bibliotekerne er linket som en del af din C++-kompilering.

For eksempel kan din projekts CMake-konfiguration inkludere:

[kode sprog=”PYTHON”]
include_directories(${TENSORRT_LLM_PATH}/cpp/include)
link_directories(${TENSORRT_LLM_PATH}/cpp/build/tensorrt_llm)
target_link_libraries(your_project tensorrt_llm)

[/kode]

Denne integration giver dig mulighed for at udnytte TensorRT-LLM-optimeringerne i dine brugerdefinerede C++-projekter, hvilket sikrer effektiv inferens, selv i lav-niveau- eller hÃļj-ydelses-miljÃļer.

Avancerede TensorRT-LLM-funktioner

TensorRT-LLM er mere end bare en optimeringsbibliotek; det inkluderer flere avancerede funktioner, der hjÃĶlper med at tackle stor-skala-deploymenter af LLM’er. Herunder udforsker vi nogle af disse funktioner i detaljer:

1. Flyve-batching

Traditionel batching indebÃĶrer at vente, til en batch er fuldt samlet, fÃļr den behandles, hvilket kan forÃĨrsage forsinkelser. Flyve-batching ÃĶndrer dette ved at starte inferens dynamisk pÃĨ fÃĶrdige anmodninger inden for en batch, mens den samtidig indsamler andre anmodninger. Dette forbedrer den samlede gennemstrÃļmning ved at minimere inaktiv tid og forbedre GPU-udnyttelse.

Denne funktion er sÃĶrligt vÃĶrdifuld i realtids-applikationer, sÃĨsom chatbots eller tale-assistenter, hvor respons-tiden er kritisk.

2. Pagineret opmÃĶrksomhed

Pagineret opmÃĶrksomhed er en hukommelsesoptimeringsteknik til at hÃĨndtere lange input-sekvenser. I stedet for at krÃĶve kontinuert hukommelse til alle tokens i en sekvens (hvilket kan fÃļre til hukommelses-fragmentering), giver pagineret opmÃĶrksomhed mulighed for, at modellen kan splitte nÃļgle-vÃĶrdi-cache-data i “sider” af hukommelse. Disse sider allokkieres og deallokkieres dynamisk, hvilket optimerer hukommelsesbrug.

Pagineret opmÃĶrksomhed er kritisk til at hÃĨndtere lange sekvenslÃĶngder og reducere hukommelses-overhÃĶng, isÃĶr i generative modeller sÃĨsom GPT og LLaMA.

3. Brugerdefinerede plugins

TensorRT-LLM giver dig mulighed for at udvide dets funktioner med brugerdefinerede plugins. Plugins er brugerdefinerede kerner, der giver mulighed for specifikke optimeringer eller operationer, der ikke er dÃĶkket af standard-TensorRT-biblioteket.

For eksempel er Flash-Attention-plugin’en en kendt brugerdefineret kernel, der optimerer multi-head-opmÃĶrksomheds-lag i Transformer-baserede modeller. Ved at bruge denne plugin kan udviklere opnÃĨ betydelige hastighedsforbedringer i opmÃĶrksomheds-beregning – en af de mest ressource-krÃĶvende komponenter i LLM’er.

4. FP8-prÃĶcision pÃĨ NVIDIA H100

Med FP8-prÃĶcision udnytter TensorRT-LLM NVIDIA’s seneste hardware-innovationer i H100 Hopper-arkitekturen. FP8 reducerer hukommelses-footprinten af LLM’er ved at gemme vÃĶgte og aktiveringer i en 8-bit flydende punkt-format, hvilket resulterer i hurtigere beregning uden at ofre meget nÃļjagtighed. TensorRT-LLM kompilÃĐrer automatisk modeller til at udnytte optimerede FP8-kerner, hvilket yderligere accelererer inferens-tider.

Dette gÃļr TensorRT-LLM til et ideelt valg til stor-skala-deploymenter, der krÃĶver top-ydelse og energi-effektivitet.

Eksempel: Implementering af TensorRT-LLM med Triton Inference Server

Til produktions-deploymenter giver NVIDIA’s Triton Inference Server en robust platform til at styre modeller i stor mÃĨlestok. I dette eksempel vil vi demonstrere, hvordan du kan implementere en TensorRT-LLM-optimeret model ved hjÃĶlp af Triton.

Trin 1: Konfigurer model-repositoriet

Opret et model-repositorium til Triton, der vil indeholde dine TensorRT-LLM-model-filer. For eksempel, hvis du har kompilert en GPT2-model, kan din mappe-struktur se sÃĨledes ud:

[kode sprog=”BASH”]
mkdir -p model_repository/gpt2/1
cp ./trt_engine/gpt2_fp16.engine model_repository/gpt2/1/

[/kode]

Trin 2: Opret Triton-konfigurationsfilen

I samme model_repository/gpt2/-mappe opret en konfigurationsfil med navnet config.pbtxt, der fortÃĶller Triton, hvordan den skal indlÃĶse og kÃļre modellen. Her er en grundlÃĶggende konfiguration til TensorRT-LLM:

[kode sprog=”PYTHON”]
navn: “gpt2”
platform: “tensorrt_llm”
max_batch_stÃļrrelse: 8

indgang [
{
navn: “input_ids”
data_type: TYPE_INT32
dims: [-1]
}
]

udgang [
{
navn: “logits”
data_type: TYPE_FP32
dims: [-1, -1]
}
]

[/kode]

Trin 3: Start Triton-serveren

Brug fÃļlgende Docker-kommando til at starte Triton med model-repositoriet:

[kode sprog=”PYTHON”]
docker run –rm –gpus all \
-v $(pwd)/model_repository:/models \
nvcr.io/nvidia/tritonserver:23.05-py3 \
tritonserver –model-repository=/models

[/kode]

Trin 4: Send inferens-anmodninger til Triton

NÃĨr Triton-serveren er i gang, kan du sende inferens-anmodninger til den ved hjÃĶlp af HTTP eller gRPC. For eksempel kan du bruge curl til at sende en anmodning:

[kode sprog=”PYTHON”]
curl -X POST http://localhost:8000/v2/models/gpt2/infer -d ‘{
“indgange”: [
{“navn”: “input_ids”, “form”: [1, 128], “datatype”: “INT32”, “data”: [[101, 234, 1243]]}
]
}’

[/kode]

Triton vil behandle anmodningen ved hjÃĶlp af TensorRT-LLM-motoren og returnere logits som output.

Bedste praksis for optimering af LLM-inferens med TensorRT-LLM

For at fuldt udnytte kraften af TensorRT-LLM er det vigtigt at fÃļlge bedste praksis under bÃĨde model-optimering og implementering. Her er nogle nÃļgle-tips:

1. Profiler din model fÃļr optimering

FÃļr du anvender optimeringer sÃĨsom kvantificering eller kernel-fusion, brug NVIDIA’s profiler-vÃĶrktÃļjer (sÃĨsom Nsight Systems eller TensorRT Profiler) til at forstÃĨ de nuvÃĶrende flaskehalse i din models kÃļrsel. Dette giver dig mulighed for at mÃĨlrette specifikke omrÃĨder til forbedring, hvilket resulterer i mere effektive optimeringer.

2. Brug blandet prÃĶcision for optimal ydelse

NÃĨr du optimerer modeller med TensorRT-LLM, giver brug af blandet prÃĶcision (en kombination af FP16 og FP32) en betydelig hastighedsforbedring uden en betydelig tab af nÃļjagtighed. For den bedste balance mellem hastighed og nÃļjagtighed overvej at bruge FP8, hvor det er tilgÃĶngeligt, isÃĶr pÃĨ H100-GPU’er.

3. Udnyt pagineret opmÃĶrksomhed til lange sekvenser

Til opgaver, der involverer lange input-sekvenser, sÃĨsom dokument-sammenfattelse eller multi-turn-samtaler, skal du altid aktivere pagineret opmÃĶrksomhed for at optimere hukommelsesbrug. Dette reducerer hukommelses-overhÃĶng og forhindrer out-of-memory-fejl under inferens.

4. Finjuster parallelisme for multi-GPU-sÃĶt

NÃĨr du implementerer LLM’er pÃĨ tvÃĶrs af multiple GPU’er eller noder, er det afgÃļrende at finjustere indstillingerne for tensor-parallelisme og pipeline-parallelisme til at matche din specifikke arbejdsbelastning. Korrekt konfiguration af disse modi kan fÃļre til betydelige ydelsesforbedringer ved at distribuere den beregningsmÃĶssige belastning jÃĶvnt over GPU’er.

Konklusion

TensorRT-LLM reprÃĶsenterer en paradigmeskift i optimering og implementering af store sprogmodeller. Med dets avancerede funktioner sÃĨsom kvantificering, operation-fusion, FP8-prÃĶcision og multi-GPU-understÃļttelse giver TensorRT-LLM mulighed for, at LLM’er kan kÃļre hurtigere og mere effektivt pÃĨ NVIDIA-GPU’er. Uanset om du arbejder med realtids-chat-applikationer, anbefalingssystemer eller stor-skala-sprogmodeller, giver TensorRT-LLM de vÃĶrktÃļjer, der er nÃļdvendige til at udvide ydelsesgrÃĶnserne.

Denne vejledning har fÃļrt dig gennem opsÃĶtning af TensorRT-LLM, optimering af modeller med dets Python-API, implementering pÃĨ Triton Inference Server og anvendelse af bedste praksis for effektiv inferens. Med TensorRT-LLM kan du accelerere dine AI-arbejdsbelastninger, reducere forsinkelse og levere skalerbare LLM-lÃļsninger til produktionsmiljÃļer.

Yderligere information kan findes i den officielle TensorRT-LLM-dokumentation og Triton Inference Server-dokumentation.

Jeg har brugt de sidste fem ÃĨr pÃĨ at dykke ned i den fascinerende verden af Machine Learning og Deep Learning. Min passion og ekspertise har fÃļrt mig til at bidrage til over 50 forskellige software-ingeniÃļrprojekter, med en sÃĶrlig fokus pÃĨ AI/ML. Min fortsatte nysgerrighed har ogsÃĨ fÃļrt mig mod Natural Language Processing, et felt jeg er ivrig efter at udforske yderligere.