- 昇腾推理基础镜像,基于ubuntu22.04制作,内部集成推理通用的第三方库(系统包、pip)和TOOLKIT推理引擎。
- 主要用途:模拟昇腾cpu运行环境。当我们执行atc命令转换模型结构时,因为开发板上面的cpu性能较差,我们可以在性能较好的x86_64 CPU上的Linux系统上面使用docker镜像来执行该操作,然后将转换后的模型再放到昇腾设备上进行推理,这样可以节省模型转换需要的等待时间。
- 参考了官方的docker构建项目:gitee地址。
- 该项目主要是之前做通义千问大模型推理时,使用动态shape转换模型onnx模型到om模型时,需要非常长的模型转换时间,于是想到了这个方法来改善。相关帖子可见:基于香橙派AI PRO适配通义千问大模型过程分享。
- 根据你要模拟的昇腾芯片,修改build.sh中的
soc_version(该参数决定昇腾芯片型号)和cann_version(该参数决定CANN开发工具的版本)。目前参数默认值如下所示:
| soc_version | cann_version |
|---|---|
| 310b (可选值:310b, 310p, 910, 910b) | 8.0.RC2 |
-
该容器编译后的.om模型最终还是需要在昇腾设备上面运行,所以请确保昇腾设备上面安装的CANN版本和该容器的CANN版本一致,这点非常重要。
-
根据你上面定的参数值,去官方下载对应的文件。下载地址,以容器即将运行的平台x86_64为例,我们需要下载下面3个文件,并存放在data目录中。
Ascend-cann-toolkit_8.0.RC2_linux-x86_64.run
Ascend-cann-nnae_8.0.RC2_linux-x86_64.run
Ascend-cann-kernels-310b_8.0.RC2_linux.run- 运行下面的命令,检查一下三个文件是否完整。提示
SHA256 checksums are OK. All good.则说明没啥问题。
# 进入目录
cd data
# 授予可执行权限
chmod +x ./Ascend-cann-toolkit_8.0.RC2_linux-x86_64.run
chmod +x ./Ascend-cann-nnae_8.0.RC2_linux-x86_64.run
chmod +x ./Ascend-cann-kernels-310b_8.0.RC2_linux.run
# 分别检查
./Ascend-cann-toolkit_8.0.RC2_linux-x86_64.run --check
./Ascend-cann-nnae_8.0.RC2_linux-x86_64.run --check
./Ascend-cann-kernels-310b_8.0.RC2_linux.run --check
# 返回上层目录
cd ..- 运行build.sh,开始编译docker镜像。编译成功后,可以得到一个docker镜像:
ascend-310b:8.0.RC2-x86_64。 - 运行docker镜像,可以使用下面的命令来简单测试一下。
docker run -it --name ascend ascend-310b:8.0.RC2-x86_64 /bin/bash- 在容器内,输入下面的命令简单测试一下atc命令,没报错说明则说明是正常的。
atc --help- 测试onnx转om。可以拿官方的demo来测试一下atc转onnx为om的能力。项目地址,提示
ATC run success, welcome to the next use.则说明转换成功。
# 下载模型
curl https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/resnet50/resnet50.onnx -o resnet50.onnx
# 转onnx为om,目标设备为310B1(根据你的设备选择,我是310B1,可以通过npu-smi info查看)
atc --model=resnet50.onnx --framework=5 --output=resnet50 --input_shape="actual_input_1:1,3,224,224" --soc_version=Ascend310B1
# 另开一个终端,将模型从容器拷贝到本机
docker cp ascend:/home/AscendWork/resnet50.om .- 测试om能否正常推理。我们可以将转换后的
resnet50.om文件拷贝到310b上面设备上执行,测试一下是不是能用,并且精度在预期范围内。git clone https://gitee.com/ascend/samples.git cd samples/inference/modelInference/sampleResnetQuickStart/cpp # 将你的om模型拷贝到model路径,路径自定义 mv path/resnet50.om model/ # 安装opencv开发包 sudo apt install libopencv-dev -y # 软链接一下头文件路径 sudo ln -s /usr/include/opencv4/opencv2 /usr/include/opencv2 # 编译项目 ./scripts/sample_build.sh # 下载狗狗图片到data目录 curl https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/aclsample/dog1_1024_683.jpg -o ./data/dog1_1024_683.jpg # 运行项目 ./scripts/sample_run.sh # 输出结果如下,无报错,且输出的分类置信度为0.902209,和demo输出的结果一样,说明精度损失忽略不计,测试通过。 # [INFO] The sample starts to run # out_dog1_1024_683.jpg # label:162 conf:0.902209 class:beagle # [INFO] The program runs successfully