Эта статья переведена командой инженеров BentoML. Исходная ссылка: https://www.bentoml.com/blog/benchmarking-llm-inference-backends.
Выбор правильного механизма вывода для обслуживания больших языковых моделей (LLM) имеет решающее значение. Это не только гарантирует, что пользователи получат наилучшие впечатления за счет высокой скорости генерации, но также снижает затраты и повышает эффективность за счет высокой скорости генерации токенов и использования ресурсов. Сегодня разработчики могут выбирать из множества механизмов вывода, созданных известными исследовательскими и отраслевыми группами. Однако выбор лучшего бэкэнда для конкретного варианта использования может оказаться непростой задачей.
Чтобы помочь разработчикам принимать обоснованные решения, команда инженеров BentoML создала службы вывода Llama 3 на BentoCloud с использованием vLLM, LMDeploy, MLC-LLM, TensorRT-LLM и Hugging Face TGI, а также провела комплексное тестирование производительности вывода.
Эти механизмы вывода оцениваются с использованием следующих двух ключевых показателей:
1. Сравните основные идеи
Мы протестировали 4-битные квантованные модели Llama 3 8B и 70B в BentoCloud с использованием экземпляра графического процессора A100 емкостью 80 ГБ (gpu.a100.1x80), охватывая три различные рабочие нагрузки вывода (10, 50 и 100 одновременных пользователей). Вот некоторые из наших ключевых выводов:
Llama 3 8B
Llama 3 8B: токен времени до первого (TTFT) с разными серверными модулями
Llama 3 8B: Скорость генерации токенов для разных серверов
LLama3 70B 4-битное квантование
Llama 3 70B Q4: время до первого токена (TTFT) с разными серверными модулями
Llama 3 70B Q4: Скорость генерации токенов на разных бэкендах
Мы обнаружили сильную корреляцию между скоростью генерации токенов и использованием графического процессора при реализации серверной части вывода. Серверные системы, способные поддерживать высокую скорость генерации токенов, также демонстрируют почти 100% загрузку графического процессора. Напротив, серверная часть с низкой загрузкой графического процессора, по-видимому, ограничена процессом Python.
2. Помимо производительности
Помимо производительности, при выборе серверной части для служб LLM необходимо учитывать и другие важные факторы. Вот что, по нашему мнению, является ключевыми аспектами, которые следует учитывать при выборе идеального механизма вывода:
3. Опыт разработчика
Удобный для пользователя сервер вывода должен обеспечивать возможности быстрой разработки и высокую удобство сопровождения кода для приложений ИИ, работающих на LLM.
стабильная версия:LMDeploy、TensorRT-LLM、vLLM и TGI Оба предоставляют стабильные версии. MLC-LLM В настоящее время не существует стабильных выпусков с тегами, есть только ночные сборки. Одним из возможных решений является сборка из исходного кода.
Составлено Моделью:TensorRT-LLM и MLC-LLM Требуется явный этап компиляции модели, который может привести к дополнительным задержкам при холодном запуске во время развертывания.
документ:
4. Концепция
Llama 3
Llama 3 — это последняя версия серии Llama LLM, доступная в различных конфигурациях. В наших тестах мы использовали следующие размеры моделей.
BentoML и BentoCloud
Мы обязательно используем BentoML Предоставление бэкэнда вывода и использования Python Изначально обеспечивает вывод назад По сравнению с частью, это лишь добавляет минимальные накладные расходы. Накладные расходы да Зависит от Обеспечивает расширение, наблюдаемость IO Функция сериализации. использовать BentoML и BentoCloud дает нам последовательный RESTful API, тем самым упрощая настройку производительностиидействовать。
Серверы вывода
Различные серверные части предоставляют разные способы обслуживания LLM, каждый метод имеет уникальные особенности и технологию оптимизации. Проверяем все рассуждениязадняя часть следовать Apache 2.0 лицензия.
BentoML легко интегрировать с различными серверными модулями вывода в самостоятельный хостинг LLM. Сообщество BentoML предоставляет следующие примеры проектов на GitHub, чтобы помочь вам в этом процессе.
BentoVLLM:
https://github.com/bentoml/BentoVLLM
BentoMLCLLM:
https://github.com/bentoml/BentoMLCLLM
BentoLMDeploy:
https://github.com/bentoml/BentoLMDeploy
BentoTRTLLM:
https://github.com/bentoml/BentoTRTLLM
BentoTGI:
https://github.com/bentoml/BentoTGI
5. Настройка бенчмарка
Мы настроили тестовую среду следующим образом.
Модель
мы тестировали Meta-Llama-3-8B-Instruct и Meta-Llama-3-70B-Instruct 4-bit Количественная оценка Модель。для 70B Модель, которую мы выполнили 4-bit квантовано так, что его можно измерить за один A100-80G GPU беги дальше. Если механизм вывода поддерживает собственное квантование, мы будем использовать метод квантования, предоставляемый механизмом вывода. Например, для MLC-LLM, мы используем q4f16_1 Количественная схема. В противном случае мы используем Hugging Face из AWQ Количественная оценка casperhansen/llama-3-70b-instruct-awqМодель。
Обратите внимание, что в дополнение к использованию общих методов оптимизации вывода (например, непрерывной пакетной обработки, флэш-памяти) attention и префиксный кеш), мы не нацелены на каждую индивидуальную заднюю часть Тонкая настройка конфигурации вывода (GPU Использование памяти, максимальное количество последовательностей, подкачка KV размер блока кэша и т. д.). Это потому, что с нашим сервисом LLM По мере роста числа этот подход не масштабируется. Обеспечить оптимальный набор параметров вывода дазадняя частьпроизводительности простота использования является неявной мерой.
Тестовый клиент
Мы создали собственный сценарий тестирования. Скрипт имитирует реальный сценарий, варьируя пользовательскую нагрузку и отправляя запросы на сборку на разных уровнях параллелизма.
Наш тестовый клиент доступен по адресу 20 Создайте целевое количество пользователей в течение нескольких секунд, после чего он ответит, отправив случайно выбранное слово-подсказку и сгенерировав запрос. LLM задняя часть провести стресс-тест. мы тестировали 10、50 и 100 отдельные одновременные пользователи для оценки производительности системы при различных нагрузках.
Каждый стресс-тест длился 5 минут.,в этот период,Мы собираем метрики вывода каждые 5 секунд. Этой продолжительности достаточно, чтобы наблюдать потенциальную деградацию, узкие места в использовании ресурсов или другие проблемы, которые могут не проявляться в более коротких тестах.
Для получения дополнительной информации ознакомьтесь с исходным кодом нашего Тестового клиента: https://github.com/bentoml/llm-bench.
Набор данных подсказки слова
Мы из тестового слова да из databricks-dolly-15k Извлечение набора данных из. для каждого индивидуального сеанса тестирования мы случайным образом выбираем слова-подсказки из этого набора данных. Мы также протестировали генерацию текста с системными подсказками и без системных подсказок. какой-то задний часть может оптимизировать общие сценарии системных подсказок, включив кэширование префиксов.
Версии библиотеки
6. Предложения
LLM Область оптимизации вывода быстро развивается и получила обширные исследования. Лучшие сегодняшние рассуждения назад часть вскоре может быть потеснена новичками. На основе сравнительного анализа и исследований юзабилити, проведенных на момент написания этой статьи, мы протестировали Llama 3 Модель Выберите наиболее подходящую иззаднюю частьпредложил следующеепредположение。
Llama 3 8B
для Llama 3 8B Модель,LMDeploy Всегда обеспечивайте более низкую нагрузку при всех пользовательских нагрузках. TTFT и Самый высокийиз token Скорость генерации. Это простота использования — еще одно важное преимущество отдельного человека, поскольку оно может динамически конвертировать Воля Модель в TurboMind движок, тем самым упрощая процесс развертывания. На момент написания LMDeploy Механизм внимания для использования скользящего окна из Модели (например. Mistral и Qwen 1.5) Предоставляется ограниченная поддержка.
Даже при увеличении пользовательской нагрузки vLLM Его также всегда можно поддерживать на низком уровне. TTFT, что делает его подходящим для сценариев, где важно поддерживать низкую задержку. vLLM Предлагает простую интеграцию, обширную поддержку и широкую совместимость с оборудованием, и все это с легкостью. Мощный и поддерживается сообществом открытого исходного кода.
MLC-LLM Обеспечивает самую низкую производительность при меньшей пользовательской нагрузке TTFT и первоначально остается высоким decoding скорость. После длительного периода стресс-тестирования decoding Скорость значительно упала. Несмотря на эти проблемы, MLC-LLM По-прежнему демонстрирует большой потенциал. Решите эти проблемы производительности и внедрите стабильную версия может значительно повысить ее эффективность.
Llama 3 70B 4-bit Количественная оценка
дляLlama 3 70B 4 bit Количественная оценка,LMDeploy Впечатляющая производительность при любых пользовательских нагрузках, TTFT самый низкий. Он также поддерживает более высокий token Скорость генерации делает его идеальным для приложений, требующих низкой задержки и высокой пропускной способности. ЛМДеплой еще и потому, что Что Выделитесь простотой использования,он можетсуществовать Не требуется обширная настройка или компиляция.издело быстро Преобразовать модель,Это делает его идеальным для сценариев быстрого развертывания.
TensorRT-LLM По пропускной способности это то же самое, что и LMDeploy Сопоставимо, но производительность задержки не так хороша в сценариях с высокой пользовательской нагрузкой. LMDeploy. потому что TensorRT-LLM Зависит от Nvidia Поддержка, мы ожидаем, что эти пробелы будут устранены в ближайшее время. Однако у него есть неотъемлемые требования к компиляции Модели и к Nvidia CUDA GPU Это зависит от намеренного выбора дизайна, который может привести к ограничениям при развертывании.
vLLM Возможность оставаться на низком уровне при увеличении пользовательской нагрузки TTFT, простота использования является существенным преимуществом для многих пользователей. Однако на момент написания этой статьи задняя часть частьдля AWQ Количественная Оценка качества не оптимизирована в достаточной степени, что приводит к Количественной оценка Модельиз decoding Производительность далека от идеала.