先看下MLU270 长啥样子:当成显卡来用就行了直接插在主板的PCI-E插槽上
说明一下前提:项目组有两个人 都需要利用寒武纪的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命令 会显示板卡信息 如下:
然后安装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开头的文件夹下 我的如下图:
然后进入neuware-mul270-1.5.0目录 有如下安装包:
执行如下命令全部安装 这些就是寒武纪的SDK 开发需要的东西了 就是一些头文件 和so库
dpkg -i *.deb
正确执行成功后 会在/usr/local/目录下生成一个neuware目录 如下图
PS:我的被我命名成neuware_qmcy了 这下 做转码同事再安装非标准sdk的话我们两个就互相不影响了
下面的步骤比较重要,因为默认是安装到/usr/local/neuware目录下 所以 安装之后 需要把这个neuware目录复制到另一个自定义的目录 我放到了如下目录(服务器是命令行的没有装GUI 操作起来不方便 所以用samba 搭建了一个NFS 这样在我自己的电脑上就可以通过网路访问 像本地目录一样方便了,如下面的第二张图)
寒武纪SDK安装之后 会有一个NEUWARE_HOME的环境变量 可以echo一下 如下图
后面编译的时候 都是按照这个NEUWARE_HOME 来找头文件和so库的
刚开始 是准备直接更改CMakeLists.txt 里面这个NEUWARE_HOME
比如改成NEUWARE_HOME_QMCY 后来发现 引用 NEUWARE_HOME这个变量的地方太多了,而且不止这个一个文件 cmake下面的mk文件里面也有很多。
然后就想到了第二种方法,即直接改变这个变量的值就可以了 实验成功
这下就好办了 CNStream主目录下 新建一个build文件夹 新建一个build.sh
内容如下:
很简单shell脚本 主要就是 先保存原来的NEUWARE_HOME的值 编译完成之后再恢复回原来的值
cmake 的几个参数 可以根据自己的需要设置,prefix是编译完成之后 头文件和库的安装目录
没问问题的会 编译就成功了
之后make install 发现 已经成功了 如下图
中间有个坑
就是每次执行build.sh这个脚本之后会在build目录下生成许多额外的东西 如下图
本来我之后一个build.sh 文件 结果编译之后 多了这么多 。而第一次编译 我没有改变那个NEUWARE_HOME的值 用的是默认的值 ,
之后再执行 新的脚本 即改变了这个值之后 发现 build目录下的有的文件并不会即使更新,就是这个CMakeCache.txt文件 ,百度了一下 是个缓存 直接删掉 就行 ,我为了保险 删除除了build.sh之外的所有东西 ,然后重新 执行一下就可以了
哦对了编译的时候遇到个问题就是easyDK里面有个 Easy_encode.cpp 有个常量未定义 刚开始以为环境有问题 换了几个sdk都不行 ,就看了下上面的值 点进去发现有个差不过含义的值 ,替换一下就ok了 如下面的两张图 。这样 CNStream的开发环境就搭建好了 。下面就是正式的开发工作了