寒武纪MLU220运行环境搭建及安装使用

       本文主要介绍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
          

2. Docker方式安装

      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
                

  1. 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》

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

参考来源

评论