Triton Inference Server с Ultralytics YOLO26
Triton Inference Server (ранее известный как TensorRT Inference Server) — это программное решение с открытым исходным кодом, разработанное NVIDIA. Оно предоставляет облачное решение для вывода, оптимизированное для GPU NVIDIA. Triton упрощает развертывание моделей ИИ в масштабе в производственной среде. Интеграция Ultralytics YOLO26 с Triton Inference Server позволяет развертывать масштабируемые, высокопроизводительные рабочие нагрузки вывода глубокого обучения. Это руководство содержит шаги по настройке и тестированию интеграции.
Смотреть: Начало работы с NVIDIA Triton Inference Server.
Что такое Triton Inference Server?
Triton Inference Server предназначен для развертывания различных моделей ИИ в производственной среде. Он поддерживает широкий спектр фреймворков глубокого обучения и машинного обучения, включая PyTorch, TensorFlow, ONNX, OpenVINO, TensorRT и многие другие. Его основные варианты использования:
- Обслуживание нескольких моделей из одного экземпляра сервера
- Динамическая загрузка и выгрузка моделей без перезапуска сервера
- Ансамблевый вывод, позволяющий использовать несколько моделей вместе для достижения результатов
- Контроль версий моделей для A/B-тестирования и последовательных обновлений
Основные преимущества Triton Inference Server
Использование Triton Inference Server с Ultralytics YOLO26 предоставляет несколько преимуществ:
- Автоматическая пакетная обработка: Группирует несколько запросов ИИ вместе перед их обработкой, снижая задержку и повышая скорость логического вывода
- Интеграция с Kubernetes: Облачно-ориентированный дизайн бесперебойно работает с Kubernetes для управления и масштабирования приложений искусственного интеллекта.
- Аппаратные оптимизации: В полной мере использует возможности NVIDIA GPU для максимальной производительности.
- Гибкость фреймворков: Поддерживает несколько фреймворков ИИ, включая PyTorch, TensorFlow, ONNX, OpenVINO и TensorRT
- Открытый исходный код и настраиваемость: Может быть модифицирован для соответствия конкретным потребностям, обеспечивая гибкость для различных AI-приложений.
Предварительные требования
Прежде чем продолжить, убедитесь, что у вас есть следующие необходимые условия:
- Docker или Podman, установленные на вашей машине
- Установите
ultralytics:pip install ultralytics - Установите
tritonclient:pip install tritonclient[all]
Настройка Triton Inference Server
Запустите этот полный блок настройки, чтобы экспортировать Ultralytics YOLO26 в ONNX, создать репозиторий моделей Triton и запустить сервер вывода Triton:
Примечание
Используйте runtime переключитесь в скрипте, чтобы выбрать ваш контейнерный движок:
- Установить
runtime = "docker"для Docker - Установить
runtime = "podman"для Podman
import contextlib
import subprocess
import time
from pathlib import Path
from tritonclient.http import InferenceServerClient
from ultralytics import YOLO
runtime = "docker" # set to "podman" to use Podman
# 1) Exporting YOLO26 to ONNX Format
# Load a model
model = YOLO("yolo26n.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)
# 2) Setting Up Triton Model Repository
# 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)
# 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)
# 3) Running Triton Inference Server
# Define image https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tritonserver
tag = "nvcr.io/nvidia/tritonserver:26.02-py3" # 16.17 GB (Compressed Size)
subprocess.call(f"{runtime} pull {tag}", shell=True)
# GPU flags differ between Docker and Podman
gpu_flags = "--device nvidia.com/gpu=all" if runtime == "podman" else "--runtime=nvidia --gpus all"
container_name = "triton_server"
# Note: The :z flag on the volume mount is necessary for systems with SELinux (like Fedora/RHEL)
subprocess.call(
f"{runtime} run -d --rm --name {container_name} {gpu_flags} -v {triton_repo_path.absolute()}:/models:z -p 8000:8000 {tag} tritonserver --model-repository=/models",
shell=True,
)
# Wait for the Triton server to start
triton_client = InferenceServerClient(url="127.0.0.1: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://127.0.0.1:8000/yolo", task="detect")
# Run inference on the server
results = model("path/to/image.jpg")
Очистите контейнер (runtime и container_name определены в блоке настройки выше):
import subprocess
runtime = "docker" # set to "podman" to use Podman
container_name = "triton_server" # Kill the named container
subprocess.call(f"{runtime} kill {container_name}", shell=True)
Оптимизация TensorRT (опционально)
Для еще большей производительности можно использовать TensorRT с Triton Inference Server. TensorRT — это высокопроизводительный оптимизатор глубокого обучения, разработанный специально для графических процессоров NVIDIA, который может значительно увеличить скорость инференса.
Ключевые преимущества использования TensorRT с Triton включают:
- До 36 раз более высокая скорость инференса по сравнению с неоптимизированными моделями
- Аппаратные оптимизации для максимального использования GPU
- Поддержка форматов пониженной точности (INT8, FP16) с сохранением точности.
- Слияние слоев для снижения вычислительных затрат
Чтобы использовать TensorRT напрямую, вы можете экспортировать вашу модель Ultralytics YOLO26 в формат TensorRT:
from ultralytics import YOLO
# Load the YOLO26 model
model = YOLO("yolo26n.pt")
# Export the model to TensorRT format
model.export(format="engine") # creates 'yolo26n.engine'
Для получения дополнительной информации об оптимизации TensorRT см. руководство по интеграции TensorRT.
Следуя вышеуказанным шагам, вы сможете эффективно развертывать и запускать модели Ultralytics YOLO26 на Triton Inference Server, обеспечивая масштабируемое и высокопроизводительное решение для задач вывода глубокого обучения. Если у вас возникнут какие-либо проблемы или дополнительные вопросы, обратитесь к официальной документации Triton или свяжитесь с сообществом Ultralytics для получения поддержки.
Часто задаваемые вопросы
Как мне настроить Ultralytics YOLO26 с NVIDIA Triton Inference Server?
Настройка Ultralytics YOLO26 с NVIDIA Triton Inference Server включает несколько ключевых шагов:
Экспорт YOLO26 в формат ONNX:
from ultralytics import YOLO # Load a model model = YOLO("yolo26n.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:26.02-py3" runtime = "docker" # set to "podman" to use Podman subprocess.call(f"{runtime} pull {tag}", shell=True) # GPU flags differ between Docker and Podman gpu_flags = "--device nvidia.com/gpu=all" if runtime == "podman" else "--runtime=nvidia --gpus all" container_name = "triton_server" subprocess.call( f"{runtime} run -d --rm --name {container_name} {gpu_flags} -v {triton_repo_path.absolute()}:/models:z -p 8000:8000 {tag} tritonserver --model-repository=/models", shell=True, ) triton_client = InferenceServerClient(url="127.0.0.1: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)
Эта настройка поможет вам эффективно масштабировать развертывание моделей Ultralytics YOLO26 на Triton Inference Server для высокопроизводительного вывода моделей ИИ.
Какие преимущества дает использование Ultralytics YOLO26 с NVIDIA Triton Inference Server?
Интеграция Ultralytics YOLO26 с NVIDIA Triton Inference Server предоставляет несколько преимуществ:
- Масштабируемый AI-инференс: Triton позволяет обслуживать несколько моделей с одного серверного экземпляра, поддерживая динамическую загрузку и выгрузку моделей, что делает его очень масштабируемым для различных AI-нагрузок.
- Высокая производительность: Оптимизированный для NVIDIA GPU, Triton Inference Server обеспечивает высокую скорость операций инференса, идеально подходит для приложений реального времени, таких как обнаружение объектов.
- Ансамбли и версионность моделей: Режим ансамбля Triton позволяет объединять несколько моделей для улучшения результатов, а версионность моделей поддерживает A/B-тестирование и постепенные обновления.
- Автоматическая пакетная обработка: Triton автоматически группирует несколько запросов на вывод вместе, что значительно повышает пропускную способность и снижает задержку.
- Упрощенное развертывание: Постепенная оптимизация рабочих процессов ИИ без необходимости полной перестройки системы, что упрощает эффективное масштабирование.
Подробные инструкции по настройке и запуску Ultralytics YOLO26 с Triton см. в разделах Настройка Triton Inference Server и Выполнение вывода.
Почему я должен экспортировать свою модель YOLO26 в формат ONNX перед использованием Triton Inference Server?
Использование формата ONNX (Open Neural Network Exchange) для вашей модели Ultralytics YOLO26 перед ее развертыванием на NVIDIA Triton Inference Server предлагает несколько ключевых преимуществ:
- Совместимость: Формат ONNX поддерживает передачу между различными платформами глубокого обучения (такими как PyTorch, TensorFlow), обеспечивая более широкую совместимость.
- Оптимизация: Многие среды развертывания, включая Triton, оптимизированы для ONNX, что обеспечивает более быстрый вывод и лучшую производительность.
- Простота развертывания: ONNX широко поддерживается различными фреймворками и платформами, что упрощает процесс развертывания в различных операционных системах и аппаратных конфигурациях.
- Независимость от фреймворка: После преобразования в ONNX ваша модель больше не привязана к исходному фреймворку, что делает ее более переносимой.
- Стандартизация: ONNX предоставляет стандартизированное представление, которое помогает решить проблемы совместимости между различными фреймворками ИИ.
Чтобы экспортировать вашу модель, используйте:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
onnx_file = model.export(format="onnx", dynamic=True)
Вы можете выполнить шаги, описанные в руководстве по интеграции ONNX, чтобы завершить процесс.
Могу ли я выполнять вывод с использованием модели Ultralytics YOLO26 на Triton Inference Server?
Да, вы можете выполнять вывод с использованием модели Ultralytics YOLO26 на NVIDIA Triton Inference Server. Как только ваша модель будет настроена в репозитории моделей Triton и сервер запущен, вы можете загрузить и выполнить вывод на вашей модели следующим образом:
from ultralytics import YOLO
# Load the Triton Server model
model = YOLO("http://127.0.0.1:8000/yolo", task="detect")
# Run inference on the server
results = model("path/to/image.jpg")
Этот подход позволяет использовать оптимизации Triton, сохраняя при этом привычный интерфейс Ultralytics YOLO.
Как Ultralytics YOLO26 соотносится с моделями TensorFlow и PyTorch для развертывания?
Ultralytics YOLO26 предлагает несколько уникальных преимуществ по сравнению с моделями TensorFlow и PyTorch для развертывания:
- Производительность в реальном времени: Оптимизированный для задач обнаружения объектов в реальном времени, Ultralytics YOLO26 обеспечивает передовую точность и скорость, что делает его идеальным для приложений, требующих анализа видео в реальном времени.
- Простота использования: Ultralytics YOLO26 легко интегрируется с Triton Inference Server и поддерживает различные форматы экспорта (ONNX, TensorRT), что делает его гибким для различных сценариев развертывания.
- Расширенные функции: Ultralytics YOLO26 включает такие функции, как динамическая загрузка моделей, версионирование моделей и ансамблевый вывод, которые имеют решающее значение для масштабируемых и надежных развертываний ИИ.
- Упрощенный API: API Ultralytics предоставляет согласованный интерфейс для различных целей развертывания, сокращая время обучения и разработки.
- Оптимизация для периферийных устройств: Модели Ultralytics YOLO26 разработаны с учетом развертывания на периферийных устройствах, предлагая отличную производительность даже на устройствах с ограниченными ресурсами.
Для получения более подробной информации сравните варианты развертывания в руководстве по экспорту моделей.