【哪吒开发板试用】(三)使用OpenVINO™ Model Server在哪吒开发板上部署模型
之前分享了哪吒开发板Ubuntu22.04系统的安装和基于OpenVINO(C++)推理Transformer模型的过程,这篇文章分享一下如何通过OpenVINO™ Model Server将模型部署在开发版上。
OpenVINO™ Model Server
OpenVINO™ Model Server(OVMS)是一个高性能的模型部署系统,使用C++实现,并在Intel架构上的部署进行了优化,使用OpenVINO进行推理,推理服务通过gPRC或REST API提供,使得部署新算法、AI实验变得简单。OVMS可以在Docker容器、裸机、Kuberntes环境中运行,这里我使用的是Docker容器。
开发板Docker安装
Ubuntu22.04上Docker的安装可以参照官方文档
首先安装一些依赖包
sudo apt update
sudo apt install ca-certificates curl
然后添加Docker的GPG密钥,如果你的网络可以正常访问Docker可以通过下面的命令添加APT源
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
如果无**常访问,就需要换成国内镜像源,这里以阿里源为例
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=$(dpkg --print-architecture)] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(l**_release -cs) stable"
sudo apt update
之后就可以通过APT安装Docker
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
安装后可以通过以下命令验证是否安装成功
sudo docker --version
sudo docker run hello-world
拉取Model Server镜像
各个版本的镜像可以在OpenVINO的Docker hub上找到,我拉取了一个最新的带有GPU环境的镜像
sudo docker pull openvino/model_server:latest-gpu
sudo docker images
准备模型
首先新建一个models文件夹,models文件夹下的结构如下
我在models文件夹下存放了resnet50和Transformer两个模型,版本都为1,模型为OpenVINO IR格式
启动OVMS容器
sudo docker run -it --device=/dev/dri --group-add=$(stat -c "%g" /dev/dri/render* | head -n 1) -d -u $(id -u) -v $(pwd)/models:/models -p 9000:9000 openvino/model_server:latest-gpu --model_name Transformer --model_path /models/Transformer --port 9000 --target_device GPU
各个参数的含义可以在官方文档找到,我这里使用了iGPU做推理,启动后可以通过命令查看容器ID、状态等信息
sudo docker ps
这样模型就通过OpenVINO™ Model Server部署在了哪吒开发板上
请求推理服务
接下来通过gRPC API访问推理服务,以python为例,首先安装ovmsclient包
pip install ovmsclient
python代码如下,我是在另一台局域网的机器上请求推理服务,10.0.70.164为开发板的ip地址
import os
import time
import numpy as np
import pandas as pd
from ovmsclient import make_grpc_client
client = make_grpc_client("10.0.70.164:9000")
sum_time = 0
root_dir = './data/'
filelist = os.listdir(root_dir)
for file in filelist:
start_time = time.perf_counter()
sample = pd.read_csv(root_dir + file)['ForceValue'].values
inputs = sample.reshape(1, -1).astype(np.float32)
output = client.predict({"input": inputs}, "Transformer")
end_time = time.perf_counter()
sum_time += end_time - start_time
result_index = np.argmax(output[0], axis=0)
print('Infer results: ', result_index, '\nInfer time: ', (end_time - start_time) * 1000, 'ms')
print('Average time: ', sum_time / len(filelist) * 1000, 'ms')
平均的推理时间12ms,速度还是很快的