手记

如何在NVIDIA Triton推理服务器上使用OpenVINO后端部署模型

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模型。
  1. 构建模型库并下载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或其子公司的商标。其他名称和品牌可能是其他人的商标。
0人推荐
随时随地看视频
慕课网APP