上篇文章分享了哪吒开发板的开箱和Ubuntu22.04系统的安装,这篇文章将分享一下我使用哪吒开发板在iGPU上使用OpenVINO(C++)推理Transformer模型的过程。
OpenVINO配置
在OpenVINO官网下载linux版本的压缩包到开发板上
将压缩包解压
tar -zxvf l_openvino_toolkit_ubuntu22_2024.3.0.16041.1e3b88e4e3f_x86_64.tgz
进入解压目录,安装依赖
cd l_openvino_toolkit_ubuntu22_2024.3.0.16041.1e3b88e4e3f_x86_64/
sudo -E ./install_dependencies/install_openvino_dependencies.sh
然后配置环境变量
source ./setupvars.sh
至此,OpenVINO就安装好了,因为我当前的项目不需要其他依赖包,如果需要跑Yolo这样的模型就还需要安装OpenCV等其他依赖。
如果需要将模型部署在iGPU上,还需要另外安装OpenCL runtime packages,参见官方说明文档,这里我使用deb包的方式进行安装,按照Github的说明下载7个deb包到开发板上,然后dpkg安装
sudo dpkg -i *.deb
如果有依赖报错,就要先apt安装依赖,然后再dpkg安装7个deb包
sudo apt install ocl-icd-libopencl1
这样在iGPU上进行OpenVINO推理的环境就配置完成了。
Transformer模型推理
下面是我自己项目的一个演示,我的模型是一个基于Tansformer的小模型,训练完生成后onnx中间表示,OpenVINO可以直接使用onnx进行推理,不过转为OpenVINO IR格式的模型推理会快一点,转换命令如下:
ovc model.onnx
转换默认会生成FP16的模型,如果精度有较大损失,可指定compress_to_fp16为False就不会进行FP16量化了。
ovc model.onnx --compress_to_fp16=False
转换后,将生成.xml和.bin两个文件,.xml文件描述了模型的结构,.bin文件包含了模型各层的参数。
我这里使用cmake进行构建,在CMakeLists.txt中指定前面解压的OpenVINO路径
cmake_minimum_required(VERSION 3.10.0)
project(AutoInjector_Transformer)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(OpenVino_ROOT /home/up/openvino/l_openvino_toolkit_ubuntu22_2024.3.0.16041.1e3b88e4e3f_x86_64/runtime)
set(OpenVINO_DIR ${OpenVino_ROOT}/cmake)
find_package(OpenVINO REQUIRED)
include_directories(
${OpenVino_ROOT}/include
${OpenVino_ROOT}/include/openvino
)
link_directories(
${OpenVino_ROOT}/lib
${OpenVino_ROOT}/lib/intel64
)
add_executable(AutoInjector_Transformer AutoInjector_Transformer.cpp)
target_link_libraries(AutoInjector_Transformer openvino)
然后通过cmake构建项目
mkdir build && cd build
cmake ..
make
然后运行生成的可执行文件
./AutoInjector_Transformer
可以看到,在iGPU上的推理速度还是很快的,前几次推理稍慢,8ms,后续基本稳定在4ms,这跟我之前在RTX4060 GPU上用TensorRT推理并没有慢多少。然后我这里修改了代码改为CPU运行,重新编译、运行,结果在CPU上的速度还要更快一点。
以上就是在哪吒开发板上配置OpenVINO环境,在iGPU上推理Transformer模型的过程,相关代码、模型和数据因为涉及保密,不方便开放,因此我在Github上开源了另一个基于OpenVINO部署YoloV8模型对摄像头采集到的图像进行实时目标检测的项目,大家感兴趣的话可以clone下来跑一跑,项目地址:GitHub - EtAiorsW/yolov8-openvino