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 推理服务器部分。