本文档记录了 YOLOv5 与 NVIDIA Triton 推理服务器的集成,该集成能够实现在生产环境中高效的模型服务和部署。本文档重点介绍了如何将 YOLOv5 代码库与 Triton 结合用于高性能推理。有关通用的模型导出选项,请参阅 模型导出。
NVIDIA Triton 推理服务器是一个开源平台,用于在生产环境中部署和提供机器学习模型。它为跨各种框架和硬件平台进行模型推理提供了一个标准化的接口。
YOLOv5 代码库通过 TritonRemoteModel 类内置支持与 Triton 推理服务器进行交互。这种集成允许
YOLOv5-Triton 集成架构
与 Triton 推理服务器交互的核心组件是 TritonRemoteModel 类。此类提供了 Triton 客户端库的 PyTorch 友好封装。
TritonRemoteModel 类结构
TritonRemoteModel 构造函数接受一个指定协议(gRPC 或 HTTP)和服务器地址的 URL。它会自动
URL 方案决定了使用哪个客户端库(gRPC 或 HTTP)进行通信
| 协议 | URL 格式 | 客户端库 |
|---|---|---|
| gRPC | grpc://hostname:port | tritonclient.grpc |
| HTTP | http://hostname:port | tritonclient.http |
__call__ 方法允许直接调用模型,接受位置参数(*args)或关键字参数(**kwargs)
内部执行以下步骤:
将 YOLOv5 模型部署到 Triton 推理服务器的过程涉及几个步骤:
YOLOv5 到 Triton 部署工作流程
Triton 需要为其模型仓库指定特定的目录结构。
model_repository/
├── yolov5/
│ ├── config.pbtxt
│ ├── 1/
│ │ ├── model.savedmodel/ # For TensorFlow
│ │ │ └── ...
│ │ ├── model.plan # For TensorRT
│ │ └── model.onnx # For ONNX
config.pbtxt 文件定义了模型配置参数,例如:
TritonRemoteModel 的推理序列
TritonRemoteModel 自动处理输入。
推理后,对响应进行处理。
以下是使用 TritonRemoteModel 类与 YOLOv5 的简化示例。
对于生产部署,请考虑实现:
在将 YOLOv5 模型与 Triton 推理服务器一起部署时,请考虑以下性能优化:
| 优化 | 描述 |
|---|---|
| 模型格式 | TensorRT 在 NVIDIA GPU 上提供最佳性能。 |
| 动态批处理 | 在 Triton 中配置动态批处理以优化吞吐量。 |
| 实例组 | 配置多个模型实例以进行并行执行。 |
| 输入/输出格式 | 最小化预处理/后处理开销。 |
| 并发请求 | 在高吞吐量场景中使用多个客户端。 |
使用 Triton 推理服务器时的常见问题
调试时,请检查 Triton 服务器日志以获取详细的错误消息。
带 Triton 集成的 YOLOv5 检测流水线
TritonRemoteModel 类可以作为本地模型执行的替代方案集成到 YOLOv5 的检测流水线中,从而实现灵活的部署架构。
Triton 推理服务器集成提供了一种强大的方法,可以在生产环境中部署 YOLOv5 模型,提供可伸缩性、灵活性和优化的性能。 TritonRemoteModel 类简化了在 YOLOv5 生态系统中连接和使用 Triton 服务模型的过程。
对于更复杂的部署场景或自定义,请参考 NVIDIA Triton 文档 以及 utils/triton.py 中的源代码。