寒武纪Cambricon MLU270 环境搭建 CNStream EasyDK编译 改变系统路径 CNJPEGENC_FLAG_INVALID_FRAME 错误

先看下MLU270 长啥样子:当成显卡来用就行了直接插在主板的PCI-E插槽上

寒武纪Cambricon MLU270 环境搭建 CNStream EasyDK编译 改变系统路径 CNJPEGENC_FLAG_INVALID_FRAME 错误_第1张图片

寒武纪Cambricon MLU270 环境搭建 CNStream EasyDK编译 改变系统路径 CNJPEGENC_FLAG_INVALID_FRAME 错误_第2张图片

寒武纪Cambricon MLU270 环境搭建 CNStream EasyDK编译 改变系统路径 CNJPEGENC_FLAG_INVALID_FRAME 错误_第3张图片 

 

 

说明一下前提:项目组有两个人 都需要利用寒武纪的MLU 270 工作,另一位同事用的是CNCodec是寒武纪封装过一层的 ,不是标准SDK提供的CNCodec,他只需要做视频解码编码的工作。

而领导给我的工作是用MLU270 来做AI这块的东西 ,然后看了下官方说明 需要用CNStream来做。然后从Git吧CNStream 下下来之后,里面有对应的编译说明 还得下载easyDK ,都下来之后

CNStream地址

直接编译 ,发现不行,后来发现,寒武纪封装过的CNCodec 和标准SDK 公用了很多东西 但是有不一样,而CNStream依赖于标准SDK,所以这就有个问题了,

原来以为有好几个 另外再装一台机子就可以。后来发现 所有的板卡都物尽其用了 也就是说目前司只有一个MLU270板卡。视频转码的同事用的CNCodec不是标准SDK提供的 而我有需要用标准的SDK进行编译。但是 又只有一台机子。

后来经过摸索 终于 搞定了,这里记录下

1,硬件查到机子上 lspci -d:270

 如下显示说明正常了

2,安装驱动 如下图 dkms 那个就是驱动

 dpkg -i neuware-mlu270-driver-dkms_4.2.0_all.deb

正常安装成功之后 执行cnmon命令 会显示板卡信息 如下:

寒武纪Cambricon MLU270 环境搭建 CNStream EasyDK编译 改变系统路径 CNJPEGENC_FLAG_INVALID_FRAME 错误_第4张图片

 然后安装SDK  我这里有两个版本的一个1.4 一个1.5 

apt list neuware-mlu270 

有的话 会显示一些信息 我的已经被我改了没有显示了  

如果有的话需要先卸载旧版本 执行如下操作 :

apt remove neuware-mlu270

然后 安装(准确来说是解压)

dpkg -i neuware-mlu270-1.5.0-1_Ubuntu18.04_amd64.deb

会默认解压到 /var目录下一个neuware开头的文件夹下 我的如下图:

寒武纪Cambricon MLU270 环境搭建 CNStream EasyDK编译 改变系统路径 CNJPEGENC_FLAG_INVALID_FRAME 错误_第5张图片

然后进入neuware-mul270-1.5.0目录 有如下安装包:

寒武纪Cambricon MLU270 环境搭建 CNStream EasyDK编译 改变系统路径 CNJPEGENC_FLAG_INVALID_FRAME 错误_第6张图片

 执行如下命令全部安装 这些就是寒武纪的SDK 开发需要的东西了 就是一些头文件 和so库

dpkg -i *.deb

正确执行成功后 会在/usr/local/目录下生成一个neuware目录 如下图  

PS:我的被我命名成neuware_qmcy了 这下 做转码同事再安装非标准sdk的话我们两个就互相不影响了

寒武纪Cambricon MLU270 环境搭建 CNStream EasyDK编译 改变系统路径 CNJPEGENC_FLAG_INVALID_FRAME 错误_第7张图片

下面的步骤比较重要,因为默认是安装到/usr/local/neuware目录下  所以 安装之后 需要把这个neuware目录复制到另一个自定义的目录 我放到了如下目录(服务器是命令行的没有装GUI 操作起来不方便  所以用samba 搭建了一个NFS 这样在我自己的电脑上就可以通过网路访问 像本地目录一样方便了,如下面的第二张图)

寒武纪Cambricon MLU270 环境搭建 CNStream EasyDK编译 改变系统路径 CNJPEGENC_FLAG_INVALID_FRAME 错误_第8张图片

寒武纪Cambricon MLU270 环境搭建 CNStream EasyDK编译 改变系统路径 CNJPEGENC_FLAG_INVALID_FRAME 错误_第9张图片

寒武纪SDK安装之后 会有一个NEUWARE_HOME的环境变量 可以echo一下 如下图 

后面编译的时候 都是按照这个NEUWARE_HOME 来找头文件和so库的

刚开始 是准备直接更改CMakeLists.txt  里面这个NEUWARE_HOME

比如改成NEUWARE_HOME_QMCY 后来发现 引用 NEUWARE_HOME这个变量的地方太多了,而且不止这个一个文件  cmake下面的mk文件里面也有很多。

然后就想到了第二种方法,即直接改变这个变量的值就可以了 实验成功 

这下就好办了 CNStream主目录下 新建一个build文件夹 新建一个build.sh

内容如下:

寒武纪Cambricon MLU270 环境搭建 CNStream EasyDK编译 改变系统路径 CNJPEGENC_FLAG_INVALID_FRAME 错误_第10张图片

 很简单shell脚本 主要就是 先保存原来的NEUWARE_HOME的值 编译完成之后再恢复回原来的值

cmake 的几个参数 可以根据自己的需要设置,prefix是编译完成之后 头文件和库的安装目录 

没问问题的会 编译就成功了  

之后make install  发现 已经成功了 如下图 

寒武纪Cambricon MLU270 环境搭建 CNStream EasyDK编译 改变系统路径 CNJPEGENC_FLAG_INVALID_FRAME 错误_第11张图片

中间有个坑 

就是每次执行build.sh这个脚本之后会在build目录下生成许多额外的东西  如下图

寒武纪Cambricon MLU270 环境搭建 CNStream EasyDK编译 改变系统路径 CNJPEGENC_FLAG_INVALID_FRAME 错误_第12张图片

本来我之后一个build.sh 文件 结果编译之后 多了这么多 。而第一次编译 我没有改变那个NEUWARE_HOME的值 用的是默认的值 ,

之后再执行 新的脚本 即改变了这个值之后 发现 build目录下的有的文件并不会即使更新,就是这个CMakeCache.txt文件 ,百度了一下 是个缓存 直接删掉 就行 ,我为了保险 删除除了build.sh之外的所有东西 ,然后重新 执行一下就可以了 

哦对了编译的时候遇到个问题就是easyDK里面有个 Easy_encode.cpp 有个常量未定义 刚开始以为环境有问题 换了几个sdk都不行 ,就看了下上面的值 点进去发现有个差不过含义的值 ,替换一下就ok了 如下面的两张图 。这样 CNStream的开发环境就搭建好了  。下面就是正式的开发工作了

寒武纪Cambricon MLU270 环境搭建 CNStream EasyDK编译 改变系统路径 CNJPEGENC_FLAG_INVALID_FRAME 错误_第13张图片

寒武纪Cambricon MLU270 环境搭建 CNStream EasyDK编译 改变系统路径 CNJPEGENC_FLAG_INVALID_FRAME 错误_第14张图片

你可能感兴趣的:(寒武纪,AI,人工智能)