使用 OpenVINO 后端部署 ONNX、PyTorch 和 TensorFlow 模型#

本 README 演示了如何使用 OpenVINO 后端 在 Triton 推理服务器上部署简单的 ONNX、PyTorch 和 TensorFlow 模型。

部署 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

2. 创建一个名为 config.pbtxt 的新文件#

name: "densenet_onnx"
backend: "openvino"
default_model_filename: "model.onnx"

3. 将 config.pbtxt 文件放置在模型仓库中,结构应如下所示:#

model_repository
|
+-- densenet_onnx
    |
    +-- config.pbtxt
    +-- 1
        |
        +-- model.onnx

注意:此目录结构是 Triton 推理服务器读取配置和模型文件的方式,并且必须遵循所需的布局。除了所需的模型文件外,请勿在模型仓库中放置任何其他文件夹或文件。

4. 运行 Triton 推理服务器#

docker run --rm -p 8000:8000 -p 8001:8001 -p 8002:8002 -v ${PWD}/model_repository:/models nvcr.io/nvidia/tritonserver:24.04-py3 tritonserver --model-repository=/models

5. 从 GitHub 下载 Triton 客户端代码 client.py 到您想要运行 Triton 客户端的位置。#

wget https://raw.githubusercontent.com/triton-inference-server/tutorials/main/Quick_Deploy/ONNX/client.py

6. 在与 client.py 文件相同的位置运行 Triton 客户端,安装依赖项并查询服务器#

构建客户端需要三个基本要点。首先,我们建立与 Triton 推理服务器的连接。其次,我们指定模型的输入和输出层的名称。最后,我们向 Triton 推理服务器发送推理请求。

docker run -it --rm --net=host -v ${PWD}:/workspace/ nvcr.io/nvidia/tritonserver:24.04-py3-sdk bash
pip install 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']

此处的输出格式为 <置信度分数>:<分类索引>。要了解如何将这些映射到标签名称以及更多信息,请参阅我们的文档。上面的客户端代码在 client.py 中提供。

部署 PyTorch 模型#

1. 下载并准备 PyTorch 模型。#

PyTorch 模型 (.pt) 需要转换为 OpenVINO 格式。创建一个 downloadAndConvert.py 文件以下载 PyTorch 模型,并使用 OpenVINO 模型转换器保存 model.xmlmodel.bin

import torchvision
import torch
import openvino as ov
model = torchvision.models.resnet50(weights='DEFAULT')
ov_model = ov.convert_model(model)
ov.save_model(ov_model, 'model.xml')

安装依赖项

pip install openvino
pip install torchvision

运行 downloadAndConvert.py

python3 downloadAndConvert.py

要转换您自己的 PyTorch 模型,请参阅 转换 PyTorch 模型

2. 创建一个名为 config.pbtxt 的新文件#

name: "resnet50 "
backend: "openvino"
max_batch_size : 0
input [
  {
    name: "x"
    data_type: TYPE_FP32
    dims: [ 3, 224, 224 ]
    reshape { shape: [ 1, 3, 224, 224 ] }
  }
]
output [
  {
    name: "x.45"
    data_type: TYPE_FP32
    dims: [ 1, 1000 ,1, 1]
    reshape { shape: [ 1, 1000 ] }
  }
]
  1. 将 config.pbtxt 文件以及 model.xml 和 model.bin 放置在模型仓库中,文件夹结构应如下所示

model_repository
|
+-- resnet50
    |
    +-- config.pbtxt
    +-- 1
        |
        +-- model.xml
        +-- model.bin

注意:此目录结构是 Triton 推理服务器读取配置和模型文件的方式,并且必须遵循所需的布局。除了所需的模型文件外,请勿在模型仓库中放置任何其他文件夹或文件。

4. 运行 Triton 推理服务器#

docker run --rm -p 8000:8000 -p 8001:8001 -p 8002:8002 -v ${PWD}/model_repository:/models nvcr.io/nvidia/tritonserver:24.04-py3 tritonserver --model-repository=/models

5. 在另一个终端中,从 GitHub 下载 Triton 客户端代码 client.py 到您想要运行 Triton 客户端的位置。#

wget https://raw.githubusercontent.com/triton-inference-server/tutorials/main/Quick_Deploy/PyTorch/client.py

client.py 文件中,您需要更新模型输入和输出名称,以匹配后端期望的名称,因为该模型与 Triton 教程中的模型略有不同。例如,将 PyTorch 模型中使用的原始输入名称 (input__0) 更改为 OpenVINO 后端使用的名称 (x)。

旧值

新值

input__0

x

output__0

x.45

6. 在与 client.py 文件相同的位置运行 Triton 客户端,安装依赖项并查询服务器。#

构建客户端需要三个基本要点。首先,我们建立与 Triton 推理服务器的连接。其次,我们指定模型的输入和输出层的名称。最后,我们向 Triton 推理服务器发送推理请求。

docker run -it --net=host -v ${PWD}:/workspace/ nvcr.io/nvidia/tritonserver:24.04-py3-sdk bash
pip install torchvision
wget  -O img1.jpg "https://www.hakaimagazine.com/wp-content/uploads/header-gulf-birds.jpg"
python3 client.py

7. 输出#

[b'6.354599:14' b'4.292510:92' b'3.886345:90' b'3.333909:136' b'3.096908:15']

此处的输出格式为 <置信度分数>:<分类索引>。要了解如何将这些映射到标签名称以及更多信息,请参阅我们的文档。上面的客户端代码在 client.py 中提供。

部署 TensorFlow 模型#

1. 下载并准备 TensorFlow 模型。#

以 SavedModel 格式导出 TensorFlow 模型

docker run -it --gpus all -v ${PWD}:/workspace nvcr.io/nvidia/tensorflow:24.04-tf2-py3
python3 export.py

该模型需要转换为 OpenVINO 格式。创建一个 convert.py 文件,使用 OpenVINO 模型转换器保存 model.xmlmodel.bin

import openvino as ov
ov_model = ov.convert_model(' path_to_saved_model_dir’)
ov.save_model(ov_model, 'model.xml')

安装依赖项

pip install openvino

运行 convert.py

python3 convert.py

要转换您的 TensorFlow 模型,请参阅 转换 TensorFlow 模型

2. 创建一个名为 config.pbtxt 的新文件#

name: "resnet50"
backend: "openvino"
max_batch_size : 0
input [
  {
    name: "input_1"
    data_type: TYPE_FP32
    dims: [-1, 224, 224, 3 ]
  }
]
output [
  {
    name: "predictions"
    data_type: TYPE_FP32
    dims: [-1, 1000]
  }
]

3. 将 config.pbtxt 文件以及 model.xmlmodel.bin 放置在模型仓库中,结构应如下所示:#

model_repository
|
+-- resnet50
    |
    +-- config.pbtxt
    +-- 1
        |
        +-- model.xml
        +-- model.bin

注意:此目录结构是 Triton 推理服务器读取配置和模型文件的方式,并且必须遵循所需的布局。除了所需的模型文件外,请勿在模型仓库中放置任何其他文件夹或文件。

4. 运行 Triton 推理服务器#

docker run --rm -p 8000:8000 -p 8001:8001 -p 8002:8002 -v ${PWD}/model_repository:/models nvcr.io/nvidia/tritonserver:24.04-py3 tritonserver --model-repository=/models

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 客户端,安装依赖项并查询服务器。#

构建客户端需要三个基本要点。首先,我们建立与 Triton 推理服务器的连接。其次,我们指定模型的输入和输出层的名称。最后,我们向 Triton 推理服务器发送推理请求。

docker run -it --net=host -v ${PWD}:/workspace/ nvcr.io/nvidia/tritonserver:24.04-py3-sdk bash
pip install --upgrade tensorflow
pip install image
wget  -O img1.jpg "https://www.hakaimagazine.com/wp-content/uploads/header-gulf-birds.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']

此处的输出格式为 <置信度分数>:<分类索引>。要了解如何将这些映射到标签名称以及更多信息,请参阅我们的文档。上面的客户端代码在 client.py 中提供。