Refresh

This website www.unite.ai/uk/tensorrt-llm-a-comprehensive-guide-to-optimizing-large-language-model-inference-for-maximum-performance/ is currently offline. Cloudflare's Always Online™ shows a snapshot of this web page from the Internet Archive's Wayback Machine. To check for the live version, click Refresh.

Зв'язатися з нами

Штучний Інтелект

TensorRT-LLM: вичерпний посібник з оптимізації виводу моделі великої мови для досягнення максимальної продуктивності

mm

опублікований

 on

TensorRT-LLM Квантування NVIDEA, злиття операцій, точність FP8 і підтримка кількох GPU

Оскільки попит на великі мовні моделі (LLM) продовжує зростати, забезпечення швидкого, ефективного та масштабованого висновку стало більш важливим, ніж будь-коли. NVIDIA TensorRT-LLM кроки, щоб вирішити цю проблему, надаючи набір потужних інструментів і оптимізацій, спеціально розроблених для висновків LLM. TensorRT-LLM пропонує вражаючий набір покращень продуктивності, як-от квантування, злиття ядра, пакетування під час польоту та підтримку кількох GPU. Ці досягнення дозволяють досягти швидкості висновку до 8 разів швидше, ніж традиційні методи на основі ЦП, змінюючи спосіб розгортання LLM у виробництві.

У цьому вичерпному посібнику розглядаються всі аспекти TensorRT-LLM, від його архітектури та ключових функцій до практичних прикладів розгортання моделей. Незалежно від того, чи ви інженер штучного інтелекту, розробник програмного забезпечення чи дослідник, цей посібник дасть вам знання, як використовувати TensorRT-LLM для оптимізації висновків LLM на графічних процесорах NVIDIA.

Прискорення логічного висновку за допомогою TensorRT-LLM

TensorRT-LLM суттєво покращує ефективність логічного висновку LLM. Згідно з тестами NVIDIA, програми на основі TensorRT показують до 8x швидше швидкість висновку порівняно з платформами, що працюють лише з ЦП. Це важливий прогрес у програмах реального часу, таких як чат-боти, системи рекомендацій і автономні системи, які потребують швидкої відповіді.

Як це працює

TensorRT-LLM прискорює логічний висновок, оптимізуючи нейронні мережі під час розгортання за допомогою таких методів, як:

  • Квантування: Зменшує точність ваг і активацій, зменшуючи розмір моделі та покращуючи швидкість висновку.
  • Злиття шарів і тензорів: об’єднує такі операції, як функції активації та множення матриці, в одну операцію.
  • Налаштування ядра: Вибирає оптимальні ядра CUDA для обчислень GPU, зменшуючи час виконання.

Ці оптимізації гарантують ефективну роботу ваших моделей LLM на широкому спектрі платформ розгортання — від гіпермасштабованих центрів обробки даних до вбудованих систем.

Оптимізація продуктивності логічного висновку за допомогою TensorRT

Створений на основі моделі паралельного програмування CUDA від NVIDIA, TensorRT забезпечує вузькоспеціалізовану оптимізацію для висновків на графічних процесорах NVIDIA. Спрощуючи такі процеси, як квантування, налаштування ядра та злиття тензорних операцій, TensorRT гарантує, що LLM можуть працювати з мінімальною затримкою.

Деякі з найбільш ефективних методів включають:

  • Квантування: Це зменшує чисельну точність параметрів моделі, зберігаючи високу точність, ефективно прискорюючи висновок.
  • Tensor Fusion: об’єднуючи кілька операцій в одне ядро ​​CUDA, TensorRT мінімізує витрати пам’яті та підвищує пропускну здатність.
  • Автоматичне налаштування ядра: TensorRT автоматично вибирає найкраще ядро ​​для кожної операції, оптимізуючи висновок для певного GPU.

Ці методи дозволяють TensorRT-LLM оптимізувати продуктивність висновків для завдань глибокого навчання, таких як обробка природної мови, механізми рекомендацій і відеоаналітика в реальному часі.

Прискорення робочих навантажень ШІ за допомогою TensorRT

TensorRT прискорює робочі навантаження глибокого навчання, використовуючи точні оптимізації, такі як INT8 та FP16. Ці формати зі зниженою точністю дозволяють значно швидше робити висновки, зберігаючи при цьому точність. Це особливо цінно в програмах реального часу, де низька затримка є критичною вимогою.

INT8 та FP16 оптимізація особливо ефективна в:

  • Потокове відео: Завдання обробки відео на основі штучного інтелекту, наприклад виявлення об’єктів, отримують переваги від цієї оптимізації, зменшуючи час, необхідний для обробки кадрів.
  • Рекомендаційні системи: прискорюючи висновок для моделей, які обробляють великі обсяги даних користувача, TensorRT забезпечує масштабну персоналізацію в реальному часі.
  • Обробка природних мов (НЛП): TensorRT покращує швидкість виконання завдань NLP, таких як створення тексту, переклад і резюмування, що робить їх придатними для додатків у реальному часі.

Розгортайте, запускайте та масштабуйте за допомогою NVIDIA Triton

Після оптимізації вашої моделі за допомогою TensorRT-LLM ви можете легко розгортати, запускати та масштабувати її за допомогою Сервер NVIDIA Triton Inference. Triton — це програмне забезпечення з відкритим кодом, яке підтримує динамічне пакетування, ансамблі моделей і високу пропускну здатність. Він забезпечує гнучке середовище для масштабного керування моделями ШІ.

Деякі ключові функції включають:

  • Паралельне виконання моделі: Запуск кількох моделей одночасно, максимально підвищуючи використання GPU.
  • Динамічне пакетування: поєднує кілька запитів на висновок в один пакет, зменшуючи затримку та збільшуючи пропускну здатність.
  • Потокове аудіо/відео входи: підтримує вхідні потоки в програмах реального часу, таких як аналітика відео в реальному часі або служби перетворення мови в текст.

Це робить Triton цінним інструментом для розгортання оптимізованих моделей TensorRT-LLM у виробничих середовищах, забезпечуючи високу масштабованість і ефективність.

Основні функції TensorRT-LLM для LLM Inference

API Python з відкритим кодом

TensorRT-LLM забезпечує високомодульний і API Python з відкритим кодом, що спрощує процес визначення, оптимізації та виконання LLM. API дозволяє розробникам створювати спеціальні LLM або змінювати готові відповідно до своїх потреб, не вимагаючи глибоких знань про CUDA або фреймворки глибокого навчання.

Пакетування в польоті та звернення уваги

Однією з видатних особливостей TensorRT-LLM є Дозування в польоті, який оптимізує генерацію тексту шляхом одночасної обробки кількох запитів. Ця функція мінімізує час очікування та покращує використання GPU за рахунок динамічного пакетування послідовностей.

Зауважимо, що сам Увага гарантує, що використання пам'яті залишається низьким навіть під час обробки довгих послідовностей введення. Замість виділення безперервної пам’яті для всіх маркерів, сторінкова увага розбиває пам’ять на «сторінки», які можна повторно використовувати динамічно, запобігаючи фрагментації пам’яті та підвищуючи ефективність.

Кілька GPU та багатовузловий висновок

Для великих моделей або складніших робочих навантажень підтримується TensorRT-LLM мульти-GPU та багатовузловий висновок. Ця можливість дозволяє розподілити обчислення моделі між кількома графічним процесором або вузлом, підвищуючи пропускну здатність і скорочуючи загальний час висновку.

Підтримка FP8

З появою FP8 (8-бітове число з плаваючою комою), TensorRT-LLM використовує графічні процесори NVIDIA H100 для перетворення вагових коефіцієнтів моделі в цей формат для оптимізованого висновку. FP8 дозволяє зменшити споживання пам’яті та пришвидшити обчислення, що особливо корисно у великомасштабних розгортаннях.

Архітектура та компоненти TensorRT-LLM

Розуміння архітектури TensorRT-LLM допоможе вам краще використовувати його можливості для висновків LLM. Давайте розберемо основні компоненти:

Визначення моделі

TensorRT-LLM дозволяє визначати LLM за допомогою простого API Python. API створює a представлення графа моделі, що полегшує керування складними рівнями, задіяними в архітектурах LLM, таких як GPT або BERT.

Прив'язки ваги

Перед компіляцією моделі ваги (або параметри) повинні бути прив’язані до мережі. Цей крок гарантує, що вагові коефіцієнти вбудовано в механізм TensorRT, що дає змогу робити швидкі та ефективні висновки. TensorRT-LLM також дозволяє оновлювати вагу після компіляції, додаючи гнучкості для моделей, які потребують частих оновлень.

Зіставлення шаблонів і злиття

Операція Fusion є ще однією потужною функцією TensorRT-LLM. Поєднуючи кілька операцій (наприклад, множення матриці з функціями активації) в одне ядро ​​CUDA, TensorRT мінімізує накладні витрати, пов’язані з кількома запусками ядра. Це зменшує передачу пам’яті та прискорює логічний висновок.

Плагіни

Щоб розширити можливості TensorRT, розробники можуть написати plugins— користувальницькі ядра, які виконують певні завдання, як-от оптимізація блоків уваги з кількома головками. Наприклад, Flash-Увага плагін значно покращує продуктивність рівнів уваги LLM.

Контрольні показники: підвищення продуктивності TensorRT-LLM

TensorRT-LLM демонструє значний приріст продуктивності для висновків LLM на різних графічних процесорах. Ось порівняння швидкості висновку (виміряної в токенах за секунду) за допомогою TensorRT-LLM на різних графічних процесорах NVIDIA:

МодельТочністьДовжина входу/виводуH100 (80 ГБ)A100 (80 ГБ)L40S FP8
GPTJ 6BFP8128/12834,95511,2066,998
GPTJ 6BFP82048/1282,8001,354747
LLaMA v2 7BFP8128/12816,98510,7256,121
LLaMA v3 8BFP8128/12816,70812,0858,273

Ці тести показують, що TensorRT-LLM забезпечує суттєве покращення продуктивності, особливо для довших послідовностей.

Практична робота: встановлення та збірка TensorRT-LLM

Крок 1: Створіть середовище контейнера

Для зручності використання TensorRT-LLM надає зображення Docker для створення контрольованого середовища для створення та запуску моделей.

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

Крок 2. Запустіть контейнер

Запустіть контейнер розробки з доступом до графічних процесорів 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

Крок 3: Створіть TensorRT-LLM із вихідного коду

Всередині контейнера скомпілюйте TensorRT-LLM за допомогою такої команди:

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

Цей параметр особливо корисний, коли ви хочете уникнути проблем із сумісністю, пов’язаних із залежностями Python, або коли зосереджуєтеся на інтеграції C++ у робочі системи. Після завершення збирання ви знайдете скомпільовані бібліотеки для середовища виконання C++ у cpp/build/tensorrt_llm каталог, готовий для інтеграції з вашими програмами C++.

Крок 4: зв’яжіть TensorRT-LLM C++ Runtime

Під час інтеграції TensorRT-LLM у ваші проекти C++ переконайтеся, що шляхи включення вашого проекту вказують на cpp/include каталог. Він містить стабільні підтримувані заголовки API. Бібліотеки TensorRT-LLM пов’язані як частина вашого процесу компіляції C++.

Наприклад, конфігурація CMake вашого проекту може містити:

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

Ця інтеграція дозволяє вам скористатися перевагами оптимізації TensorRT-LLM у ваших користувальницьких проектах C++, забезпечуючи ефективний висновок навіть у низькорівневих або високопродуктивних середовищах.

Розширені функції TensorRT-LLM

TensorRT-LLM — це більше, ніж просто бібліотека оптимізації; він містить кілька розширених функцій, які допомагають розгортати масштабне LLM. Нижче ми детально досліджуємо деякі з цих функцій.

1. Дозування в польоті

Традиційне дозування передбачає очікування, доки партія буде повністю зібрана, перед обробкою, що може спричинити затримки. Дозування в польоті змінює це шляхом динамічного запуску висновків щодо завершених запитів у пакеті, продовжуючи збирати інші запити. Це покращує загальну пропускну здатність за рахунок мінімізації часу простою та підвищення використання GPU.

Ця функція особливо цінна в програмах реального часу, таких як чат-боти або голосові помічники, де час відповіді є критичним.

2. Увага

Увага це метод оптимізації пам'яті для обробки великих вхідних послідовностей. Замість того, щоб вимагати безперервної пам’яті для всіх маркерів у послідовності (що може призвести до фрагментації пам’яті), Paged Attention дозволяє моделі розділяти дані кешу «ключ-значення» на «сторінки» пам’яті. Ці сторінки динамічно розподіляються та звільняються за потреби, оптимізуючи використання пам’яті.

Paged Attention має вирішальне значення для роботи з великою довжиною послідовності та зменшення витрат пам’яті, особливо в генеративних моделях, таких як GPT і LLaMA.

3. Спеціальні плагіни

TensorRT-LLM дозволяє розширити його функціональність за допомогою користувацькі плагіни. Плагіни — це визначені користувачем ядра, які забезпечують певну оптимізацію або операції, які не охоплюються стандартною бібліотекою TensorRT.

Наприклад, Flash-Увага плагін — це добре відоме спеціальне ядро, яке оптимізує багатоголові рівні уваги в моделях на основі Transformer. Використовуючи цей плагін, розробники можуть досягти значного прискорення обчислення уваги — одного з найбільш ресурсомістких компонентів LLM.

Щоб інтегрувати спеціальний плагін у вашу модель TensorRT-LLM, ви можете написати спеціальне ядро ​​CUDA та зареєструвати його в TensorRT. Плагін буде викликано під час виконання моделі, забезпечуючи індивідуальні покращення продуктивності.

4. FP8 Precision на NVIDIA H100

З Точність FP8, TensorRT-LLM використовує переваги останніх апаратних інновацій NVIDIA в Архітектура H100 Hopper. FP8 зменшує обсяг пам’яті LLM, зберігаючи вагові коефіцієнти та активації у 8-бітовому форматі з плаваючою комою, що забезпечує пришвидшення обчислень без значної втрати точності. TensorRT-LLM автоматично компілює моделі для використання оптимізованих ядер FP8, що ще більше прискорює час висновку.

Це робить TensorRT-LLM ідеальним вибором для великомасштабних розгортань, які вимагають найвищої продуктивності та енергоефективності.

Приклад: розгортання TensorRT-LLM із Triton Inference Server

Для виробничих розгортань, NVIDIA Сервер висновків Triton забезпечує надійну платформу для керування моделями в масштабі. У цьому прикладі ми продемонструємо, як розгорнути оптимізовану для TensorRT-LLM модель за допомогою Triton.

Крок 1: Налаштуйте репозиторій моделей

Створіть репозиторій моделей для Triton, у якому зберігатимуться ваші файли моделей TensorRT-LLM. Наприклад, якщо ви зібрали модель GPT2, структура вашого каталогу може виглядати так:

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

Крок 2: Створіть файл конфігурації Triton

У той же самий model_repository/gpt2/ створіть файл конфігурації під назвою config.pbtxt який говорить Тритону, як завантажити та запустити модель. Ось базова конфігурація 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]
  }
]

Крок 3: Запустіть Triton Server

Використовуйте таку команду Docker, щоб запустити Triton зі сховищем моделей:

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

Крок 4: Надішліть запити на висновок Triton

Коли сервер Triton запущено, ви можете надсилати йому запити на висновок за допомогою HTTP або gRPC. Наприклад, використовуючи curl відправити запит:

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 обробить запит за допомогою механізму TensorRT-LLM і поверне логіти як вихідні дані.

Найкращі практики для оптимізації висновків LLM за допомогою TensorRT-LLM

Щоб повністю використовувати потужність TensorRT-LLM, важливо дотримуватися найкращих практик як під час оптимізації моделі, так і під час розгортання. Ось кілька ключових порад:

1. Профілі своєї моделі перед оптимізацією

Перш ніж застосовувати такі оптимізації, як квантування або злиття ядра, скористайтеся інструментами профілювання NVIDIA (наприклад, Nsight Systems або TensorRT Profiler), щоб зрозуміти поточні вузькі місця у виконанні вашої моделі. Це дає змогу націлити конкретні області на вдосконалення, що призводить до більш ефективної оптимізації.

2. Використовуйте змішану точність для оптимальної продуктивності

При оптимізації моделей з TensorRT-LLM, використовуючи змішана точність (поєднання FP16 і FP32) забезпечує значне прискорення без значної втрати точності. Щоб отримати найкращий баланс між швидкістю та точністю, розгляньте можливість використання FP8, де це можливо, особливо на графічних процесорах H100.

3. Використовуйте увагу сторінок для великих послідовностей

Для завдань, які передбачають довгі послідовності введення, наприклад підсумовування документів або багаточергові розмови, завжди вмикайте Увага для оптимізації використання пам'яті. Це зменшує витрати пам’яті та запобігає помилкам нестачі пам’яті під час висновку.

4. Точне налаштування паралелізму для налаштувань із кількома GPU

Під час розгортання LLM на кількох графічних процесорах або вузлах важливо точно налаштувати параметри для тензорний паралельність та паралельність трубопроводу відповідно до конкретного робочого навантаження. Правильне налаштування цих режимів може призвести до значного підвищення продуктивності шляхом рівномірного розподілу обчислювального навантаження між графічними процесорами.

Висновок

TensorRT-LLM представляє зміну парадигми в оптимізації та розгортанні великих мовних моделей. Завдяки розширеним функціям, таким як квантування, злиття операцій, точність FP8 і підтримка кількох графічних процесорів, TensorRT-LLM дозволяє LLM працювати швидше та ефективніше на графічних процесорах NVIDIA. Незалежно від того, чи працюєте ви над програмами чату в режимі реального часу, системами рекомендацій або великомасштабними мовними моделями, TensorRT-LLM надає інструменти, необхідні для розширення меж продуктивності.

У цьому посібнику ви ознайомилися з налаштуванням TensorRT-LLM, оптимізацією моделей за допомогою API Python, розгортанням на Triton Inference Server і застосуванням найкращих практик для ефективного висновку. За допомогою TensorRT-LLM ви можете прискорити робочі навантаження AI, зменшити затримку та надати масштабовані рішення LLM для виробничих середовищ.

Для отримання додаткової інформації зверніться до офіційної особи Документація TensorRT-LLM та Документація Triton Inference Server.

Останні п’ять років я провів, занурюючись у захоплюючий світ машинного та глибокого навчання. Моя пристрасть і досвід допомогли мені внести свій внесок у понад 50 різноманітних проектів розробки програмного забезпечення, зосередивши особливу увагу на ШІ/ML. Моя постійна цікавість також привела мене до обробки природної мови, галузі, яку я хочу досліджувати далі.