Kontakt z nami

TensorRT-LLM: Kompleksowy przewodnik po optymalizacji wnioskowania dużego modelu językowego w celu uzyskania maksymalnej wydajności

Artificial Intelligence

TensorRT-LLM: Kompleksowy przewodnik po optymalizacji wnioskowania dużego modelu językowego w celu uzyskania maksymalnej wydajności

mm
Kwantyzacja TensorRT-LLM NVIDEA, łączenie operacji, precyzja FP8 i obsługa wielu procesorów graficznych

W miarę jak popyt na duże modele językowe (LLM) stale rośnie, zapewnienie szybkiego, wydajnego i skalowalnego wnioskowania stało się ważniejsze niż kiedykolwiek. NVIDIA TensorRT-LLM wkracza, aby sprostać temu wyzwaniu, dostarczając zestaw potężnych narzędzi i optymalizacji zaprojektowanych specjalnie do wnioskowania LLM. TensorRT-LLM oferuje imponujący wachlarz ulepszeń wydajności, takich jak kwantyzacja, fuzja jądra, przetwarzanie wsadowe w trakcie lotu i obsługa wielu procesorów graficznych. Te udoskonalenia umożliwiają osiągnięcie prędkości wnioskowania do 8x szybszych niż tradycyjne metody oparte na procesorach, zmieniając sposób, w jaki wdrażamy LLM w produkcji.

Ten kompleksowy przewodnik przedstawi wszystkie aspekty TensorRT-LLM, od architektury i kluczowych funkcji po praktyczne przykłady wdrażania modeli. Niezależnie od tego, czy jesteś inżynierem AI, programistą czy badaczem, ten przewodnik zapewni Ci wiedzę, jak wykorzystać TensorRT-LLM do optymalizacji wnioskowania LLM na procesorach graficznych NVIDIA.

Przyspieszanie wnioskowania LLM za pomocą TensorRT-LLM

TensorRT-LLM zapewnia drastyczne ulepszenia wydajności wnioskowania LLM. Według testów NVIDIA aplikacje oparte na TensorRT wykazują 8x szybciej prędkości wnioskowania w porównaniu do platform opartych wyłącznie na procesorze. Jest to kluczowy postęp w aplikacjach czasu rzeczywistego, takich jak chatboty, systemy rekomendacji i systemy autonomiczne, które wymagają szybkich odpowiedzi.

Jak to działa

TensorRT-LLM przyspiesza wnioskowanie poprzez optymalizację sieci neuronowych podczas wdrażania przy użyciu takich technik, jak:

  • Kwantyzacja:Zmniejsza precyzję wag i aktywacji, zmniejszając rozmiar modelu i poprawiając szybkość wnioskowania.
  • Fuzja warstw i tensorów:Łączy operacje takie jak funkcje aktywacji i mnożenia macierzy w jedną operację.
  • Strojenie jądra:Wybiera optymalne jądra CUDA do obliczeń GPU, skracając czas wykonywania.

Dzięki tym optymalizacjom modele LLM działają wydajnie na wielu platformach wdrożeniowych — od centrów danych o dużej skali po systemy wbudowane.

Optymalizacja wydajności wnioskowania za pomocą TensorRT

Zbudowany na modelu programowania równoległego CUDA firmy NVIDIA, TensorRT zapewnia wysoce wyspecjalizowane optymalizacje dla wnioskowania na procesorach graficznych NVIDIA. Dzięki usprawnieniu procesów, takich jak kwantyzacja, dostrajanie jądra i łączenie operacji tensorowych, TensorRT zapewnia, że ​​LLM mogą działać z minimalnym opóźnieniem.

Do najskuteczniejszych technik zalicza się:

  • Kwantyzacja:Zmniejsza to precyzję numeryczną parametrów modelu przy jednoczesnym zachowaniu wysokiej dokładności, co skutecznie przyspiesza wnioskowanie.
  • Fuzja tensorowa:Łącząc wiele operacji w jednym jądrze CUDA, TensorRT minimalizuje obciążenie pamięci i zwiększa przepustowość.
  • Automatyczne dostrajanie jądra:TensorRT automatycznie wybiera najlepsze jądro dla każdej operacji, optymalizując wnioskowanie dla danego procesora graficznego.

Techniki te umożliwiają oprogramowaniu TensorRT-LLM optymalizację wydajności wnioskowania w przypadku zadań głębokiego uczenia, takich jak przetwarzanie języka naturalnego, silniki rekomendacji i analiza wideo w czasie rzeczywistym.

Przyspieszanie obciążeń AI za pomocą TensorRT

TensorRT przyspiesza obciążenia głębokiego uczenia się poprzez włączanie precyzyjnych optymalizacji, takich jak INT8 oraz FP16. Te formaty o zmniejszonej precyzji umożliwiają znacznie szybsze wnioskowanie przy zachowaniu dokładności. Jest to szczególnie cenne w aplikacjach czasu rzeczywistego, w których niskie opóźnienie jest krytycznym wymogiem.

INT8 oraz FP16 optymalizacje są szczególnie skuteczne w:

  • Streaming wideo:Zadania przetwarzania wideo oparte na sztucznej inteligencji, takie jak wykrywanie obiektów, korzystają z tych optymalizacji, skracając czas potrzebny na przetwarzanie klatek.
  • Systemy rekomendacji:Dzięki przyspieszeniu wnioskowania w modelach przetwarzających duże ilości danych użytkowników, TensorRT umożliwia personalizację w czasie rzeczywistym na dużą skalę.
  • Przetwarzanie języka naturalnego (NLP):TensorRT zwiększa szybkość zadań przetwarzania języka naturalnego, takich jak generowanie tekstu, tłumaczenie i podsumowywanie, dzięki czemu nadają się one do zastosowań w czasie rzeczywistym.

Wdrażaj, uruchamiaj i skaluj z NVIDIA Triton

Po zoptymalizowaniu modelu za pomocą TensorRT-LLM możesz go łatwo wdrożyć, uruchomić i skalować przy użyciu Serwer wnioskowania NVIDIA Triton. Triton to oprogramowanie typu open source, które obsługuje dynamiczne przetwarzanie wsadowe, zespoły modeli i wysoką przepustowość. Zapewnia elastyczne środowisko do zarządzania modelami AI na dużą skalę.

Niektóre z kluczowych funkcji obejmują:

  • Jednoczesne wykonywanie modelu:Uruchom wiele modeli jednocześnie, maksymalizując wykorzystanie procesora graficznego.
  • Dynamiczne dozowanieŁączy wiele żądań wnioskowania w jedną partię, zmniejszając opóźnienia i zwiększając przepustowość.
  • Przesyłanie strumieniowe sygnałów audio/wideo:Obsługuje strumienie wejściowe w aplikacjach czasu rzeczywistego, takich jak analiza wideo na żywo lub usługi zamiany mowy na tekst.

Dzięki temu Triton jest cennym narzędziem do wdrażania zoptymalizowanych modeli TensorRT-LLM w środowiskach produkcyjnych, gwarantując wysoką skalowalność i wydajność.

Główne cechy TensorRT-LLM do wnioskowania LLM

Otwarte źródło API Pythona

TensorRT-LLM zapewnia wysoce modułowy i otwarte źródło API Pythona, upraszczając proces definiowania, optymalizacji i wykonywania LLM. API umożliwia deweloperom tworzenie niestandardowych LLM lub modyfikowanie gotowych, aby odpowiadały ich potrzebom, bez konieczności dogłębnej znajomości CUDA lub frameworków głębokiego uczenia.

Przetwarzanie wsadowe w trakcie lotu i obsługa stronicowania

Jedną z wyróżniających się cech TensorRT-LLM jest Przetwarzanie wsadowe w trakcie lotu, która optymalizuje generowanie tekstu poprzez przetwarzanie wielu żądań jednocześnie. Ta funkcja minimalizuje czas oczekiwania i poprawia wykorzystanie GPU poprzez dynamiczne przetwarzanie wsadowe sekwencji.

Dodatkowo, Uwaga na stronie zapewnia, że ​​użycie pamięci pozostaje niskie nawet podczas przetwarzania długich sekwencji wejściowych. Zamiast przydzielać ciągłą pamięć dla wszystkich tokenów, paged attention dzieli pamięć na „strony”, które mogą być ponownie wykorzystywane dynamicznie, zapobiegając fragmentacji pamięci i poprawiając wydajność.

Wnioskowanie wieloprocesorowe i wielowęzłowe

W przypadku większych modeli lub bardziej złożonych obciążeń roboczych TensorRT-LLM obsługuje wiele procesorów graficznych oraz wnioskowanie wielowęzłowe. Ta możliwość umożliwia dystrybucję obliczeń modelu na kilka procesorów graficznych lub węzłów, co poprawia przepustowość i skraca ogólny czas wnioskowania.

Wsparcie 8PR

Wraz z pojawieniem się FP8 (8-bitowa liczba zmiennoprzecinkowa), TensorRT-LLM wykorzystuje procesory graficzne NVIDIA H100 do konwersji wag modeli do tego formatu, co pozwala na zoptymalizowane wnioskowanie. FP8 umożliwia mniejsze zużycie pamięci i szybsze obliczenia, co jest szczególnie przydatne w przypadku wdrożeń na dużą skalę.

Architektura i komponenty TensorRT-LLM

Zrozumienie architektury TensorRT-LLM pomoże Ci lepiej wykorzystać jej możliwości do wnioskowania LLM. Omówmy kluczowe komponenty:

Definicja modelu

TensorRT-LLM umożliwia definiowanie LLM za pomocą prostego API Pythona. API konstruuje reprezentacja graficzna modelu, co ułatwia zarządzanie złożonymi warstwami stosowanymi w architekturach LLM, takich jak GPT czy BERT.

Wiązania wagowe

Przed skompilowaniem modelu wagi (lub parametry) muszą zostać powiązane z siecią. Ten krok zapewnia, że ​​wagi są osadzone w silniku TensorRT, umożliwiając szybkie i wydajne wnioskowanie. TensorRT-LLM umożliwia również aktualizacje wag po kompilacji, dodając elastyczność modelom, które wymagają częstych aktualizacji.

Dopasowywanie i łączenie wzorców

Operacja Fuzja jest kolejną potężną cechą TensorRT-LLM. Łącząc wiele operacji (np. mnożenia macierzy z funkcjami aktywacji) w jednym jądrze CUDA, TensorRT minimalizuje narzut związany z wieloma uruchomieniami jądra. Zmniejsza to transfery pamięci i przyspiesza wnioskowanie.

Wtyczki

Aby rozszerzyć możliwości TensorRT, programiści mogą napisać wtyczki—niestandardowe jądra, które wykonują określone zadania, takie jak optymalizacja bloków uwagi wielogłowicowej. Na przykład Błyskawiczna uwaga Wtyczka znacząco poprawia wydajność warstw uwagi LLM.

Testy porównawcze: wzrost wydajności TensorRT-LLM

TensorRT-LLM wykazuje znaczące wzrosty wydajności dla wnioskowania LLM na różnych GPU. Oto porównanie szybkości wnioskowania (mierzonej w tokenach na sekundę) przy użyciu TensorRT-LLM na różnych GPU NVIDIA:

Model Detaliczność Długość wejścia/wyjścia H100 (80 GB) A100 (80 GB) 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

Testy te pokazują, że TensorRT-LLM zapewnia znaczącą poprawę wydajności, zwłaszcza w przypadku dłuższych sekwencji.

Praktyczne: Instalowanie i budowanie TensorRT-LLM

Krok 1: Utwórz środowisko kontenerowe

Aby ułatwić użytkowanie, TensorRT-LLM udostępnia obrazy Docker pozwalające stworzyć kontrolowane środowisko do budowania i uruchamiania modeli.

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


Krok 2: Uruchom kontener

Uruchom kontener programistyczny z dostępem do procesorów graficznych NVIDIA:

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: Zbuduj TensorRT-LLM ze źródła

Wewnątrz kontenera skompiluj TensorRT-LLM za pomocą następującego polecenia:

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

Ta opcja jest szczególnie przydatna, gdy chcesz uniknąć problemów ze zgodnością związanych z zależnościami Pythona lub gdy skupiasz się na integracji C++ w systemach produkcyjnych. Po zakończeniu kompilacji znajdziesz skompilowane biblioteki dla środowiska wykonawczego C++ w cpp/build/tensorrt_llm katalog, gotowy do integracji z aplikacjami C++.

Krok 4: Połącz środowisko wykonawcze TensorRT-LLM C++

Podczas integrowania TensorRT-LLM z projektami C++ upewnij się, że ścieżki dołączania projektu wskazują na cpp/include katalog. Zawiera stabilne, obsługiwane nagłówki API. Biblioteki TensorRT-LLM są łączone jako część procesu kompilacji C++.

Na przykład konfiguracja CMake Twojego projektu może obejmować:

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

Ta integracja umożliwia korzystanie z optymalizacji TensorRT-LLM w niestandardowych projektach C++, gwarantując efektywne wnioskowanie nawet w środowiskach niskiego poziomu lub wysokiej wydajności.

Zaawansowane funkcje TensorRT-LLM

TensorRT-LLM to coś więcej niż tylko biblioteka optymalizacji; zawiera kilka zaawansowanych funkcji, które pomagają radzić sobie z wdrożeniami LLM na dużą skalę. Poniżej szczegółowo omawiamy niektóre z tych funkcji:

1. Przetwarzanie wsadowe w trakcie lotu

Tradycyjne przetwarzanie wsadowe polega na oczekiwaniu na zebranie całej partii przed przetworzeniem, co może powodować opóźnienia. Przetwarzanie wsadowe w trakcie lotu zmienia to poprzez dynamiczne rozpoczęcie wnioskowania na podstawie ukończonych żądań w partii, jednocześnie zbierając inne żądania. Poprawia to ogólną przepustowość poprzez minimalizowanie czasu bezczynności i zwiększanie wykorzystania GPU.

Funkcja ta jest szczególnie cenna w aplikacjach działających w czasie rzeczywistym, takich jak chatboty czy asystenci głosowi, gdzie czas reakcji ma kluczowe znaczenie.

2. Uwaga na stronie

Uwaga na stronie jest techniką optymalizacji pamięci do obsługi dużych sekwencji wejściowych. Zamiast wymagać ciągłej pamięci dla wszystkich tokenów w sekwencji (co może prowadzić do fragmentacji pamięci), Paged Attention pozwala modelowi dzielić dane pamięci podręcznej klucz-wartość na „strony” pamięci. Strony te są dynamicznie przydzielane i zwalniane w razie potrzeby, optymalizując wykorzystanie pamięci.

Paged Attention jest kluczowy dla obsługi długich sekwencji i redukcji obciążenia pamięci, szczególnie w modelach generatywnych, takich jak GPT i LLaMA.

3. Wtyczki niestandardowe

TensorRT-LLM pozwala na rozszerzenie swojej funkcjonalności o niestandardowe wtyczkiWtyczki to zdefiniowane przez użytkownika jądra, które umożliwiają określone optymalizacje lub operacje nieobjęte standardową biblioteką TensorRT.

Na przykład, Błyskawiczna uwaga plugin to dobrze znany niestandardowy kernel, który optymalizuje wielogłowicowe warstwy uwagi w modelach opartych na Transformer. Dzięki tej wtyczce programiści mogą osiągnąć znaczne przyspieszenie obliczeń uwagi — jednego z najbardziej zasobochłonnych komponentów LLM.

Aby zintegrować niestandardową wtyczkę z modelem TensorRT-LLM, możesz napisać niestandardowe jądro CUDA i zarejestrować je w TensorRT. Wtyczka zostanie wywołana podczas wykonywania modelu, zapewniając dostosowane ulepszenia wydajności.

4. Precyzja FP8 na NVIDIA H100

Wraz z Precyzja FP8TensorRT-LLM korzysta z najnowszych innowacji sprzętowych firmy NVIDIA w zakresie Architektura H100 Hopper. FP8 zmniejsza rozmiar pamięci LLM-ów, przechowując wagi i aktywacje w 8-bitowym formacie zmiennoprzecinkowym, co skutkuje szybszymi obliczeniami bez poświęcania dużej dokładności. TensorRT-LLM automatycznie kompiluje modele, aby wykorzystać zoptymalizowane jądra FP8, co jeszcze bardziej przyspiesza czasy wnioskowania.

Dzięki temu TensorRT-LLM jest idealnym wyborem w przypadku wdrożeń na dużą skalę, w których wymagana jest najwyższa wydajność i energooszczędność.

Przykład: wdrażanie TensorRT-LLM z serwerem wnioskowania Triton

W przypadku wdrożeń produkcyjnych firma NVIDIA Serwer wnioskowania Triton zapewnia solidną platformę do zarządzania modelami na dużą skalę. W tym przykładzie pokażemy, jak wdrożyć model zoptymalizowany pod kątem TensorRT-LLM przy użyciu Triton.

Krok 1: Skonfiguruj repozytorium modeli

Utwórz repozytorium modeli dla Triton, które będzie przechowywać pliki modeli TensorRT-LLM. Na przykład, jeśli skompilowałeś model GPT2, struktura katalogów może wyglądać następująco:

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

Krok 2: Utwórz plik konfiguracji Triton

W tym samym model_repository/gpt2/ katalogu, utwórz plik konfiguracyjny o nazwie config.pbtxt który informuje Tritona, jak załadować i uruchomić model. Oto podstawowa konfiguracja TensorRT-LLM:

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

input [
  {
    name: "input_ids"
    data_type: TYPE_INT32
    dims: [-1]
  }
]

output [
  {
    name: "logits"
    data_type: TYPE_FP32
    dims: [-1, -1]
  }
]

Krok 3: Uruchom serwer Triton

Użyj następującego polecenia Docker, aby uruchomić Triton z repozytorium modeli:

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

Krok 4: Wyślij żądania wnioskowania do Triton

Gdy serwer Triton jest uruchomiony, możesz wysyłać do niego żądania wnioskowania za pomocą protokołu HTTP lub gRPC. Na przykład za pomocą curl wysłać prośbę:

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 przetworzy żądanie przy użyciu silnika TensorRT-LLM i zwróci logity jako dane wyjściowe.

Najlepsze praktyki optymalizacji wnioskowania LLM za pomocą TensorRT-LLM

Aby w pełni wykorzystać potencjał TensorRT-LLM, ważne jest przestrzeganie najlepszych praktyk zarówno podczas optymalizacji modelu, jak i jego wdrażania. Oto kilka kluczowych wskazówek:

1. Profiluj swój model przed optymalizacją

Przed zastosowaniem optymalizacji, takich jak kwantyzacja lub fuzja jądra, użyj narzędzi profilowania NVIDIA (takich jak Nsight Systems lub TensorRT Profiler), aby zrozumieć obecne wąskie gardła w wykonywaniu modelu. Pozwala to na ukierunkowanie konkretnych obszarów na poprawę, co prowadzi do skuteczniejszych optymalizacji.

2. Użyj mieszanej precyzji dla optymalnej wydajności

Podczas optymalizacji modeli za pomocą TensorRT-LLM, używając mieszana precyzja (kombinacja FP16 i FP32) oferuje znaczną poprawę szybkości bez znacznej utraty dokładności. Aby uzyskać najlepszą równowagę między szybkością a dokładnością, rozważ użycie FP8, jeśli jest dostępny, szczególnie na procesorach graficznych H100.

3. Wykorzystaj stronicowaną uwagę w przypadku dużych sekwencji

W przypadku zadań wymagających długich sekwencji wprowadzania danych, takich jak podsumowanie dokumentu lub konwersacje wieloetapowe, zawsze włączaj tę opcję Uwaga na stronie aby zoptymalizować wykorzystanie pamięci. Zmniejsza to obciążenie pamięci i zapobiega błędom braku pamięci podczas wnioskowania.

4. Dokładne dostrojenie paralelizmu dla konfiguracji z wieloma procesorami graficznymi

Wdrażając LLM na wielu procesorach GPU lub węzłach, kluczowe jest precyzyjne dostrojenie ustawień równoległość tensorowa oraz równoległość rurociągu aby dopasować konkretne obciążenie. Prawidłowa konfiguracja tych trybów może prowadzić do znacznej poprawy wydajności poprzez równomierne rozłożenie obciążenia obliczeniowego na procesory graficzne.

Podsumowanie

TensorRT-LLM reprezentuje zmianę paradygmatu w optymalizacji i wdrażaniu dużych modeli językowych. Dzięki zaawansowanym funkcjom, takim jak kwantyzacja, łączenie operacji, precyzja FP8 i obsługa wielu GPU, TensorRT-LLM umożliwia szybsze i wydajniejsze działanie LLM na procesorach graficznych NVIDIA. Niezależnie od tego, czy pracujesz nad aplikacjami czatu w czasie rzeczywistym, systemami rekomendacji czy modelami językowymi na dużą skalę, TensorRT-LLM zapewnia narzędzia potrzebne do przesuwania granic wydajności.

Ten przewodnik przeprowadzi Cię przez konfigurację TensorRT-LLM, optymalizację modeli za pomocą interfejsu API Pythona, wdrażanie na serwerze Triton Inference Server i stosowanie najlepszych praktyk w celu wydajnego wnioskowania. Dzięki TensorRT-LLM możesz przyspieszyć obciążenia AI, zmniejszyć opóźnienia i dostarczać skalowalne rozwiązania LLM do środowisk produkcyjnych.

Więcej informacji można znaleźć w oficjalnym dokumencie Dokumentacja TensorRT-LLM oraz Dokumentacja serwera wnioskowania Triton.

Ostatnie pięć lat spędziłem zanurzając się w fascynującym świecie uczenia maszynowego i głębokiego uczenia się. Moja pasja i wiedza sprawiły, że uczestniczyłem w ponad 50 różnorodnych projektach z zakresu inżynierii oprogramowania, ze szczególnym uwzględnieniem AI/ML. Moja ciągła ciekawość przyciągnęła mnie również w stronę przetwarzania języka naturalnego – dziedziny, którą chcę dalej zgłębiać.