Umělá inteligence

TensorRT-LLM: Komplexní průvodce optimalizací inference velkých jazykových modelů pro maximální výkon

mm
TensorRT-LLM NVIDEA quantization, operation fusion, FP8 precision, and multi-GPU support

Jak poptávka po velkých jazykových modelech (LLM) dále roste, zajištění rychlé, efektivní a škálovatelné inference se stalo více než kdy dříve kritickým. NVIDIA’s TensorRT-LLM přichází, aby tuto výzvu řešil, poskytující sadu mocných nástrojů a optimalizací speciálně navržených pro inference LLM. TensorRT-LLM nabízí působivou škálu vylepšení výkonu, jako je kvantizace, fúze jader, batchování za letu a podpora více GPU. Tyto pokroky umožňují dosáhnout rychlostí inference až 8x rychlejších než tradiční metody založené na CPU, měnící způsob, jakým nasazujeme LLM ve výrobním prostředí.

Tento komplexní průvodce prozkoumá všechny aspekty TensorRT-LLM, od jeho architektury a klíčových funkcí po praktické příklady nasazení modelů. Bez ohledu na to, zda jste inženýr umělé inteligence, softwarový vývojář nebo výzkumník, tento průvodce vám poskytne znalosti, aby jste mohli využít TensorRT-LLM pro optimalizaci inference LLM na GPU NVIDIA.

Zrychlení inference LLM s TensorRT-LLM

TensorRT-LLM dodává dramatická vylepšení výkonu inference LLM. Podle testů NVIDIA jsou aplikace založené na TensorRT až 8x rychlejší než platformy pouze na CPU. To je zásadní pokrok v reálných aplikacích, jako jsou chatboti, systémy doporučení a autonomní systémy, které vyžadují rychlé odpovědi.

Jak to funguje

TensorRT-LLM zrychluje inference optimalizací neuronových sítí během nasazení pomocí technik, jako je:

  • Kvantizace: Snížení přesnosti váh a aktivací, zmenšení velikosti modelu a zlepšení rychlosti inference.
  • Fúze vrstev a tensorů: Sloučení operací, jako jsou aktivační funkce a maticové násobení, do jediné operace.
  • Ladění jader: Výběr optimálních CUDA jader pro výpočet na GPU, snižující dobu provádění.

Tyto optimalizace zajišťují, že vaše modely LLM fungují efektivně napříč širokým spektrem platforem nasazení – od hyperscale datových center po vestavěné systémy.

Optimalizace výkonu inference s TensorRT

Postavený na CUDA paralelním programovacím modelu NVIDIA, TensorRT poskytuje vysoce specializované optimalizace pro inference na GPU NVIDIA. Streamlinováním procesů, jako je kvantizace, ladění jader a fúze tensorových operací, TensorRT zajišťuje, že LLM mohou běžet s minimální latencí.

Některé z nejúčinnějších technik zahrnují:

  • Kvantizace: Toto snižuje numerickou přesnost modelových parametrů, zatímco udržuje vysokou přesnost, efektivně zrychluje inference.
  • Fúze tensorů: Fúzováním více operací do jediného CUDA kernelu minimalizuje TensorRT paměťový overhead a zvyšuje propustnost.
  • Automatické ladění jader: TensorRT automaticky vybírá nejlepší jádro pro každou operaci, optimalizuje inference pro konkrétní GPU.

Tyto techniky umožňují TensorRT-LLM optimalizovat výkon inference pro úkoly hlubokého učení, jako je zpracování přirozeného jazyka, systémy doporučení a analýza videa v reálném čase.

Zrychlení úloh umělé inteligence s TensorRT

TensorRT zrychluje úlohy hlubokého učení začleněním optimalizací přesnosti, jako je INT8 a FP16. Tyto snížené přesnosti umožňují výrazně rychlejší inference, zatímco zachovávají přesnost. To je zvláště cenné v reálných aplikacích, kde je nízká latence kritickým požadavkem.

INT8 a FP16 optimalizace jsou zvláště efektivní v:

  • Proudění videa: Úkoly zpracování videa založené na AI, jako je detekce objektů, profitují z těchto optimalizací snížením času potřebného pro zpracování snímků.
  • Systémy doporučení: Zrychlením inference pro modely, které zpracovávají velké množství uživatelských dat, umožňuje TensorRT personalizaci v reálném čase ve velkém měřítku.
  • Zpracování přirozeného jazyka (NLP): TensorRT zlepšuje rychlost úkolů NLP, jako je generování textu, překlad a shrnutí, činí je vhodné pro aplikace v reálném čase.

Nasazení, spuštění a škálování s NVIDIA Triton

Jakmile je váš model optimalizován pomocí TensorRT-LLM, můžete jej snadno nasadit, spustit a škálovat pomocí NVIDIA Triton Inference Server. Triton je open-source software, který podporuje dynamické batchování, ensembly modelů a vysokou propustnost. Poskytuje flexibilní prostředí pro správu modelů AI ve velkém měřítku.

Některé z klíčových funkcí zahrnují:

  • Současné spuštění modelů: Spustí několik modelů současně, maximalizuje využití GPU.
  • Dynamické batchování: Kombinuje několik požadavků na inference do jedné dávky, snižuje latenci a zvyšuje propustnost.
  • Proudové audio/videovstupy: Podporuje proudové vstupy v reálných aplikacích, jako je analýza videa v reálném čase nebo služby přepisu řeči.

To činí Triton cenným nástrojem pro nasazení optimalizovaných modelů TensorRT-LLM do produkčních prostředí, zajišťujícím vysokou škálovatelnost a efektivitu.

Klíčové funkce TensorRT-LLM pro inference LLM

Otevřené Python API

TensorRT-LLM poskytuje vysoce modulární a otevřené Python API, zjednodušující proces definice, optimalizace a spouštění LLM. API umožňuje vývojářům vytvářet vlastní LLM nebo upravovat předem připravené modely podle svých potřeb, bez nutnosti hlubokých znalostí CUDA nebo frameworků hlubokého učení.

Batchování za letu a stránkování pozornosti

Jedna z předních funkcí TensorRT-LLM je batchování za letu, které optimalizuje generování textu zpracováváním více požadavků současně. Tato funkce minimalizuje čekací dobu a zlepšuje využití GPU dynamickým batchováním sekvencí.

Kromě toho stránkování pozornosti zajišťuje, že využití paměti zůstává nízké i při zpracování dlouhých vstupních sekvencí. Místo alokace souvislé paměti pro všechny tokeny v sekvenci (což může vést k fragmentaci paměti) stránkování pozornosti rozděluje paměť na “stránky”, které lze dynamicky přidělovat a uvolňovat, předcházející fragmentaci paměti a zlepšující efektivitu.

Podpora více GPU a více uzlů

Pro větší modely nebo složitější úlohy podporuje TensorRT-LLM více GPU a více uzlů. Tato schopnost umožňuje distribuovat výpočty modelu přes několik GPU nebo uzlů, zlepšující propustnost a snižující celkovou dobu inference.

Podpora FP8

S příchodem FP8 (8bitový plovoucí bod) využívá TensorRT-LLM NVIDIA’s H100 GPU k převodu váh modelu do tohoto formátu pro optimalizovanou inferenci. FP8 umožňuje sníženou spotřebu paměti a rychlejší výpočet, zejména užitečné ve velkých nasazeních.

Architektura a komponenty TensorRT-LLM

Porozumění architektuře TensorRT-LLM vám umožní lépe využít jeho schopností pro inference LLM. Rozdělíme klíčové komponenty:

Definice modelu

TensorRT-LLM umožňuje definovat LLM pomocí jednoduchého Python API. API konstruuje grafickou reprezentaci modelu, usnadňující správu složitých vrstev zapojených do architektur LLM, jako je GPT nebo BERT.

Vázání váh

Než je model zkompilován, váhy (nebo parametry) musí být vázány na síť. Tento krok zajišťuje, že váhy jsou vloženy do TensorRT engine, umožňující rychlou a efektivní inferenci. TensorRT-LLM také umožňuje aktualizaci váh po kompilaci, přidávající flexibilitu pro modely, které vyžadují časté aktualizace.

Shoda vzorů a fúze

Operační fúze je další silnou funkcí TensorRT-LLM. Sloučením více operací (například maticových násobení s aktivačními funkcemi) do jediného CUDA kernelu minimalizuje TensorRT režii spojenou s několika spuštěními jader. To snižuje přenosy paměti a zrychluje inferenci.

Pluginy

Pro rozšíření funkcí TensorRT mohou vývojáři psát pluginy – vlastní jádra, která umožňují specifické optimalizace nebo operace, které nejsou pokryty standardní knihovnou TensorRT.

Například Flash-Attention plugin je známým vlastním jádrem, které optimalizuje multi-head attention bloky v modelech založených na Transformerech. Používáním tohoto pluginu mohou vývojáři dosáhnout podstatného zrychlení výpočtu pozornosti – jedné z nejvíce náročných součástí LLM.

Benchmarky: Zisky výkonu TensorRT-LLM

TensorRT-LLM prokazuje významné zisky výkonu pro inference LLM napříč různými GPU. Zde je srovnání rychlosti inference (měřeno v tokenech za sekundu) pomocí TensorRT-LLM na různých GPU NVIDIA:

Model Přesnost Délka vstupu/výstupu 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

Tyto benchmarky ukazují, že TensorRT-LLM dodává podstatná vylepšení výkonu, zejména pro delší sekvence.

Praktické použití: Instalace a sestavení TensorRT-LLM

Krok 1: Vytvoření kontejnerového prostředí

Pro snadné použití poskytuje TensorRT-LLM Docker obrázky pro vytvoření kontrolovaného prostředí pro sestavení a spuštění modelů.

docker build --pull \
--target devel \
--file docker/Dockerfile.multi \
--tag tensorrt_llm/devel:latest .

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

Krok 3: Sestavení TensorRT-LLM ze zdroje

Uvnitř kontejneru zkompilujte TensorRT-LLM pomocí následujícího příkazu:

python3 ./scripts/build_wheel.py --trt_root /usr/local/tensorrt
pip install ./build/tensorrt_llm*.whl

Tato možnost je zvláště užitečná, když chcete vyhnout problémům s kompatibilitou souvisejícími s závislostmi Pythonu nebo když se zaměřujete na integraci C++ v produkčních systémech. Jakmile je sestavení dokončeno, naleznete zkompilované knihovny pro C++ runtime v adresáři cpp/build/tensorrt_llm, připravené pro integraci s vašimi aplikacemi C++.

Krok 4: Připojení C++ runtime TensorRT-LLM

Při integraci TensorRT-LLM do vašich projektů C++ zajistěte, aby cesty zahrnutí vašeho projektu odkazovaly na adresář cpp/include. Tento adresář obsahuje stabilní, podporované API hlavičky. Knihovny TensorRT-LLM jsou propojeny jako součást vašeho procesu kompilace C++.

Například vaše konfigurace CMake může zahrnovat:

include_directories(${TENSORRT_LLM_PATH}/cpp/include)
link_directories(${TENSORRT_LLM_PATH}/cpp/build/tensorrt_llm)
target_link_libraries(your_project tensorrt_llm)

Tato integrace umožňuje vám využít optimalizací TensorRT-LLM ve vašich vlastních projektech C++, zajišťujíc efektivní inferenci i ve vysoce výkonných nebo nízkoúrovňových prostředích.

Pokročilé funkce TensorRT-LLM

TensorRT-LLM je více než jen knihovna optimalizací; zahrnuje několik pokročilých funkcí, které pomáhají řešit nasazení LLM ve velkém měřítku. níže prozkoumáme některé z těchto funkcí podrobněji:

1. Batchování za letu

Tradiční batchování zahrnuje čekání, až je dávka plně shromážděna, než se spustí zpracování, což může způsobit zpoždění. Batchování za letu mění tuto situaci tím, že dynamicky spouští inferenci dokončených požadavků uvnitř dávky, zatímco stále shromažďuje další požadavky. Toto zlepšuje celkovou propustnost minimalizací nečinnosti a zlepšením využití GPU.

Tato funkce je zvláště cenná v reálných aplikacích, jako jsou chatboti nebo hlasoví asistenti, kde je doba odezvy kritická.

2. Stránkování pozornosti

Stránkování pozornosti je technika optimalizace paměti pro zpracování dlouhých vstupních sekvencí. Místo požadavku na souvislou paměť pro všechny tokeny v sekvenci (což může vést k fragmentaci paměti) stránkování pozornosti umožňuje modelu rozdělit data key-value cache na “stránky” paměti. Tyto stránky jsou dynamicky přidělovány a uvolňovány podle potřeby, optimalizují využití paměti.

Stránkování pozornosti je kritické pro zpracování dlouhých sekvencí a snižování režie paměti, zvláště v generativních modelech, jako je GPT a LLaMA.

3. Vlastní pluginy

TensorRT-LLM umožňuje rozšířit jeho funkčnost pomocí vlastních pluginů. Pluginy jsou uživatelsky definované jádra, která umožňují specifické optimalizace nebo operace, které nejsou pokryty standardní knihovnou TensorRT.

Například Flash-Attention plugin je známým vlastním jádrem, které optimalizuje multi-head attention bloky v modelech založených na Transformerech. Používáním tohoto pluginu mohou vývojáři dosáhnout podstatného zrychlení výpočtu pozornosti – jedné z nejvíce náročných součástí LLM.

4. Přesnost FP8 na NVIDIA H100

S přesností FP8 využívá TensorRT-LLM NVIDIA’s H100 GPU k převodu váh modelu do tohoto formátu pro optimalizovanou inferenci. FP8 snižuje spotřebu paměti a zrychluje výpočet, zejména užitečné ve velkých nasazeních.

Příklad: Nasazení TensorRT-LLM s Triton Inference Server

Pro nasazení do produkčního prostředí poskytuje NVIDIA’s Triton Inference Server robustní platformu pro správu modelů ve velkém měřítku. V tomto příkladu prokážeme, jak nasadit optimalizovaný model TensorRT-LLM pomocí Triton.

Krok 1: Nastavení repozitáře modelů

Vytvořte repozitář modelů pro Triton, který bude uchovávat vaše soubory modelů TensorRT-LLM. Pokud jste zkompilovali model GPT2, vaše adresářová struktura by mohla vypadat takto:

mkdir -p model_repository/gpt2/1
cp ./trt_engine/gpt2_fp16.engine model_repository/gpt2/1/

Krok 2: Vytvoření konfiguračního souboru Triton

V témže adresáři model_repository/gpt2/ vytvořte konfigurační soubor nazvaný config.pbtxt, který informuje Triton, jak načíst a spustit model. Zde je základní konfigurace pro TensorRT-LLM:

name: "gpt2"
platform: "tensorrt_llm"
max_batch_size: 8

<p>input [
{
name: "input_ids"
data_type: TYPE_INT32
dims: [-1]
}
]</p>

<p>output [
{
name: "logits"
data_type: TYPE_FP32
dims: [-1, -1]
}
]</p>

Krok 3: Spuštění serveru Triton

Použijte následující příkaz Docker pro spuštění Triton s repozitářem modelů:

docker run --rm --gpus all \
-v $(pwd)/model_repository:/models \
nvcr.io/nvidia/tritonserver:23.05-py3 \
tritonserver --model-repository=/models

Krok 4: Odeslání požadavků na inferenci do Triton

Jakmile je server Triton spuštěn, můžete odeslat požadavky na inferenci pomocí HTTP nebo gRPC. Například pomocí curl pro odeslání požadavku:

curl -X POST http://localhost:8000/v2/models/gpt2/infer -d '{
"inputs": [
{"name": "input_ids", "shape": [1, 128], "datatype": "INT32", "data": [[101, 234, 1243]]}
]
}'

Triton zpracuje požadavek pomocí engine TensorRT-LLM a vrátí logits jako výstup.

Nejlepší postupy pro optimalizaci inference LLM s TensorRT-LLM

Pro plné využití TensorRT-LLM je důležité dodržovat nejlepší postupy během optimalizace modelu i nasazení. Zde jsou einige klíčové tipy:

1. Profiling modelu před optimalizací

Před aplikací optimalizací, jako je kvantizace nebo fúze jader, použijte nástroje pro profiling NVIDIA (jako Nsight Systems nebo TensorRT Profiler), abyste pochopili současné úzká místa ve výkonu modelu. To vám umožní cíleně optimalizovat konkrétní oblasti, vedoucí k efektivnějším optimalizacím.

2. Použití smíšeného přesahu pro optimální výkon

Při optimalizaci modelů s TensorRT-LLM používání smíšeného přesahu (kombinace FP16 a FP32) nabízí významné zrychlení bez významné ztráty přesnosti. Pro nejlepší rovnováhu mezi rychlostí a přesností zvažte použití FP8, kde je k dispozici, zejména na GPU H100.

3. Využití stránkování pozornosti pro velké sekvence

Pro úkoly, které zahrnují dlouhé vstupní sekvence, jako je shrnutí dokumentů nebo víceuživatelské konverzace, vždy povolte stránkování pozornosti, abyste optimalizovali využití paměti. To snižuje režii paměti a brání chybám Nedostatek paměti během inference.

4. Doladění paralelismu pro konfigurace s více GPU

Při nasazení LLM napříč několika GPU nebo uzly je důležité doladit nastavení pro paralelismus tensorů a paralelismus pipeline, aby odpovídala vašemu konkrétnímu pracovnímu zatížení. Správná konfigurace těchto režimů může vést k významným vylepšením výkonu, distribuujícím výpočetní zátěž rovnoměrně napříč GPU.

Závěr

TensorRT-LLM představuje zásadní změnu v optimalizaci a nasazení velkých jazykových modelů. S jeho pokročilými funkcemi, jako je kvantizace, operační fúze, přesnost FP8 a podpora více GPU, TensorRT-LLM umožňuje LLM běžet rychleji a efektivněji na GPU NVIDIA. Bez ohledu na to, zda pracujete na aplikacích v reálném čase, systémech doporučení nebo velkých jazycových modelech, TensorRT-LLM poskytuje nástroje potřebné pro překročení hranic výkonu.

Tento průvodce vás provedl nastavením TensorRT-LLM, optimalizací modelů pomocí jeho Python API, nasazením na Triton Inference Server a aplikací nejlepších postupů pro efektivní inferenci. S TensorRT-LLM můžete urychlit své úlohy AI, snížit latenci a dodávat škálovatelná řešení LLM do produkčních prostředí.

Pro další informace se obraťte na oficiální dokumentaci TensorRT-LLM a dokumentaci serveru Triton Inference.

Já pět let se ponořím do fascinujícího světa strojového učení a hlubokého učení. Mé vášně a odborné znalosti mě vedly k tomu, abych se podílel na více než 50 různých projektech softwarového inženýrství, se zvláštním zaměřením na AI/ML. Mé pokračující zvědavosti mě také přivedly k přirozenému jazykovému zpracování, oblasti, kterou jsem ochoten prozkoumat dále.