前言

NVIDIA Triton™ 推理服务器作为 NVIDIA AI 平台的关键组件之一,集成于 NVIDIA AI Enterprise 中,是一款开源软件工具,旨在标准化AI模型在各类工作负载中的部署与执行流程。

其核心特性包括:

  • 广泛的框架兼容性:Triton 支持 TensorFlow、Pytorch、TensorRT、ONNX Runtime 等多种深度学习框架,并支持自定义后端。这种灵活性让用户能够根据项目需求选择最适合的框架。
  • 卓越的推理性能:利用 TensorRT 和 GPU 的强大功能,Triton 提供了高效的推理服务,非常适合需要高实时性的应用场景,如自动驾驶技术。
  • 多样化的部署方案:无论是单机环境还是多机集群,亦或是容器化部署,Triton 都能完美适应,为用户提供灵活的选择。
  • 强大的多模型处理能力:支持同时部署多个深度学习模型,并为每个模型提供独立的服务端点。
  • 便捷的 API 接口:通过 RESTful API,客户端应用可以轻松地与 Triton 服务器交互,实现推理请求的发送和结果获取。
  • 全面的监控管理:提供详尽的监控与管理功能,便于用户追踪系统性能、资源使用状况及模型状态,确保系统的稳定运行。
  • 活跃的开源社区支持:作为一款开源软件,Triton 拥有一个活跃的开发者社区,持续推动其进步和发展。

Triton 推理服务器的工作流程简洁高效:首先接收来自 HTTP/REST、gRPC 或 C API 的推理请求,然后将这些请求路由至对应模型的调度队列中;接着,调度器可能会对请求进行批处理,并将其传递给相应的模型后端执行推理;最终,推理结果将被返回给请求方。此外,Triton 架构设计支持在同一系统上并行运行多个模型或同一模型的多个实例,无论系统配置有多少块 GPU 卡(0个、1个或多个)。

准备工作

环境搭建

如果使用 Windows 平台,首先需要下载安装 docker-desktop,对于 docker 的安装网上有很多教程,安装后如下:

服务端部署指南

Triton 分为服务端和客户端,在同一内网下,客户端可以通过调用 gRPC 或 HTTP 协议与服务端进行通信。

获取并运行 TritonServer 镜像

然后在命令行执行

1
docker pull nvcr.io/nvidia/tritonserver:23.04-py3

安装 tritonserver 镜像,我们选择的 tritonserver 版本是 23.04,使用 docker images 可以查看已安装的镜像。

image-20250121095047838

镜像下载完成后,我们来部署容器:

1
docker run -it --gpus all --name tritonserver -p 8000:8000 -p 8001:8001 -p 8002:8002 -p 9000:22 --shm-size=2g nvcr.io/nvidia/tritonserver:23.04-py3 /bin/bash

容器部署完成后,使用 docker ps -a 可以查看自己部署的容器

image-20250121102344646

之后,需要在容器内进行一些初始化操作,首先更新源:

1
apt update

然后安装 vimopenssh

1
apt install -y vim openssh-server

ssh 访问配置

对于 root 账户登录 ssh,需要修改配置文件:

1
vim /etc/ssh/sshd_config

添加以下配置

1
PermitRootLogin yes

image-20250121100926343

然后设置登录密码

1
passwd

终端出现 passwd: password updated successfully 时,表示密码设置成功。

使用 MobaXterm 连接,主机名为 localhost,用户名为 root,端口号设置为 9000

image-20250121101438877

点击登录后会提示输入密码,输入刚才设置的密码即可进入终端。

在具体部署模型前,需要配置 tritonservercuda 的环境变量,打开环境变量配置文件:

1
vim ~/.bashrc

配置环境变量

1
2
3
export PATH=/opt/tritonserver/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib
export PATH=$PATH:/usr/local/cuda/bin

模型准备与部署

创建模型目录

我们在 /workspace/model_repository 目录下准备一个模型目录 densenet_onn,然后准备一个 densenet 目标分类的模型,首先获取模型:

1
2
3
4
5
6
7
8
// 模型文件 - densenet-7.onnx
https://github.com/onnx/models/raw/main/validated/vision/classification/densenet-121/model/densenet-7.onnx

// 配置文件 - config.pbtxt
https://github.com/triton-inference server/server/blob/main/docs/examples/model_repository/densenet_onnx/config.pbtxt

// 标签文件 - densenet_labels.txt
https://github.com/triton-inference-server/server/blob/main/docs/examples/model_repository/densenet_onnx/densenet_labels.txt

densenet-7.onnx 改名为 model.onnx,文件按如下的格式进行存储:

image-20250121105150257

启动 tritonserver

执行如下命令启动 Triton 服务端:

1
tritonserver --model-repository=/workspace/model_repository/

服务端正确启动:

image-20250121105413029

客户端推理

使用 Python 进行客户端模型推理,建议使用 Anaconda 新建一个虚拟环境,环境配置

1
2
pip install tritonclient[all]
pip install attrdict

拷贝客户端识别代码

1
https://github.com/triton-inference server/client/blob/main/src/python/examples/image_client.py

执行推理命令

1
python .\client\image_client.py -m densenet_onnx -s INCEPTION .\client\mug.jpg

可以得到推理结果

image-20250121110659980