NVIDIA Triton 推理服务器与 Ultralytics YOLO11 集成指南

NVIDIA Triton推理服务器是一个开源软件解决方案,由 NVIDIA 开发,为 NVIDIA GPU 优化的云端推理解决方案。Triton 简化了在生产环境中大规模部署 AI 模型的过程。将 Ultralytics YOLO11 与 Triton 推理服务器集成,可以部署可扩展的、高性能的深度学习推理工作负载。本指南提供了设置和测试集成的步骤。

NVIDIA Triton 推理服务器旨在部署各种 AI 模型到生产环境中。它支持广泛的深度学习和机器学习框架,包括 TensorFlow、PyTorch、ONNX Runtime 等。其主要用例包括:从单个服务器实例提供多个模型、动态加载和卸载模型而无需重启服务器、集成推理允许多个模型一起使用以实现结果、模型版本控制用于 A/B 测试和滚动更新。

在继续之前,请确保已经安装了以下前提条件:在机器上安装了 Docker。安装 Triton 客户端库,可以使用 pip 命令安装:

pip install tritonclient[all]

将 YOLO11 模型导出到 ONNX 格式。ONNX(Open Neural Network Exchange)是一个允许模型在不同深度学习框架之间传输的格式。使用 YOLO 类的 export 函数来导出模型:

from ultralytics import YOLO # 加载模型 model = YOLO("yolo11n.pt") # 导出模型 onnx_file = model.export(format="onnx", dynamic=True)

设置 Triton 模型仓库。Triton 模型仓库是 Triton 可以访问和加载模型的存储位置。创建必要的目录结构:

from pathlib import Path # 定义路径 model_name = "yolo" triton_repo_path = Path("tmp") / "triton_repo" triton_model_path = triton_repo_path / model_name # 创建目录 (triton_model_path / "1").mkdir(parents=True, exist_ok=True)

将导出的 ONNX 模型移动到 Triton 仓库:

from pathlib import Path # 将 ONNX 模型移动到 Triton 模型路径 Path(onnx_file).rename(triton_model_path / "1" / "model.onnx") # 创建配置文件 (triton_model_path / "config.pbtxt").touch()

使用 Docker 运行 Triton 推理服务器:

import contextlib import subprocess import time from tritonclient.http import InferenceServerClient # 定义镜像 https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tritonserver tag = "nvcr.io/nvidia/tritonserver:23.09-py3" # 6.4 GB # 拉取镜像 subprocess.call(f"docker pull {tag}", shell=True) # 运行 Triton 服务器并捕获容器 ID container_id = ( subprocess.check_output( f"docker run -d --rm -v {triton_repo_path}:/models -p 8000:8000 {tag} tritonserver --model-repository=/models", shell=True, ).decode("utf-8").strip() ) # 等待 Triton 服务器启动 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)

然后使用 Triton 服务器模型运行推理:

from ultralytics import YOLO # 加载 Triton 服务器模型 model = YOLO("http://localhost:8000/yolo", task="detect") # 在服务器上运行推理 results = model("path/to/image.jpg")

清理容器:

# 在测试结束时杀死并移除容器 subprocess.call(f"docker kill {container_id}", shell=True)

将 Ultralytics YOLO11 与 NVIDIA Triton 推理服务器集成提供了多个优势:

可扩展的 AI 推理:Triton 允许从单个服务器实例提供多个模型,支持动态模型加载和卸载,使其非常适合多样化的 AI 工作负载。

高性能:针对 NVIDIA GPU 优化的 Triton推理服务器确保了高速推理操作,非常适合实时应用,如物体检测。

集成和模型版本控制:Triton 的集成模式允许组合多个模型以提高结果,其模型版本控制支持 A/B 测试和滚动更新。

如何将 Ultralytics YOLO11 与 NVIDIA Triton 推理服务器设置? 设置 Ultralytics YOLO11 与 NVIDIA Triton 推理服务器涉及几个关键步骤: 导出 YOLO11 到 ONNX 格式: from ultralytics import YOLO # 加载模型 model = YOLO("yolo11n.pt") # 导出模型到 ONNX 格式 onnx_file = model.export(format="onnx", dynamic=True) 设置 Triton 模型仓库: from pathlib import Path # 定义路径 model_name = "yolo" triton_repo_path = Path("tmp") / "triton_repo" triton_model_path = triton_repo_path / model_name # 创建目录 (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 服务器: import contextlib import subprocess import time from tritonclient.http import InferenceServerClient # 定义镜像 https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tritonserver tag = "nvcr.io/nvidia/tritonserver:23.09-py3" subprocess.call(f"docker pull {tag}", shell=True) container_id = ( subprocess.check_output( f"docker run -d --rm -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)

使用Ultralytics YOLO11与 NVIDIA Triton 推理服务器有什么好处? 集成 Ultralytics YOLO11 与 NVIDIA Triton 推理服务器提供了多个优势: 可扩展的 AI 推理:Triton 允许从单个服务器实例提供多个模型,支持动态模型加载和卸载,使其非常适合多样化的 AI 工作负载。 高性能:针对 NVIDIA GPU 优化的 Triton 推理服务器确保了高速推理操作,非常适合实时应用,如物体检测。 集成和模型版本控制:Triton 的集成模式允许组合多个模型以提高结果,其模型版本控制支持 A/B 测试和滚动更新。 有关设置和运行 YOLO11 与 Triton 的详细说明,请参阅设置指南。

为什么要在 Triton 推理服务器上使用 YOLO11 模型之前将其导出到 ONNX 格式? 在将Ultralytics YOLO11模型部署到 NVIDIA Triton 推理服务器之前使用 ONNX(Open Neural Network Exchange)格式提供了几个关键好处: 互操作性:ONNX 格式支持在不同的深度学习框架(如 PyTorch、TensorFlow)之间传输,确保了更广泛的兼容性。 优化:许多部署环境,包括 Triton,都针对 ONNX 进行了优化,从而实现了更快的推理和更好的性能。 简化部署:ONNX 在各种框架和平台上得到了广泛支持,简化了在各种操作系统和硬件配置中的部署过程。 要导出模型,可以使用以下代码:

from ultralytics import YOLO model = YOLO("yolo11n.pt") onnx_file = model.export(format="onnx", dynamic=True)

有关导出过程的详细步骤,请参阅导出指南。

可以在 Triton 推理服务器上使用Ultralytics YOLO11模型运行推理吗? 是的,可以在 NVIDIA Triton推理服务器上使用 Ultralytics YOLO11 模型运行推理。一旦模型在 Triton 模型仓库中设置好并且服务器正在运行,可以加载并运行模型的推理,如下所示:

from ultralytics import YOLO # 加载 Triton 服务器模型 model = YOLO("http://localhost:8000/yolo", task="detect") # 在服务器上运行推理 results = model("path/to/image.jpg")

有关设置和运行 Triton 服务器与 YOLO11 的深入指南,请参阅运行 Triton 推理服务器部分。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485