转载自我的知乎专栏
之前买了一个Atlas200DK,花了一些业余时间写了一个多路推理的端到端的demo。在这个过程中踩了很多坑,也学习到不少新知识。最近准备写一些文章,总结一下使用atlas推理的经验。
我的demo代码仓库https://github.com/lenLRX/Atlas_ACL_E2E_Demo
首先介绍一些基本概念:
- 官网:atlas相关的软件包和文档可以在这个网址上找到,网站上还有官方论坛,遇到问题可以在上面提问,有官方人员回答。
- CANN:Atlas主要的软件包, 里面包括runtime,编译器等开发必要的软件包
- ACL:异构编程的接口,跑神经网络要用它
- atc: 模型转换工具,将caffe,tensorflow,onnx等框架的模型编译成NPU上运行的离线模型。
- MindStudio: 集成开发环境(非必须)
- 开发环境:编译代码和转换模型的环境,通常是一个Linux环境
- 运行环境:atlas硬件所在的环境,如Atlas200DK
我开发的这个demo兼容Atlas300I和Atlas200DK. Atlas200和Atlas500应该也兼容,但是我没有硬件:(. 这一系列文章将以Atlas200DK为主。
Atlas200DK
Atlas200DK的硬件参数参考这个文档。简单来说就是1个Ascend310的NPU+8个A55的CPU+8G内存,其中4个CPU是用户可以用的,另外四个系统保留。Atlas200DK上安装的是Ubuntu系统,所以我们可以把它当作一个普通的电脑使用,在上面编程或部署服务。
需要注意的一点是,在Atlas200DK上不区分Host和Device内存。
开发流程
当我们说要开发一个AI应用的时候,主要分为两个部分:
- NPU上运行的离线模型: *.om
- 通过ACL接口调用NPU的host程序(C++/Python)
以开发C++应用为例,首先需要一个使用atc转换模型的环境,这个环境通常是一个x86的Linux机器或虚拟机(理论上Atlas200DK上安装toolkit之后也可以转)。这个om转换成功以后可以一直使用,兼容不同的软件版本。所以我一般在华为云租一个小时机器,转换模型后就可以释放机器了,因为配置atc环境太复杂了。
然后是开发调用NPU的程序,这里有两种方案:
- 在一个x86的Linux环境上安装arm的toolkit,编写代码后时候交叉编译生成arm可执行文件,最后拷贝到Atlas200DK上运行。
- 直接在Atlas200DK上编写代码,编译,运行。
我一般使用方案2,在Windows上使用vscode remote直接ssh到Atlas200DK上开发,这样就不需要配置开发环境,节省大量时间。