NVIDIA Triton:使用 OpenVINO 后端部署AI模型

2024年05月28日 由 alex 发表 388 0

Triton Inference Server* 是一款开源软件,用于通过模型服务优化和部署机器学习模型。OpenVINO™ 是一个开源工具包,专门用于在英特尔® 架构上优化和部署深度学习模型。已经在使用英伟达™(NVIDIA®)* GPU 的 Triton Inference Server 的企业可以无缝过渡到英特尔硬件,并通过与 Triton Inference Server 的 OpenVINO 后端集成获得 OpenVINO 的优势,而无需完全转向 OpenVINO™ Model Server。


通过将 Triton Inference Server 与 OpenVINO 后端集成,企业可以充分利用英特尔硬件的硬件加速优势,实现高水平的推理性能。这一点在最新的第四代和第五代英特尔® 至强® 可扩展处理器上尤为明显,这些处理器具有支持Bfloat16(BF16)精度的英特尔® 高级矩阵扩展(AMX)功能。


BF16 压缩格式提高了性能和效率。通过以 16 位格式表示数据,英特尔® 至强® 处理器可以执行密集计算操作,如矩阵乘法,与传统的 32 位浮点运算相比,吞吐量显著提高。这促进了并行处理能力,降低了内存带宽要求,从而提高了能效,优化了资源利用率。


通过使用 OpenVINO 后端,企业可以充分利用英特尔硬件和 OpenVINO 优化的功能,并由 Triton Inference Server 的模型服务平台进行协调,从而开启新的可能性领域。


利用 OpenVINO 后端在 Triton 服务器上提供模型服务

本文将向你展示如何在带有 OpenVINO 后端的 Triton Inference Server 上部署模型,从下载和准备模型到从客户端向服务器发送推理请求。涵盖的模型有 ONNX、PyTorch(OpenVINO 格式:.bin 和 .xml)和 TensorFlow*。


设置

安装 Docker(https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-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 


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


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


3. 将 config.pbtxt 文件放入模型资源库,其结构如下:


model_repository 

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


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


4. 运行 Triton 推断服务器


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 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 Client 代码 client.py 到你想运行 Triton Client 的地方。


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


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


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


部署 PyTorch 模型

1. 下载并准备 PyTorch 模型。


PyTorch 模型 (.pt) 需要转换为 OpenVINO 格式。创建 downloadAndConvert.py 文件下载 PyTorch 模型,并使用 OpenVINO 模型转换器保存 model.xml 和 model.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 py 


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 ] } 
  } 


3. 将 config.pbtxt 文件以及 model.xml 和 model.bin 文件放入模型资源库,文件夹结构如下:


model_repository 

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


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


4. 运行 Triton 推断服务器


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 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 Client 代码 client.py 到你想运行 Triton Client 的地方。


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


在 client.py 文件中,由于模型与 Triton 教程中的模型略有不同,你需要更新模型的输入和输出名称,以便与后端所期望的名称一致。例如,将 PyTorch 模型中使用的原始输入名称 (input__0) 改为 OpenVINO 后端使用的名称 (x)。


8


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


docker run -it --net=host -v ${PWD}:/workspace/ nvcr.io/nvidia/tritonserver:24.04-py3-sdk bash ${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' '6.354599:14' b'4.292510:92' b'3.886345:90' b'3.333909:136' 
 b'3.096908:15'] 


部署 TensorFlow 模型

1. 下载并准备 TensorFlow 模型。


以 SavedModel 格式导出 TensorFlow 模型:


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


模型需要转换为 OpenVINO 格式。创建 convert.py 文件,使用 OpenVINO 模型转换器保存 model.xml 和 model.bin:


import openvino as ov 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 py 


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.xml 和 model.bin 文件放入模型资源库,结构如下:


model_repository 

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


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


4. 运行 Triton 推断服务器


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 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 Client 代码 client.py 到你想运行 Triton Client 的地方。


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 ${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' '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 后端相结合,为部署和服务机器学习模型提供了强大的解决方案,具有硬件加速、优化和模型服务功能。


文章来源:https://medium.com/openvino-toolkit/how-to-serve-models-on-nvidia-triton-inference-server-with-openvino-backend-a4c36300ee21
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消