Свяжитесь с нами:

TensorRT-LLM: полное руководство по оптимизации вывода больших языковых моделей для максимальной производительности

Искусственный интеллект

TensorRT-LLM: полное руководство по оптимизации вывода больших языковых моделей для максимальной производительности

mm
Квантование TensorRT-LLM NVIDIA, слияние операций, точность FP8 и поддержка нескольких GPU

Поскольку спрос на большие языковые модели (LLM) продолжает расти, обеспечение быстрого, эффективного и масштабируемого вывода становится как никогда важным. NVIDIA ТензорРТ-ЛЛМ TensorRT-LLM предлагает впечатляющий набор улучшений производительности, таких как квантование, слияние ядер, пакетирование в процессе выполнения и поддержка нескольких GPU. Эти усовершенствования позволяют достигать скорости вывода до 8 раз выше, чем традиционные методы на базе CPU, преобразуя способ развертывания LLM в производстве.

Это всеобъемлющее руководство рассмотрит все аспекты TensorRT-LLM, от его архитектуры и ключевых функций до практических примеров развертывания моделей. Независимо от того, являетесь ли вы инженером ИИ, разработчиком ПО или исследователем, это руководство даст вам знания по использованию TensorRT-LLM для оптимизации вывода LLM на графических процессорах NVIDIA.

Ускорение вывода LLM с помощью TensorRT-LLM

TensorRT-LLM обеспечивает кардинальное улучшение производительности вывода LLM. Согласно тестам NVIDIA, приложения на базе TensorRT показывают до 8x быстрее скорость вывода по сравнению с платформами только на CPU. Это важное достижение в приложениях реального времени, таких как чат-боты, системы рекомендаций и автономные системы, требующие быстрых ответов.

Как это работает

TensorRT-LLM ускоряет вывод за счет оптимизации нейронных сетей во время развертывания с использованием таких методов, как:

  • квантование: Снижает точность весов и активаций, уменьшая размер модели и повышая скорость вывода.
  • Слияние слоев и тензоров: Объединяет такие операции, как функции активации и умножение матриц, в одну операцию.
  • Настройка ядра: выбирает оптимальные ядра CUDA для вычислений на GPU, сокращая время выполнения.

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

Оптимизация производительности вывода с помощью TensorRT

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

Некоторые из наиболее эффективных методов включают в себя:

  • квантование: Это снижает численную точность параметров модели, сохраняя при этом высокую точность, что эффективно ускоряет вывод.
  • Тензорное слияние: Объединяя несколько операций в единое ядро ​​CUDA, TensorRT минимизирует накладные расходы памяти и увеличивает пропускную способность.
  • Автонастройка ядра: TensorRT автоматически выбирает лучшее ядро ​​для каждой операции, оптимизируя вывод для данного графического процессора.

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

Ускорение рабочих нагрузок ИИ с помощью TensorRT

TensorRT ускоряет выполнение задач глубокого обучения за счет внедрения точных оптимизаций, таких как INT8 и FP16. Эти форматы с пониженной точностью позволяют значительно ускорить вывод, сохраняя точность. Это особенно ценно в приложениях реального времени, где низкая задержка является критическим требованием.

INT8 и FP16 Оптимизации особенно эффективны в:

  • Потоковое видео: Задачи обработки видео на основе искусственного интеллекта, такие как обнаружение объектов, выигрывают от этих оптимизаций за счет сокращения времени, необходимого для обработки кадров.
  • Системы рекомендаций: Ускоряя вывод для моделей, обрабатывающих большие объемы пользовательских данных, TensorRT обеспечивает масштабируемую персонализацию в реальном времени.
  • Обработка естественного языка (НЛП): TensorRT повышает скорость выполнения задач обработки естественного языка, таких как генерация текста, перевод и реферирование, что делает их пригодными для приложений реального времени.

Развертывание, запуск и масштабирование с NVIDIA Triton

После оптимизации модели с помощью TensorRT-LLM вы можете легко развернуть, запустить и масштабировать ее с помощью Сервер вывода NVIDIA Triton. Triton — это программное обеспечение с открытым исходным кодом, которое поддерживает динамическое пакетирование, ансамбли моделей и высокую пропускную способность. Оно предоставляет гибкую среду для управления моделями ИИ в масштабе.

Некоторые из ключевых функций включают в себя:

  • Параллельное выполнение модели: одновременный запуск нескольких моделей с максимальным использованием графического процессора.
  • Динамическое пакетирование: Объединяет несколько запросов на вывод в один пакет, сокращая задержку и увеличивая пропускную способность.
  • Потоковые аудио/видео входы: Поддерживает входные потоки в приложениях реального времени, таких как аналитика видео в реальном времени или службы преобразования речи в текст.

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

Основные возможности TensorRT-LLM для вывода LLM

API Python с открытым исходным кодом

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

Группировка в полете и пейджинговое внимание

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

Помимо вышесказанного, Внимание, страница гарантирует, что использование памяти остается низким даже при обработке длинных последовательностей ввода. Вместо выделения непрерывной памяти для всех токенов, страничное внимание разбивает память на «страницы», которые могут повторно использоваться динамически, предотвращая фрагментацию памяти и повышая эффективность.

Многопроцессорный и многоузловой вывод

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

Поддержка FP8

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

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

Понимание архитектуры TensorRT-LLM поможет вам лучше использовать его возможности для вывода LLM. Давайте разберем ключевые компоненты:

Определение модели

TensorRT-LLM позволяет вам определять LLM с помощью простого API Python. API создает представление графа модели, что упрощает управление сложными слоями, задействованными в архитектурах LLM, таких как GPT или BERT.

Крепления для веса

Перед компиляцией модели веса (или параметры) должны быть привязаны к сети. Этот шаг гарантирует, что веса встроены в движок TensorRT, что позволяет быстро и эффективно делать выводы. TensorRT-LLM также позволяет обновлять веса после компиляции, что добавляет гибкости для моделей, которым требуются частые обновления.

Сопоставление и слияние образцов

Операция «Слияние» — еще одна мощная функция TensorRT-LLM. Объединяя несколько операций (например, умножение матриц с функциями активации) в одно ядро ​​CUDA, TensorRT минимизирует накладные расходы, связанные с многократными запусками ядра. Это сокращает передачу памяти и ускоряет вывод.

Плагины

Чтобы расширить возможности TensorRT, разработчики могут написать плагины— пользовательские ядра, которые выполняют определенные задачи, такие как оптимизация многоголовых блоков внимания. Например, Вспышка внимания плагин значительно улучшает производительность слоев внимания LLM.

Тесты: прирост производительности TensorRT-LLM

TensorRT-LLM демонстрирует значительный прирост производительности для вывода LLM на различных GPU. Вот сравнение скорости вывода (измеряется в токенах в секунду) с использованием TensorRT-LLM на различных GPU NVIDIA:

Модель Точность Длина ввода/вывода H100 (80 ГБ) A100 (80 ГБ) L40S FP8
ГПТЖ 6Б FP8 128/128 34,955 11,206 6,998
ГПТЖ 6Б 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

Эти тесты показывают, что 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++

При интеграции 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.

Так, например, Вспышка внимания Плагин — это хорошо известное пользовательское ядро, которое оптимизирует многоголовые слои внимания в моделях на основе Transformer. Используя этот плагин, разработчики могут добиться существенного ускорения вычисления внимания — одного из самых ресурсоемких компонентов LLM.

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

4. Точность FP8 на NVIDIA H100

Благодаря более чем точность FP8TensorRT-LLM использует новейшие аппаратные инновации NVIDIA в Архитектура бункера H100. 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 который сообщает Triton, как загружать и запускать модель. Вот базовая конфигурация для 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

Используйте следующую команду 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. Тонкая настройка параллелизма для многопроцессорных конфигураций

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

Заключение

TensorRT-LLM представляет собой смену парадигмы в оптимизации и развертывании больших языковых моделей. Благодаря своим передовым функциям, таким как квантование, слияние операций, точность FP8 и поддержка нескольких GPU, TensorRT-LLM позволяет LLM работать быстрее и эффективнее на графических процессорах NVIDIA. Независимо от того, работаете ли вы над приложениями чата в реальном времени, системами рекомендаций или крупномасштабными языковыми моделями, TensorRT-LLM предоставляет инструменты, необходимые для расширения границ производительности.

Это руководство провело вас через настройку TensorRT-LLM, оптимизацию моделей с помощью его API Python, развертывание на Triton Inference Server и применение лучших практик для эффективного вывода. С TensorRT-LLM вы можете ускорить рабочие нагрузки ИИ, сократить задержку и предоставить масштабируемые решения LLM для производственных сред.

Для получения дополнительной информации обратитесь к официальному Документация TensorRT-LLM и Документация сервера вывода Triton.

Последние пять лет я погружался в увлекательный мир машинного обучения и глубокого обучения. Моя страсть и опыт позволили мне принять участие в более чем 50 различных проектах по разработке программного обеспечения, уделяя особое внимание AI/ML. Мое постоянное любопытство также привлекло меня к обработке естественного языка, области, которую я очень хочу исследовать дальше.