Skip to content

使用Ultralytics YOLO11的Triton推理服务器

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



观看: 开始使用NVIDIA Triton推理服务器。

什么是Triton推理服务器?

Triton推理服务器旨在在生产环境中部署各种AI模型。它支持广泛的深度学习和机器学习框架,包括TensorFlow、PyTorch、ONNX Runtime等。其主要用例包括:

  • 从单个服务器实例提供多个模型。
  • 无需重启服务器即可动态加载和卸载模型。
  • 集成推理,允许多个模型一起使用以实现结果。
  • 模型版本控制,用于A/B测试和滚动更新。

前提条件

在继续之前,请确保您具备以下前提条件:

  • 在您的机器上安装了Docker。
  • 安装tritonclient
    pip install tritonclient[all]
    

将YOLO11导出为ONNX格式

在将模型部署到Triton之前,必须将其导出为ONNX格式。ONNX(开放神经网络交换)是一种允许模型在不同深度学习框架之间传输的格式。使用YOLO类的export函数:

from ultralytics import YOLO

# 加载模型
model = YOLO("yolo11n.pt")  # 加载官方模型

# 导出模型
onnx_file = model.export(format="onnx", dynamic=True)

设置Triton模型仓库

Triton模型仓库是Triton可以访问和加载模型的存储位置。

  1. 创建必要的目录结构:

    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)
    
  2. 将导出的ONNX模型移动到Triton仓库:

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

运行Triton推理服务器

使用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)

通过遵循上述步骤,您可以在 Triton Inference Server 上高效地部署和运行 Ultralytics YOLO11 模型,为深度学习推理任务提供可扩展且高性能的解决方案。如果您遇到任何问题或有进一步的疑问,请参考 Triton 官方文档 或联系 Ultralytics 社区寻求支持。

常见问题解答

如何使用 NVIDIA Triton Inference Server 设置 Ultralytics YOLO11?

使用 NVIDIA Triton Inference Server 设置 Ultralytics YOLO11 涉及几个关键步骤:

  1. 将 YOLO11 导出为 ONNX 格式

    from ultralytics import YOLO
    
    # 加载模型
    model = YOLO("yolo11n.pt")  # 加载官方模型
    
    # 将模型导出为 ONNX 格式
    onnx_file = model.export(format="onnx", dynamic=True)
    
  2. 设置 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()
    
  3. 运行 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)
    

此设置可以帮助您在 Triton Inference Server 上高效地大规模部署 YOLO11 模型,以实现高性能的 AI 模型推理。

使用 Ultralytics YOLO11 和 NVIDIA Triton Inference Server 有哪些好处?

Ultralytics YOLO11NVIDIA Triton Inference Server 集成提供了几个优势:

  • 可扩展的 AI 推理:Triton 允许从单个服务器实例提供多个模型,支持动态模型加载和卸载,使其非常适合多样化的 AI 工作负载。
  • 高性能:针对 NVIDIA GPU 优化,Triton Inference Server 确保高速推理操作,非常适合实时应用,如 目标检测
  • 模型集成和版本控制:Triton 的集成模式允许组合多个模型以提高结果,其模型版本控制支持 A/B 测试和滚动更新。

有关设置和运行 YOLO11 与 Triton 的详细说明,您可以参考 设置指南

在使用 Triton Inference Server 之前,为什么应该将 YOLO11 模型导出为 ONNX 格式?

在使用 NVIDIA Triton Inference Server 部署之前,将 Ultralytics YOLO11 模型导出为 ONNX(开放神经网络交换)格式有几个关键好处:

  • 互操作性:ONNX 格式支持在不同的深度学习框架(如 PyTorch、TensorFlow)之间传输,确保更广泛的兼容性。
  • 优化:包括 Triton 在内的许多部署环境针对 ONNX 进行优化,从而实现更快的推理和更好的性能。
  • 简化部署:ONNX 在框架和平台上得到广泛支持,简化了在各种操作系统和硬件配置中的部署过程。

要导出您的模型,请使用:

from ultralytics import YOLO

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

您可以按照 导出指南 中的步骤完成该过程。

我可以在 Triton Inference Server 上使用 Ultralytics YOLO11 模型进行推理吗?

是的,您可以在 NVIDIA Triton Inference Server 上使用 Ultralytics YOLO11 模型进行推理。一旦您的模型在 Triton 模型仓库中设置好并且服务器正在运行,您可以按如下方式加载和运行推理:

from ultralytics import YOLO

# 加载 Triton Server 模型
model = YOLO("http://localhost:8000/yolo", task="detect")

# 在服务器上运行推理
results = model("path/to/image.jpg")
有关设置和运行带有YOLO11的Triton Server的深入指南,请参阅运行Triton推理服务器部分。

Ultralytics YOLO11与TensorFlow和PyTorch模型在部署方面的比较如何?

Ultralytics YOLO11在部署方面相比TensorFlow和PyTorch模型提供了几个独特的优势:

  • 实时性能:针对实时目标检测任务进行了优化,YOLO11提供了最先进的准确性和速度,非常适合需要实时视频分析的应用。
  • 易用性:YOLO11与Triton推理服务器无缝集成,并支持多种导出格式(ONNX、TensorRT、CoreML),使其在各种部署场景中具有灵活性。
  • 高级功能:YOLO11包括动态模型加载、模型版本控制和集成推理等特性,这些对于可扩展和可靠的AI部署至关重要。

更多详情,请参阅模型部署指南中的部署选项比较。


📅 Created 11 months ago ✏️ Updated 13 days ago

Comments