Tengine框架在最近\支持了GPU上通过CUDA或TensorRT加速,那么今天阿chai就带着大家看看我们如何在NVIDIA的嵌入式设备中使用Tengine框架。今天的算法完全在嵌入式上进行,请小伙伴们自行学习有关LInux下开发的相关知识。

Tengine CUDA

硬件平台 Jetson Nano
CUDA 10.0
TensorRT 5.0
cuDNN 7.0

如果是在不知道自己的版本,可以输入如下命令:

# XXXX为查询的内容
dpkg -l | grep xxxx

首先安装相关依赖:

sudo apt-get install cmake make g++ git

clone新的Tengien Lite Demo:

git clone -b tengine-lite https://github.com/OAID/Tengine.git  Tengine-Lite

设置NVCC的环境变量,NVCC的位置一般情况下在这:

export CUDACXX=/usr/local/cuda/bin/nvcc

建立编译文件夹并进入:

mkdir -p build-linux-cuda

cd build-linux-cuda

cmake参数的文件路径一定要设置成自己的,如果不知道在哪里,可以根据下方的路径进行寻找。

cmake -DTENGINE_ENABLE_CUDABACKEND=ON \ -DCUDA_INCLUDE_DIR=/usr/local/cuda-10.0/targets/aarch64-linux/include \ -DCUDA_LIBARAY_DIR=/usr/local/cuda-10.0/targets/aarch64-linux/lib ..

编译:

make -j4

make install

测试用的程序文件在如下路径中,为tm_classification_cuda

Tengine-Lite/build-linux-cuda/examples/

测试以MobileNet V1为例,测试的图片与模型可在如下链接中下载:

链接: https://pan.baidu.com/s/1Izm0RlLJvwTIkhfQ_NXg5Q  
密码: faan

将模型预测师图片下载好导入嵌入式设备中并记住路径,输入如下命令进行测试,模型与图片的路径以自己设置的为准。

./tm_classification_cuda -m mobilenet_v1.tmfile -i dog.jpg -g 224,224 -s 0.017,0.017,0.017 -w 104.007,116.669,122.679 -r 10

我们可以看到如下结果:

Tengine plugin allocator CUDA is registered.
tengine-lite library version: 1.2-dev

model file : mobilenet_v1.tmfile
image file : dog.jpg
img_h, img_w, scale[3], mean[3] : 224 224 , 0.017 0.017 0.017, 104.0 116.7 122.7
Repeat 10 times, thread 1, avg time 35.95 ms, max_time 100.85 ms, min_time 19.96 ms
--------------------------------------
22.900383, 537
20.012611, 248
18.909063, 249
18.323162, 250
14.298100, 174
--------------------------------------

同样我们可以输入如下命令测试纯CPU的推理速度:

./tm_classification -m mobilenet_v1.tmfile -i dog.jpg -g 224,224 -s 0.017,0.017,0.017 -w 104.007,116.669,122.679 -r 10

CPU的推理速度是远远慢于CUDA加速的GPU推理。

Tengine TensorRT

硬件平台 Jetson AGX Xa****vier
CUDA 10.2
TensorRT 7.2
cuDNN 7.6

如果是在不知道自己的版本,可以输入如下命令:

# XXXX为查询的内容
dpkg -l | grep xxxx

首先安装相关依赖:

sudo apt-get install cmake make g++ git

clone新的Tengien Lite Demo:

git clone -b tengine-lite https://github.com/OAID/Tengine.git  Tengine-Lite

设置NVCC的环境变量,NVCC的位置一般情况下在这:

export CUDACXX=/usr/local/cuda/bin/nvcc

建立编译文件夹并进入:

mkdir -p build-linux-trt

cd build-linux-trt

cmake参数的比CUDA的要多一些,千万不要弄错。如果不知道在哪里,可以根据下方的路径进行寻找。

cmake -DTENGINE_ENABLE_TENSORRT=ON \ -DTENSORRT_INCLUDE_DIR=/usr/include/aarch64-linux-gnu \ -DTENSORRT_LIBRARY_DIR=/usr/lib/aarch64-linux-gnu \ -DCUDA_INCLUDE_DIR=/usr/local/cuda-10.0/targets/aarch64-linux/include \ -DCUDA_LIBARAY_DIR=/usr/local/cuda-10.0/targets/aarch64-linux/lib ..

编译:

make -j4

make install

测试用的程序文件在如下路径中,为tm_classification_trt

Tengine-Lite/build-linux-cuda/examples/

测试以MobileNet V1为例,测试的模型可在如下链接中下载:

链接: https://pan.baidu.com/s/1Izm0RlLJvwTIkhfQ_NXg5Q  
密码: faan

将模型预测师图片下载好导入嵌入式设备中并记住路径,输入如下命令进行测试,模型与图片的路径以自己设置的为准。

./tm_classification_trt -m mobilenet_v1.tmfile -i cat.jpg -g 224,224 -s 0.017,0.017,0.017 -w 104.007,116.669,122.679 -r 10

我们可以看到如下结果:

Tengine plugin allocator TRT is registered.
tengine-lite library version: 1.2-dev
Tengine: Try using inference precision TF32 failed, rollback.

model file : mobilenet_v1.tmfile
image file : cat.jpg
img_h, img_w, scale[3], mean[3] : 224 224 , 0.017 0.017 0.017, 104.0 116.7 122.7
Repeat 1 times, thread 1, avg time 2.91 ms, max_time 2.91 ms, min_time 2.91 ms
--------------------------------------
8.574147, 282
7.880117, 277
7.812574, 278
7.286457, 263
6.357487, 281
--------------------------------------

同样我们可以输入如下命令测试纯CPU的推理速度:

./tm_classification -m mobilenet_v1.tmfile -i cat.jpg -g 224,224 -s 0.017,0.017,0.017 -w 104.007,116.669,122.679 -r 10

CPU的推理速度是远远慢于CUDA加速的GPU推理。