本文主要介绍MLU220环境搭建,SDK安装,部署,运行示例。
准备工作
1> 硬件:
1)主机JWIPC E7QS,i7-6700 CPU @3.4GHz, 16GB内存,SSD硬盘,OS Ubuntu 18.04.5 LTS,正常联网
2)MLU220卡,m.2-2-pcie转接板(如果主机上没有m.2接口可以使用转接板)
2> 软件:
Cambricon MLU220驱动,SDK IVA-1.6.118 【SDK等资料索取可联系Barret.Bi@wpi-group.com】
Samples下载
3> MLU220安装如下图

检查MLU卡
将卡插入pcie卡槽后,开机,进入终端后输入命令:lspci -v -d:220
红色框需要出现如图的数字,才能进入下一步。
可能遇到的问题:
- Bar空间未分配

输入命令 dmesg 会看到如下信息
处理方法:
(1) 在BIOS中,开启above4G选项
(2) 若無above4G,升級BIOS
MLU220 工作需要在 BIOS 中开启64位设备在大于4G地址空间的解码,根据不同的 CPU、主板厂商,需要开启 Re-Size BAR Support 和(或) Above 4G Decoding 功能选项。不同主板厂商 BIOS 升级方式各不相同,相关操作参考网络内容。
(3) 若無above4G,更換主板。
驱动安装
sudo apt install dkms -y
cd ~/Downloads//driver
sudo dpkg -i neuware-mlu220m.2-driver-dkms_4.9.4_all.deb
若系统中已经存在旧版本驱动,则在执行以上命令时会出现如下图所示提示:
需先卸载旧的驱动再安装新版本驱动
sudo rmmod cambricon-drv
sudo insmod /lib/modules/5.4.0-77-generic/updates/dkms/cambricon-drv.ko
sudo lspci -v -d:220
cnmon
出现这样的显示,表示安装成功。
CNToolkit安装
cd ~/Downloads/v1.7.0/cntoolkit-ubuntu18.04
sudo dpkg -i cntoolkit_1.7.3-1. ubuntu18.04_amd64.deb
cd /var/cntoolkit-1.7.3
sudo dpkg -i *.deb
若安装过程中报错如有些安装依赖没有,可以网上搜索手动下载安装。
安装部署
1. 直接拷贝模型和samples
1) 将在MLU270上已经转换好的模型和测试好的程序拷贝到MLU220主机中,位置自定。如下以mask_rcnn为例

在脚本程序中配置好各参数如数据集、离线模型位置,file_list,然后执行脚本
./test_accuracy.sh
./test_throughput.sh
1) 安装docker略 : 参考 https://www.runoob.com/docker/ubuntu-docker-install.html
2) 在MLU270上将指定镜像打包成.tar文件:
a. 查看MLU270机器上正常运行的pytorch容器 : sudo docker ps -a

b. 将pytorch容器导出成新的镜像:
sudo docker commit -m "wpi create pytorch of cambricon-mlu220" 1ce2962c9ca9 wpi_cambricon-mlu220_pytorch:v1.0
sudo docker save wpi_cambricon-mlu220_pytorch:v1.0 > cambricon-mlu270-v1.7.0-pytorch-1804-copyto220.tar
c. 命令行使用ls查看是否有生成.tar文件

3) 将MLU270上导出的镜像拷贝到MLU220上,并导入该镜像
sudo docker load -i cambricon-mlu270-v1.7.0-pytorch-1804-copyto220.tar
执行后使用sudo docker images查看是否有导入该镜像
然后创建容器启动脚本,代码如下:
#/bin/bash
export MY_CONTAINER="Cambricon-MLU220-pytorch-v1.7.0"
num=`docker ps -a|grep "$MY_CONTAINER"|wc -l`
echo $num
echo $MY_CONTAINER
if [ 0 -eq $num ];then
xhost +
docker run -e DISPLAY=unix$DISPLAY --device /dev/cambricon_dev0 --net=host --pid=host -v /sys/kernel/debug:/sys/kernel/debug -v /tmp/.X11-unix:/tmp/.X11-unix -it --privileged --name $MY_CONTAINER -v $PWD/Cambricon-MLU220:/home/Cambricon-MLU220 \
-v $PWD/datasets: /home/Cambricon-MLU220/datasets \
wpi_cambricon-mlu220_pytorch:v1.0 /bin/bash
else
docker start $MY_CONTAINER
#sudo docker attach $MY_CONTAINER
docker exec -ti $MY_CONTAINER /bin/bash
fi
4)执行docker启动脚本后,执行 source /torch/venv3/pytorch/bin/activate
再cd /torch/examples/online/mask-rcnn/
然后./build_mask-rcnn.sh
5) 模型量化
export TORCH_HOME='/torch/examples/online/mask-rcnn'
export COCO_PATH_PYTORCH='/home/Cambricon-MLU220/datasets'
python test_mask-rcnn.py --min-image-size 800 --mlu false --jit false --image_number 4 --batch_size 1 --half_input 0 --coco_path $COCO_PATH_PYTORCH --quantization true --quantized_mode 1 --ann_dir $COCO_PATH_PYTORCH/COCO --dump false --core_number 4 MODEL.DEVICE cpu
6)online推理
mkdir -p /torch/examples/online/mask-rcnn/online/checkpoints
cp /home/Cambricon-MLU220/mask_rcnn.pth /torch/examples/online/mask-rcnn/online/checkpoints
export TORCH_HOME='/torch/examples/online/mask-rcnn'
export COCO_PATH_PYTORCH='/home/Cambricon-MLU220/datasets'
python test_mask-rcnn.py --min-image-size 800 --mlu true --jit true --image_number 4 --batch_size 1 --half_input 0 --coco_path $COCO_PATH_PYTORCH --quantization false --quantized_mode 1 --ann_dir $COCO_PATH_PYTORCH/COCO --dump false --core_number 4 --mcore MLU220 MODEL.DEVICE mlu
7) offline模型生成
python test_mask-rcnn.py --min-image-size 800 --mlu true --jit true --image_number 4 --batch_size 1 --half_input 0 --coco_path $COCO_PATH_PYTORCH --quantization false --quantized_mode 1 --ann_dir $COCO_PATH_PYTORCH/COCO --dump false --core_number 4 --mcore MLU220 --genoff true MODEL.DEVICE mlu
8) 测试
将下载的mlu220_demo放在offline目录下。(mlu220_demo在MLU270和MLU220上都可以测试,下载地址及方式可以参考之前的博文《寒武纪MLU270上測試Pytorch模型》介绍)
cd /torch/examples/offline/mlu220_demo/src/mask_rcnn
cp ../../../../online/mask_rcnn/mask_rcnn.cambricon* .
修改test_accuracy.sh和test_throughput.sh文件中关于数据集/离线模型的位置参数如下图
运行test_accuracy.sh
运行test_throughput.sh
- sample编译运行
在上述安装部署选项2中的docker环境中,将下载的prj.tar.gz解压到/home/Cambricon-MLU220目录下
使用vi打开 /etc/ld.so.conf文件,添加如下内容
/usr/lib/x86_64-linux-gnu
path_to/prj/3rd/ffmpeg-mlu/lib
path_to/prj/3rd/cntoolkit/lib
path_to/prj/3rd/cncv/lib
path_to/prj/3rd/op/lib/220
#添加之后执行如下命令:
ldconfig
使用vi打开prj/app/test/test_yolov3.cpp 修改如下,使用yolov3_220.cambricon模型测试
使用vi打开prj/app/main.cpp,修改如下:
mkdir build && cd build
cmake .. && make
编译完成后会看到在当前目录下生成可执行程序run,执行./run后可以看到在当前目录下生成了test.jpg、test.jpg-out0两个文件,查看test.jpg
参考文档
- 《Cambricon-Driver-User-Guide-CN-v4.9.2.pdf》
- 《Cambricon-PyTorch-User-Guide-CN-v0.15.0.pdf》
评论