Triton Inference Server с Ultralytics YOLO11
Triton Inference Server (ранее известный как TensorRT Inference Server) – это программное решение с открытым исходным кодом, разработанное NVIDIA. Оно предоставляет облачное решение для инференса, оптимизированное для NVIDIA GPU. Triton упрощает развертывание моделей ИИ в масштабе в production-среде. Интеграция Ultralytics YOLO11 с Triton Inference Server позволяет развертывать масштабируемые, высокопроизводительные deep learning инференс-нагрузки. В этом руководстве описаны шаги по настройке и тестированию интеграции.
Смотреть: Начало работы с NVIDIA Triton Inference Server.
Что такое Triton Inference Server?
Triton Inference Server предназначен для развертывания различных моделей искусственного интеллекта в production-среде. Он поддерживает широкий спектр фреймворков глубокого и машинного обучения, включая TensorFlow, PyTorch, ONNX Runtime и многие другие. Основные варианты его использования:
- Обслуживание нескольких моделей из одного экземпляра сервера
- Динамическая загрузка и выгрузка моделей без перезапуска сервера
- Ансамблевый вывод, позволяющий использовать несколько моделей вместе для достижения результатов
- Контроль версий моделей для A/B-тестирования и последовательных обновлений
Основные преимущества Triton Inference Server
Использование Triton Inference Server с Ultralytics YOLO11 предоставляет несколько преимуществ:
- Автоматическая пакетная обработка: Группирует несколько запросов ИИ вместе перед их обработкой, снижая задержку и повышая скорость логического вывода
- Интеграция с Kubernetes: Облачно-ориентированный дизайн бесперебойно работает с Kubernetes для управления и масштабирования приложений искусственного интеллекта.
- Аппаратные оптимизации: В полной мере использует возможности NVIDIA GPU для максимальной производительности.
- Гибкость фреймворка: Поддерживает несколько AI фреймворков, включая TensorFlow, PyTorch, ONNX и TensorRT
- Открытый исходный код и настраиваемость: Может быть модифицирован для соответствия конкретным потребностям, обеспечивая гибкость для различных AI-приложений.
Предварительные требования
Прежде чем продолжить, убедитесь, что у вас есть следующие необходимые условия:
- Docker установлен на вашем компьютере
- Установите
tritonclient
:pip install tritonclient[all]
Экспорт YOLO11 в формат ONNX
Перед развертыванием модели на Triton ее необходимо экспортировать в формат ONNX. ONNX (Open Neural Network Exchange) — это формат, который позволяет передавать модели между различными фреймворками глубокого обучения. Используйте export
функция из YOLO
класса:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt") # load an official model
# Retrieve metadata during export. Metadata needs to be added to config.pbtxt. See next section.
metadata = []
def export_cb(exporter):
metadata.append(exporter.metadata)
model.add_callback("on_export_end", export_cb)
# Export the model
onnx_file = model.export(format="onnx", dynamic=True)
Настройка репозитория моделей Triton
Репозиторий моделей Triton — это место хранения, где Triton может получать доступ к моделям и загружать их.
-
Создайте необходимую структуру каталогов:
from pathlib import Path # Define paths model_name = "yolo" triton_repo_path = Path("tmp") / "triton_repo" triton_model_path = triton_repo_path / model_name # Create directories (triton_model_path / "1").mkdir(parents=True, exist_ok=True)
-
Переместите экспортированную ONNX модель в репозиторий Triton:
from pathlib import Path # Move ONNX model to Triton Model path Path(onnx_file).rename(triton_model_path / "1" / "model.onnx") # Create config file (triton_model_path / "config.pbtxt").touch() data = """ # Add metadata parameters { key: "metadata" value { string_value: "%s" } } # (Optional) Enable TensorRT for GPU inference # First run will be slow due to TensorRT engine conversion optimization { execution_accelerators { gpu_execution_accelerator { name: "tensorrt" parameters { key: "precision_mode" value: "FP16" } parameters { key: "max_workspace_size_bytes" value: "3221225472" } parameters { key: "trt_engine_cache_enable" value: "1" } parameters { key: "trt_engine_cache_path" value: "/models/yolo/1" } } } } """ % metadata[0] # noqa with open(triton_model_path / "config.pbtxt", "w") as f: f.write(data)
Запуск сервера логического вывода Triton
Запустите сервер логического вывода Triton, используя Docker:
import contextlib
import subprocess
import time
from tritonclient.http import InferenceServerClient
# Define image https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tritonserver
tag = "nvcr.io/nvidia/tritonserver:24.09-py3" # 8.57 GB
# Pull the image
subprocess.call(f"docker pull {tag}", shell=True)
# Run the Triton server and capture the container ID
container_id = (
subprocess.check_output(
f"docker run -d --rm --gpus 0 -v {triton_repo_path}:/models -p 8000:8000 {tag} tritonserver --model-repository=/models",
shell=True,
)
.decode("utf-8")
.strip()
)
# Wait for the Triton server to start
triton_client = InferenceServerClient(url="localhost:8000", verbose=False, ssl=False)
# Wait until model is ready
for _ in range(10):
with contextlib.suppress(Exception):
assert triton_client.is_model_ready(model_name)
break
time.sleep(1)
Затем запустите вывод, используя модель Triton Server:
from ultralytics import YOLO
# Load the Triton Server model
model = YOLO("http://localhost:8000/yolo", task="detect")
# Run inference on the server
results = model("path/to/image.jpg")
Очистите контейнер:
# Kill and remove the container at the end of the test
subprocess.call(f"docker kill {container_id}", shell=True)
Оптимизация TensorRT (опционально)
Для еще большей производительности можно использовать TensorRT с Triton Inference Server. TensorRT — это высокопроизводительный оптимизатор глубокого обучения, разработанный специально для графических процессоров NVIDIA, который может значительно увеличить скорость инференса.
Ключевые преимущества использования TensorRT с Triton включают:
- До 36 раз более высокая скорость инференса по сравнению с неоптимизированными моделями
- Аппаратные оптимизации для максимального использования GPU
- Поддержка форматов пониженной точности (INT8, FP16) с сохранением точности.
- Слияние слоев для снижения вычислительных затрат
Чтобы использовать TensorRT напрямую, вы можете экспортировать свою модель YOLO11 в формат TensorRT:
from ultralytics import YOLO
# Load the YOLO11 model
model = YOLO("yolo11n.pt")
# Export the model to TensorRT format
model.export(format="engine") # creates 'yolo11n.engine'
Для получения дополнительной информации об оптимизации TensorRT см. руководство по интеграции TensorRT.
Следуя приведенным выше шагам, вы можете эффективно развертывать и запускать модели Ultralytics YOLO11 на сервере Triton Inference Server, обеспечивая масштабируемое и высокопроизводительное решение для задач логического вывода глубокого обучения. Если у вас возникнут какие-либо проблемы или дополнительные вопросы, обратитесь к официальной документации Triton или обратитесь за поддержкой к сообществу Ultralytics.
Часто задаваемые вопросы
Как настроить Ultralytics YOLO11 с NVIDIA Triton Inference Server?
Настройка Ultralytics YOLO11 с NVIDIA Triton Inference Server включает в себя несколько ключевых шагов:
-
Экспорт YOLO11 в формат ONNX:
from ultralytics import YOLO # Load a model model = YOLO("yolo11n.pt") # load an official model # Export the model to ONNX format onnx_file = model.export(format="onnx", dynamic=True)
-
Настройте репозиторий моделей Triton:
from pathlib import Path # Define paths model_name = "yolo" triton_repo_path = Path("tmp") / "triton_repo" triton_model_path = triton_repo_path / model_name # Create directories (triton_model_path / "1").mkdir(parents=True, exist_ok=True) Path(onnx_file).rename(triton_model_path / "1" / "model.onnx") (triton_model_path / "config.pbtxt").touch()
-
Запустите Triton Server:
import contextlib import subprocess import time from tritonclient.http import InferenceServerClient # Define image https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tritonserver tag = "nvcr.io/nvidia/tritonserver:24.09-py3" subprocess.call(f"docker pull {tag}", shell=True) container_id = ( subprocess.check_output( f"docker run -d --rm --gpus 0 -v {triton_repo_path}:/models -p 8000:8000 {tag} tritonserver --model-repository=/models", shell=True, ) .decode("utf-8") .strip() ) triton_client = InferenceServerClient(url="localhost:8000", verbose=False, ssl=False) for _ in range(10): with contextlib.suppress(Exception): assert triton_client.is_model_ready(model_name) break time.sleep(1)
Эта настройка поможет вам эффективно развертывать модели YOLO11 в масштабе на сервере Triton Inference Server для высокопроизводительного логического вывода моделей AI.
Какие преимущества дает использование Ultralytics YOLO11 с NVIDIA Triton Inference Server?
Интеграция Ultralytics YOLO11 с NVIDIA Triton Inference Server предоставляет несколько преимуществ:
- Масштабируемый AI-инференс: Triton позволяет обслуживать несколько моделей с одного серверного экземпляра, поддерживая динамическую загрузку и выгрузку моделей, что делает его очень масштабируемым для различных AI-нагрузок.
- Высокая производительность: Оптимизированный для NVIDIA GPU, Triton Inference Server обеспечивает высокую скорость операций инференса, идеально подходит для приложений реального времени, таких как обнаружение объектов.
- Ансамбли и версионность моделей: Режим ансамбля Triton позволяет объединять несколько моделей для улучшения результатов, а версионность моделей поддерживает A/B-тестирование и постепенные обновления.
- Автоматическая пакетная обработка: Triton автоматически группирует несколько запросов на вывод вместе, что значительно повышает пропускную способность и снижает задержку.
- Упрощенное развертывание: Постепенная оптимизация рабочих процессов ИИ без необходимости полной перестройки системы, что упрощает эффективное масштабирование.
Подробные инструкции по настройке и запуску YOLO11 с Triton можно найти в руководстве по настройке.
Почему мне следует экспортировать мою модель YOLO11 в формат ONNX перед использованием Triton Inference Server?
Использование формата ONNX (Open Neural Network Exchange) для вашей модели Ultralytics YOLO11 перед развертыванием на NVIDIA Triton Inference Server предоставляет несколько ключевых преимуществ:
- Совместимость: Формат ONNX поддерживает передачу между различными платформами глубокого обучения (такими как PyTorch, TensorFlow), обеспечивая более широкую совместимость.
- Оптимизация: Многие среды развертывания, включая Triton, оптимизированы для ONNX, что обеспечивает более быстрый вывод и лучшую производительность.
- Простота развертывания: ONNX широко поддерживается различными фреймворками и платформами, что упрощает процесс развертывания в различных операционных системах и аппаратных конфигурациях.
- Независимость от фреймворка: После преобразования в ONNX ваша модель больше не привязана к исходному фреймворку, что делает ее более переносимой.
- Стандартизация: ONNX предоставляет стандартизированное представление, которое помогает решить проблемы совместимости между различными фреймворками ИИ.
Чтобы экспортировать вашу модель, используйте:
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
onnx_file = model.export(format="onnx", dynamic=True)
Вы можете выполнить шаги, описанные в руководстве по интеграции ONNX, чтобы завершить процесс.
Могу ли я запустить вывод, используя модель Ultralytics YOLO11 на сервере вывода Triton?
Да, вы можете выполнять вывод, используя модель Ultralytics YOLO11 на NVIDIA Triton Inference Server. После того как ваша модель будет настроена в репозитории моделей Triton и сервер запущен, вы можете загрузить и запустить вывод на своей модели следующим образом:
from ultralytics import YOLO
# Load the Triton Server model
model = YOLO("http://localhost:8000/yolo", task="detect")
# Run inference on the server
results = model("path/to/image.jpg")
Этот подход позволяет использовать оптимизации Triton, используя привычный интерфейс Ultralytics YOLO. Для получения подробного руководства по настройке и запуску Triton Server с YOLO11 обратитесь к разделу запуск сервера логического вывода Triton.
Как Ultralytics YOLO11 соотносится с моделями TensorFlow и PyTorch для развертывания?
Ultralytics YOLO11 предлагает несколько уникальных преимуществ по сравнению с моделями TensorFlow и PyTorch для развертывания:
- Производительность в реальном времени: Оптимизированный для задач обнаружения объектов в реальном времени, YOLO11 обеспечивает современную точность и скорость, что делает его идеальным для приложений, требующих анализа видео в реальном времени.
- Простота использования: YOLO11 легко интегрируется с Triton Inference Server и поддерживает различные форматы экспорта (ONNX, TensorRT, CoreML), что делает его гибким для различных сценариев развертывания.
- Расширенные функции: YOLO11 включает такие функции, как динамическая загрузка моделей, контроль версий моделей и ансамблевый инференс, которые имеют решающее значение для масштабируемых и надежных развертываний ИИ.
- Упрощенный API: API Ultralytics предоставляет согласованный интерфейс для различных целей развертывания, сокращая время обучения и разработки.
- Оптимизация для периферии: Модели YOLO11 разработаны с учетом развертывания на периферии, обеспечивая отличную производительность даже на устройствах с ограниченными ресурсами.
Для получения более подробной информации сравните варианты развертывания в руководстве по экспорту моделей.