Как готовить Triton: рецепты вашей собственной Inference-платформы |
||
|
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ Атаки на ИИ Внедрение ИИИИ теория Компьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Промпты. Генеративные запросы Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2025-04-23 12:45 Меня зовут Антон, я DevOps-инженер в команде Data/ML-продуктов Selectel. Если вам нужно запустить небольшой инференс одной ML-модели, можно взять команду бэкендеров, дать им эту модель, они обернут ее в эндпоинт — и готово. Достаточно короткого скрипта из нескольких строк на Python. Но что если нужно запускать несколько моделей, оптимизировать выполнение, работать с ансамблем моделей, задействовать CPU и GPU одновременно и т. д.? Все эти проблемы решает NVIDIA Triton Inference Server. Правда, он добавляет одну новую: разобраться с ним и его документацией — тот еще квест. В статье посмотрим, насколько сложной задачей может оказаться создание собственного инференса и какие аспекты нужно учитывать. Научимся запускать различные форматы моделей, посмотрим на основные фичи Inference-платформы Selectel, запустим несколько популярных LLM и моделей, а также познакомимся со способами оптимизации конфигурации и проектирования интерфейса для модели. Используйте навигацию, если не хотите читать текст целиком: Немного предыстории В конце 2024 года мы анонсировали новый продукт — частную инсталляцию Inference-платформы Selectel. За время проведения демонстраций, общения с клиентами и эксплуатации платформы мы пришли к вполне очевидному выводу — для работы с ней пользователям нужны туториалы и грамотные инструкции по NVIDIA Triton Inference Server. Сначала я написал небольшую книгу рецептов с туториалами по работе с Inference-платформой Selectel и NVIDIA Triton Inference Server в целом. Но сейчас очевидно, что нужно копнуть чуть глубже и датальнее разобрать примеры. Кстати, подробная статья о миграции на Triton и о том, зачем нужен специализированный инференс-сервер, есть в документации NVIDIA. Правда, она на английском, но я уверен, вас это не остановит. Мы же тем временем перейдем к разбору примеров работы с Inference-платформой и NVIDIA Triton Inference Server. В этой главе я расскажу о трех сценариях, которые мы показываем на демонстрации нашего продукта. Их можно воспроизвести у себя самостоятельно, обладая следующей инфраструктурой:
Также понадобятся ноды с GPU. Для их настройки можно использовать GPU-оператор. Как это сделать, я описывал в статье на Хабре. Также не забываем на шаблонах групп нод включить автоскейлинг! О нем тоже есть подробная статья. Что касается слоя Application, нам понадобятся следующие сервисы.
Подробные примеры с кодом для каждого сценария лежат в директории нашего репозитория. Я же обозначу основные моменты в данной статье. Для всех сценариев нужно задать конфигурацию для модели. Используем Falcon7b как базовый пример деплоя с бэкендом на Python. Структуру репозитория можно посмотреть на GitHub. Сам же пример был взят из другого репозитория — здесь мы хотели показать, как использовать бэкенд Python для работы с моделями с Hugging Face. Сейчас же лучше использовать формат VLLM или TensorRT, если вы хотите деплоить такие модели в продакшн. Все файлы заливаем в объектное хранилище, например, утилитой Rclone. Заполним конфигурационный файл: На этом базовая подготовка закончена, можно приступать к деплою Triton! Базовый сценарий Суть сценария заключается в получении эндпоинта из нашей модели. ![]() Мы взяли за основу чарт с GitHub. Дописали работу с Istio, объектным и файловым хранилищами. Для своих опытов вы можете использовать пример от NVIDIA, в случае работы с нашей платформой — следуйте инструкциям в репозитории. После деплоя вам будет доступен дашборд Grafana, где указываются статусы Triton, метрики насыщения, данные GPU, логи и трафик. ![]() В целом, вы сами сможете реализовать такой дашборд с помощью этих референсов: Проверим работоспособность инференса: ![]() В следующем сценарии рассмотрим, что будет с инференсом под нагрузкой. Автоскейлинг В этом сценарии мы подадим нагрузку на наш инференс-сервер. В values чарта укажем параметры автоскейлинга и таргет, по которому будет происходит масштабирование. ![]() Метрику avg_time_queue_us создает Prometheus-адаптер, используя формулу: Нагрузку я подаю с помощью утилиты perf_analzyer. Вы же можете использовать locust, k6 и другие инструменты нагрузочного тестирования. Отправим десять одновременных запросов от пользователей в течении 100 секунд. ![]() Перейдем к последнему сценарию. Проверим возможность обновлять модели без даунтаймов. Canary-деплой Мы задеплоим две версии модели и подадим 90% трафика на первую версию, 10% — на вторую. ![]() В этом сценарии активно участвуют Istio и kiali. Istio перенаправляет трафик на нужные версии Triton. В нашем случае это отдельные инсталляции деплоймента в values. После деплоя и подачи трафика на эндпоинт мы можем посмотреть анимацию трафика в kiali. В этом сервисе можно отслеживать статусы ошибок запросов на каждую версию, а также изменить процентное соотношение трафика. ![]() В следующей главе мы рассмотрим альтернативные сценарии работы с Triton: как он работает с различными форматами моделей, популярными LLM и как можно подобрать оптимальный конфигурационный файл. Рецепты приготовления Triton Inference Server Итак, мы посмотрели, как работают основные фичи Inference-платформы Selectel. В этой главе расширим список доступных для нас функциональностей за счет использования ядра платформы Triton Inference Server. Работа с различными форматами моделей Я подготовил несколько примеров по использованию различных форматов моделей. Для каждого формата у Triton реализован отдельный бэкенд. Он также предоставляет возможность реализовывать свои бэкенды, если готовые не подходят.
Эти примеры предназначены для демонстрации гибкости Triton Inference Server в работе с различными форматами моделей и бэкендами, а также для предоставления практических примеров развертывания и использования моделей в различных сценариях. Популярные модели и LLM — foundation models Достаточно популярная на данный момент модель предоставления LLM as a Service — Foundation models. В Triton мы можем использовать два бэкенда: TensorRT LLM и vLLM.
Как выбрать между двумя? Если нужны удобство и большой парк моделей, выбирайте VLLM. Если в приоритете производительность инференса, но есть сложности в конфигурации, присмотритесь к TensorRT. Для импорта конфигурации модели каждого из бэкендов я рекомендую использовать утилиту triton_cli. С помощью простых команд она создаст для вас конфигурацию как для VLLM, так и для TensorRT. В наших рецептах есть примеры работы как с vLLM, так и с TensorRT для Whisper. Вы можете попробовать развернуть эти модели через Helm-чарт или в Docker-контейнере. Также вы можете найти примеры с использованием импорта моделей из Hugging Face с помощью бэкенда Python и использованием Stable Diffusion, где реализован собственный бэкенд для работы с этой моделью в формате TensorRT. Подбор оптимальной конфигурации инференса При использовании Triton, возможно, вы задаетесь вопросом, как правильно подобрать формат модели и конфигурацию инференс-сервера. Как вы могли заметить, конфигураций бывает достаточно много. Концептуально я отвечал на этот вопрос в ретроспективе разработки нашей Inference-модели. ![]() В нашем репозитории с рецептами я выделил два примера: с Model Navigator и Model Analyzer. Model Navigator Model Navigator — это инструмент для оптимизации и развертывания моделей глубокого обучения, разработанный для работы с NVIDIA GPU. Он автоматизирует процессы экспорта, конверсии, тестирования корректности и профилирования моделей, поддерживая такие фреймворки, как PyTorch, TensorFlow и ONNX. Model Navigator позволяет пользователям эффективно искать лучшие варианты развертывания моделей, предоставляя единый интерфейс для различных фреймворков. Для подготовки моделей к эксплуатации на NVIDIA Triton Inference Server необходимо выполнить несколько действий.
Model Analyzer Model Analyzer — это инструмент CLI, который поможет найти оптимальную конфигурацию на имеющемся оборудовании для одиночной, множественной, ансамблевой или BLS-модели, запущенной на Triton Inference Server. Сервис также генерирует отчеты, чтобы помочь лучше понять компромиссы различных конфигураций и их требования к вычислительным ресурсам и памяти. Он запускает несколько инференс-сервисов с Triton и подает нагрузку на них с помощью perf_client — утилиты для высоконагруженных тестов. Далее формирует отчет, в котором указана оптимальная конфигурация, где perf_client показал лучшую производительность. Стоит отметить, что для подбора конфигурации LLM Model Analyzer работать не будет, для подробностей смотрите pull request. Разработчики рекомендуют для подбора конфигурации в этом случае использовать genai perf в режиме analyze. User Interface После деплоя модели в Infererence-платформу вы получается эндпоинт. Но это не конечное приложение для пользователей. Оно скорее нужно, если вы хотите предоставить им интерфейс для работы с моделями. Например, для личного ChatGPT это может быть OpenWebUI, а для собственного генератора картинок — Automatic1111. Если рассматривать небольшие приложения, можно использовать несколько рецептов из нашего репозитория. Например, вы хотите создать Telegram-бота. Рецепт достаточно прост — деплоим Whisper в Inference-платформу, подключаем эндпоинт и самого бота. Теперь вам доступен транскибатор аудио даже без премиум-аккаунта в Telegram! ![]() Также стоит упомянуть отличный фреймворк Gradio. Мы также подготовили рецепт его сборки для нашего эндпоинта. Он позволяет на Python достаточно просто создать интерфейс для взаимодействия с моделями. Заключение Как вы могли заметить, в текущей версии Inference-платформы нужно обладать навыками работы с Kubernetes. Она задумывалась как частная инсталляция в проект клиента с возможностью кастомизировать каждый параметр платформы под его нужды. Следовательно, инсталляция скорее всего подойдет в случаях, когда у вас есть команда инженеров, способных работать с K8s. Сейчас мы разрабатываем PaaS-версии платформы, где первым этапом вы сможете запускать уже известные LLM по концепции foundation models. В этой версии вы не будете напрямую взаимодействовать с K8s — только через API и веб-интерфейс! И здесь мы ищем Gо-разработчика, который поможет нашей команде создать качественный продукт. Источник: habr.com Комментарии: |
|