CANN
- 环境配置
- 基础命令
- NPU架构
- 在Docker容器中使用NPU设备
- Ascend-SDK 的使用
- 视频编解码、图片编解码、图像处理
- 模型操作
- 编译模型
- 查看模型
- 推理模型
- 算子开发
- 算子开发基础知识
- 算子与核函数的联系和区别
- Kernel函数直调开发
- 核函数的实现
- 核函数的编译
- 核函数的调用
- 算子工程化开发
- 算子原型设计
- 创建适配AI框架的算子工程
- 实现算子Host侧、Kernel侧、AI框架插件层的代码
- 编译部署算子工程
- 创建简易算子工程
- 实现Host和Kernel侧代码
- 编译部署简易工程算子
- 调用算子工程实现的算子
- 单算子API执行
- 单算子模型执行
- 基于算子二进制文件中的核函数执行
- 算子调测工具
环境配置
卸载驱动:
/usr/local/Ascend/driver/script/uninstall.sh卸载固件:
/usr/local/Ascend/firmware/script/uninstall.sh卸载CANN
- 必须先卸载 ops:
- 再来卸载Toolkit包:
升级CANN-toolkit
- 如果需要同时升级固件和驱动,则必须按照此顺序升级:固件》驱动》CANN》
- 无论是升级或安装CANN,都需要执行升级或安装的用户对安装目录有所有者权限,否则会安装或升级失败
- Ascend-hdk-<chip_type>-npu-firmware_.run --upgrade
- Ascend-hdk-<chip_type>-npu-driver__linux-.run --upgrade
- `./Ascend-cann-toolkit_8.1.RC1_linux-aarch64.run --upgrade --install-for-all --chip=Ascend310B
基础命令
查询命令:
npu-smi info查询系统占用:
npu-smi info watch查询产品型号:
npu-smi info -t product -i 0查询卡的信息:
npu-smi info -t board -i 2查询卡的某个芯片信息:
npu-smi info -t board -i 2 -c 0查看所有加速卡列表:
npu-smi info -l查看支持的功能列表:
npu-smi set -h查询硬件信息:
lshw查询硬件信息:
ascend-smi info 或 ascend-smi status使用lspci工具查询设备信息:lspci | grep Device
然后根据查询到的PCI设备ID的确定具体产品型号
NPU架构
- DMA搬入单元将数据从Global Memory搬运到Local Memory,
- Vector/Cube计算单元完成数据计算,并把计算结果写回Local Memory,
- DMA搬出单元把处理好的数据从Local Memory搬运回Global Memory。
- Ascend C算子编程是**SPMD(Single-Program Multiple-Data)**编程
- 将需要处理的数据拆分多片并同时在多个计算核心运行,每个核用 block_idx 来标识
- 当核函数被调用时,多个核都执行相同的核函数代码,具有相同的函数入参,并行执行
- 区别C++函数执行时只调用一次
- 核函数中运行的是算子类
在Docker容器中使用NPU设备
- 在容器中使用NPU设备必须将主机
/dev目录下对应的设备节点挂载到容器中,有多少个加速卡就要挂载多少个类似/dev/davinci0节点。 - 容器创建成功后,需在容器中设置对应的环境变量:
source /usr/local/Ascend/ascend-toolkit/set_env.sh。 - 驱动程序必须安装在宿主机(Host OS)。
dockerrun-itd\--net=host\--hostname=docker-jack\--shm-size=100g\--privileged=true\--cap-add=SYS_NICE\--name=jack_da500i_run_env\--device=/dev/davinci0\--device=/dev/davinci_manager\--device=/dev/devmm_svm\--device=/dev/hisi_hdc\-v/usr/local/Ascend/driver:/usr/local/Ascend/driver:ro\-v/usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons\-v/usr/local/Ascend/driver:/usr/local/Ascend/driver:ro\-v/usr/local/dcmi:/usr/local/dcmi\-v/usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi\-v/etc/ascend_install.info:/etc/ascend_install.info\-v/workspace/da500i_test/jack:/workspace\-p59666:22\mec_build_env:da500i_ubuntu22.04.3Ascend-SDK 的使用
- 昇腾AI处理器的版本:进入“CANN软件安装目录/compiler/data/platform_config”目录,".ini"文件的文件名即为昇腾AI处理器的版本
- Ascend C核函数是在一个核上的处理函数,所以只处理部分数据
- Host 侧使用的是 AscendCL API;NPU侧使用的是 AscendC类库
- 设置落盘文件的保存路径:
exportASCEND_CACHE_PATH=/repo/task001/cacheexportASCEND_WORK_PATH=/repo/task001/172.16.1.12_01_03 - 接口的分类
接口 说明 acl系统配置类接口 aclrt运行时管理类的接口 aclop单算子模型执行类的接口 aclblasBLAS 类接口 aclmdl模型推理类的接口 acldvpp/aclvdec/aclvenc媒体数据处理 V1 版本的接口 hi_mpi媒体数据处理 V2 版本的接口 aclprofProfiling 配置类接口 acltdt数据传输接口 aclfv特征向量检索接口
视频编解码、图片编解码、图像处理
- 昇腾的这个解码器没有数据就会告警,所以得调用 aclrtProcessReport() 报告状态
模型操作
编译模型
昇腾张量编译器(Ascend Tensor Compiler,简称ATC)是异构计算架构CANN体系下的模型转换工具,它可以将开源框架的网络模型以及Ascend IR定义的单算子描述文件(JSON格式)转换为AI处理器支持的.om格式离线模型。
- 执行模型转换前,要在当前终端执行:
source /usr/local/Ascend/ascend-toolkit/set_env.sh
atc--model