Triton推理服务器是一个开源软件,用于优化和部署机器学习模型并通过模型服务来提供这些模型。OpenVINO™ 是一个开源工具包,用于优化和部署深度学习模型至 Intel® 架构。已经使用 Triton推理服务器和 NVIDIA* GPU 的组织可以无缝过渡到 Intel 硬件,并通过将 OpenVINO 集成至 Triton推理服务器的后端以获得 OpenVINO 的好处,从而无需完全切换至 OpenVINO™ Model Server。
通过将 Triton 推理服务器与 OpenVINO 后端集成在一起,组织可以充分利用 Intel 硬件的加速功能,以实现高性能的推理。特别是在最新的第四代和第五代 Intel® Xeon® 可扩展处理器上,这一点表现得尤为突出,这些处理器配备了 Intel® 高级矩阵扩展 (AMX),支持 Bfloat16 (BF16) 精度。
BF16压缩格式提升了性能和效率。通过以16位格式表示数据,Intel® Xeon® 处理器可以执行密集计算任务(如矩阵乘法运算),其吞吐量相比传统的32位浮点运算显著提升。这促进了并行处理,并减少了内存带宽需求,从而改善了能效并优化了资源利用。
通过使用OpenVINO后端,组织可以利用Intel的硬件和OpenVINO的优化技术,从而开启新的可能性领域,所有这些都通过Triton推理服务器的模型服务平台实现。
在Triton服务器上使用OpenVINO后端来运行模型这篇博客将教你如何从下载和准备模型到客户端向Triton推理服务器发送推理。如何在Triton推理服务器上部署模型,使用的是OpenVINO后端。涉及的模型有ONNX、PyTorch(OpenVINO格式的.bin和.xml文件)和TensorFlow。
以下指南基于 Triton 推理服务器 GitHub 上现有的教程,但已修改为使用 OpenVINO 后端和 Intel® CPU:NVIDIA ONNX 指南,NVIDIA PyTorch 指南,NVIDIA TensorFlow 指南。如需查看完整的 NVIDIA Triton 推理服务器文档,请参阅此处。
测试平台Ubuntu 20.04.6 LTS版本(长期支持版本)
版本 26.1.0 的 Docker,构建版本为 9714adc
Triton Server 24.04 (请将24.04替换为您的偏好版本号(如下命令中所示))
需求安装Docker在Ubuntu 20.04上的安装和使用指南环境
安装 wget
:
请根据你的操作系统安装它。
sudo apt install wget
部署一个ONNX模型。
- 构建模型库并下载ONNX格式的模型。
创建目录结构: mkdir -p model_repository/densenet_onnx/1
下载模型文件: wget -O model_repository/densenet_onnx/1/model.onnx \
https://contentmamluswest001.blob.core.windows.net/content/14b2744cf8d6418c87ffddc3f3127242/9502630827244d60a1214f250e3bbca7/08aed7327d694b8dbaee2c97b8d0fcba/densenet121-1.2.onnx
创建一个名为config.pbtxt的新文件,
name: "名称"
backend: "后端"
default_model_filename: "默认模型文件名"
3. 把 config.pbtxt 文件放在模型目录中,结构如下:
模型仓库目录
|
+-- densenet_onnx
|
+-- config.pbtxt
+-- 文件夹1
|
+-- model.onnx
注意:此目录结构是 Triton 推理服务器读取配置和模型文件所必需的布局,必须遵循此布局。除了必需的模型文件外,模型仓库中不应包含任何其他文件夹或文件。
4. 运行 Triton 推理服务器程序,并确保在命令中将 “/path/to/model_repository” 替换为你机器上的实际路径。
docker run --rm -p 8000:8000 -p 8001:8001 -p 8002:8002 -v /path/to/model_repository:/models nvcr.io/nvidia/tritonserver:24.04-py3 tritonserver --model-repository=/models
运行Docker命令,挂载模型仓库路径,然后启动Triton服务器(NVIDIA Triton推理服务器)。
5. 从 GitHub 下载 Triton 客户端的代码 client.py
,放到你想运行 Triton 客户端的位置。
下载客户端脚本 `client.py` 从以下 URL:```
wget https://raw.githubusercontent.com/triton-inference-server/tutorials/main/Quick_Deploy/ONNX/client.py
此脚本用于与 Triton 推理服务器进行交互。
6\. 在与 client.py 文件相同的位置启动 Triton 客户端之前,安装依赖项,并查询服务器状态.
docker run -it --rm --net=host -v ${PWD}:/workspace/ nvcr.io/nvidia/tritonserver:24.04-py3-sdk bash # 运行Docker容器并进入bash终端
pip install torchvision # 安装torchvision库
wget -O img1.jpg "https://www.hakaimagazine.com/wp-content/uploads/header-gulf-birds.jpg" # 下载图片到本地
python3 client.py # 运行客户端脚本
7\. 输出
以下是数值数据列表:
['11.549026:92' '11.232335:14' '7.528014:95' '6.923391:17' '6.576575:88']
## **部署PyTorch模型**
首先,下载 PyTorch 模型并做好准备工作。
PyTorch模型(.pt)需要被转换成OpenVINO格式。创建一个名为downloadAndConvert.py的文件来下载PyTorch模型,并使用OpenVINO模型转换器将模型保存为两个文件:model.xml和model.bin。
导入torchvision
导入torch
导入openvino as ov
model = torchvision.models.resnet50(weights='DEFAULT')
ov_model = ov.convert_model(model)
ov.save_model(ov_model, 'model.xml')
安装所需的依赖。
使用pip安装openvino。在命令行中输入此命令来安装openvino。
pip install openvino
你可以通过下面的命令来安装 torchvision:
pip install torchvision
请运行 downloadAndConvert.py 脚本
python3 downloadAndConvert.py # 运行Python脚本来下载并转换文件
要转换你自己的 PyTorch 模型,可以参考从这里了解如何转换 PyTorch 模型 [转换 PyTorch 模型](https://docs.openvino.ai/2024/openvino-workflow/model-preparation/convert-model-pytorch.html)
2\. 创建一个叫做 config.pbtxt 的新文件。
name: "resnet50" # 模型名称: 'resnet50' (注: 此部分原始代码保持不变, 表示模型名称)
backend: "openvino" # 后端: 'openvino' (注: 此部分原始代码保持不变, 表示后端引擎)
max_batch_size : 0 # 最大批次大小: 0 (注: 此部分原始代码保持不变, 表示最大批次大小)
input [ # 输入部分: (注: 此部分原始代码保持不变, 表示输入配置)
{
name: "x"
data_type: TYPE_FP32 # 数据类型: TYPE_FP32 (注: 此部分原始代码保持不变, 表示数据类型)
dims: [ 3, 224, 224 ]
reshape { shape: [ 1, 3, 224, 224 ] } # 重塑形状: shape: [ 1, 3, 224, 224 ] (注: 此部分原始代码保持不变, 表示重塑形状)
}
]
output [ # 输出部分: (注: 此部分原始代码保持不变, 表示输出配置)
{
name: "x.45"
data_type: TYPE_FP32 # 数据类型: TYPE_FP32 (注: 此部分原始代码保持不变, 表示数据类型)
dims: [ 1, 1000, 1, 1 ]
reshape { shape: [ 1, 1000 ] } # 重塑形状: shape: [ 1, 1000 ] (注: 此部分原始代码保持不变, 表示重塑形状)
}
]
3\. 将 config.pbtxt 文件放入模型仓库中,另外,还需要把 model.xml 和 model.bin 文件一起放进去。文件夹结构应如下所示:
模型库
|
+-- resnet50
|
+-- config.pbtxt # 配置文件
+-- 1
|
+-- model.xml
+-- model.bin # 模型文件示例
比如:
模型库
|
+-- resnet50
|
+-- config.pbtxt # 配置文件
+-- 1
|
+-- model.xml
+-- model.bin # 模型文件示例
请注意,此目录结构是Triton推理服务器(Triton Inference Server)读取配置和模型文件的方式,必须遵循规定的结构。除所需模型文件外,不要在此模型仓库中放置其他文件或文件夹。
运行 Triton 推理服务器程序,记得将命令中的 ‘/path/to/model_repository’ (即实际的模型库路径) 替换为你的机器上该模型库的实际路径。
docker run --rm -p 8000:8000 -p 8001:8001 -p 8002:8002 -v /path/to/model_repository:/models nvcr.io/nvidia/tritonserver:24.04-py3 tritonserver --model-repository=/models
5, 在另一个终端窗口中,从 GitHub 下载下来 Triton 客户端的 Python 脚本 `client.py`,并将其放置在你打算运行 Triton 客户端的目录中。
运行以下命令来下载客户端脚本:
wget https://raw.githubusercontent.com/triton-inference-server/tutorials/main/Quick_Deploy/PyTorch/client.py
这将下载一个PyTorch客户端脚本.
在 client.py 文件里,你需要更新模型的输入和输出名称为,以匹配后端期望的名称,因为这个模型和 Triton 教程中的模型略有不同。例如,将 PyTorch 模型中原来的输入名称(input__0)改为 OpenVINO 后端使用的名称(x)。
![](https://imgapi.imooc.com/6732ef1609968a3002670087.jpg)
6\. 在与 client.py 文件相同的位置运行 Triton 客户端,安装依赖项后,查询服务器的状态。
docker run -it --net=host -v ${PWD}:/workspace/ nvcr.io/nvidia/tritonserver:24.04-py3-sdk bash # 启动Docker容器并进入bash终端 (Start the Docker container and enter the bash terminal)
pip install torchvision # 安装torchvision库 (Install the torchvision library)
wget -O img1.jpg "https://www.hakaimagazine.com/wp-content/uploads/header-gulf-birds.jpg" # 下载图片到当前目录 (Download the image to the current directory)
python3 client.py # 运行客户端脚本 (Run the client script)
7. 输出。
[b'6.354599:14' b'4.292510:92' b'3.886345:90' b'3.333909:136'
b'3.096908:15']
**请注意:OpenVINO 集成了一个插件到 TorchServe,这使得可以在不将 PyTorch 模型转换为 OpenVINO IR 格式的情况下部署 PyTorch 模型。更多详情请参见这里的代码示例**[**代码示例这里**](https://github.com/pytorch/serve/tree/master/examples/pt2/torch_compile_openvino/stable_diffusion)**。**
## **部署一个TensorFlow模型**
1. 下载并预处理 TensorFlow 模型。
将 TensorFlow 模型导出为 SavedModel 格式:
docker run -it --gpus all -v ${PWD}:/workspace nvcr.io/nvidia/tensorflow:24.04-tf2-py3
运行上述Docker命令启动容器,并将当前工作目录挂载到容器中的工作空间。然后,在容器中执行Python脚本来导出模型。
python3 export.py
模型需要转换成OpenVINO格式。创建一个convert.py文件,,使用OpenVINO模型转换器来保存生成的模型.xml和模型.bin文件:
import openvino as ov
# 导入openvino库
ov_model = ov.convert_model("path_to_saved_model_dir")
# 将模型转换为openvino模型
ov.save_model(ov_model, "model.xml")
# 保存模型到指定的XML文件
首先,安装依赖:
在终端运行以下命令来安装OpenVino:
pip install openvino
运行一下 convert.py
运行以下命令:`python3 convert.py`
要将您的TensorFlow模型转换,请参阅[TensorFlow模型的转换](https://docs.openvino.ai/2024/openvino-workflow/model-preparation/convert-model-tensorflow.html)
2\. 创建一个叫 config.pbtxt 的新文件
name: "resnet50"
backend: "openvino"
max_batch_size : 0,
输入 [
{
name: "input_1"
data_type: TYPE_FP32
维度: [-1, 224, 224, 3 ]
}
]
输出 [
{
name: "predictions"
data_type: TYPE_FP32
维度: [-1, 1000]
}
]
3\. 将 config.pbtxt 文件与 model.xml 和 model.bin 一起放入模型仓库中。
模型仓库目录:
|
+-- resnet50
|
+-- config.pbtxt
+-- 001/
|
+-- model.xml
+-- model.bin
请注意:此目录结构是 NVIDIA Triton 推理服务器读取配置文件和模型文件所必需的结构,并且必须遵循所需的布局。除了必需的模型文件外,不要在模型仓库中放置任何其他文件。
4\. 运行 Triton 推理服务器程序,并确保将命令中的 “/path/to/model_repository” 这个位置更新为您机器上的相应路径。
docker run --rm -p 8000:8000 -p 8001:8001 -p 8002:8002 -v /path/to/model_repository:/models nvcr.io/nvidia/tritonserver:24.04-py3 tritonserver --model-repository=/models
这行命令是用来启动Triton服务器并挂载模型仓库的路径。
5\. 在另一个终端中,从GitHub下载下来Triton客户端的代码`client.py`到你打算运行Triton客户端的地方。
wget https://raw.githubusercontent.com/triton-inference-server/tutorials/main/Quick_Deploy/TensorFlow/client.py # 下载客户端脚本
6\. 在与 client.py 文件相同的位置运行 Triton 客户端,安装依赖项并启动客户端,查询服务器状态。
docker run -it --net=host -v ${PWD}:/workspace/ nvcr.io/nvidia/tritonserver:24.04-py3-sdk bash # 启动容器并映射当前目录到容器内的工作空间
pip install --upgrade tensorflow # 更新TensorFlow库
pip install image # 安装image库
wget -O img1.jpg "https://www.hakaimagazine.com/wp-content/uploads/header-gulf-birds.jpg" # 下载图片并保存为 img1.jpg
python3 client.py # 运行客户端脚本
7\. 输出结果
[b'0.301167:90' b'0.169790:14' b'0.161309:92' b'0.093105:94'
b'0.058743:136' b'0.050185:11' b'0.033802:91' b'0.011760:88'
b'0.008309:989' b'0.004927:95' b'0.004905:13' b'0.004095:317'
b'0.004006:96' b'0.003694:12' b'0.003526:42' b'0.003390:313'
...
b'0.000001:751' b'0.000001:685' b'0.000001:408' b'0.000001:116'
b'0.000001:627' b'0.000001:933' b'0.000000:661' b'0.000000:148']
# **总结**
总体来说,Triton 推理服务器与 OpenVINO 后端的结合,为机器学习模型的部署和运行提供了强大的解决方案,具备硬件加速、优化模型及提供模型服务的能力。
关于在服务器上的‘config.pbtxt’文件中模型参数的进一步优化和调整,请参阅:[triton-inference-server/openvino_backend: Triton 的 OpenVINO 后端](https://github.com/triton-inference-server/openvino_backend)
如果没有 Triton 推理服务器在使用中,可以尝试从 OpenVINO™ 模型服务器入手。
## 通知及免责声明
英特尔的技术可能需要支持特定的硬件、软件或服务激活。
没有任何产品或组件能够完全保证安全。
你的成本和结果可能会有所不同。
英特尔不控制或审核第三方提供的数据。你可以多看看其他资料以评估数据的准确性。
© Intel Corporation. Intel标志和其他Intel标志均为Intel Corporation或其子公司的商标。其他名称和品牌可能是其他人的商标。