第一次接触 CANN 开发时,我花了一整天配环境——装驱动、装 Toolkit、装第三方依赖、配环境变量。后来发现 asc-devkit 可以省掉大半时间。

asc-devkit 是 CANN 社区维护的开发环境工具包。它提供了一套 Docker 镜像和初始化脚本,包含编译 C++ 推理代码需要的全部工具链和 CANN 头文件。


asc-devkit 是什么

asc-devkit 不是一个单独的软件包,它是一个"开发环境定义"——通过 Dockerfile 和 shell 脚本告诉你:在昇腾开发需要装哪些东西、怎么装、装完后怎么验证。

它解决了三个问题:

  1. 环境一致性——团队所有人用同一个 Docker 镜像,不会因为 Ubuntu 版本或 GCC 版本不同导致编译错误
  2. 开箱即用——镜像预装了 CANN Toolkit、cmake、g++、Python、ONNX 工具链
  3. 快速迭代——只需要拉一次镜像,后续更新 CANN Toolkit 版本也只需要换镜像 tag

快速搭建开发环境

第一步:拉取镜像

docker pull cann/asc-devkit:8.0

第二步:启动容器(挂载代码目录和 NPU 设备)

docker run -it --rm \
    --name ascend_dev \
    --device=/dev/davinci0 \
    --device=/dev/davinci_manager \
    --device=/dev/hisi_hdc \
    -v /usr/local/Ascend:/usr/local/Ascend:ro \
    -v /path/to/your/project:/workspace \
    cann/asc-devkit:8.0

设备映射说明:

  • /dev/davinci0:NPU 设备节点(多卡时映射 davinci0-davinci7)
  • /dev/davinci_manager:NPU 管理设备
  • /dev/hisi_hdc:调试通道

第三步:验证环境

# 检查 CANN 版本
cat /usr/local/Ascend/ascend-toolkit/latest/version.cfg

# 检查 NPU 状态
npu-smi info

# 编译一个简单的推理程序
cd /workspace
cmake -B build
cmake --build build

全部完成后,开发环境就绪。从拉取镜像到编译通过,通常 10-15 分钟。


编译工具链

asc-devkit 镜像预装了完整的编译工具链:

  • CANN 头文件和动态库/usr/local/Ascend/ascend-toolkit/latest/include/usr/local/Ascend/ascend-toolkit/latest/lib64
  • CMake:预配置了 FindACL.cmake,自动找到 AscendCL 的头文件和库路径
  • GCC 9.3:跟 CANN Toolkit 测试用的编译器版本一致

CMake 项目的典型 CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(infer_demo)

# asc-devkit 预配置了 FindACL
find_package(ACL REQUIRED)

add_executable(infer_main src/main.cpp)
target_link_libraries(infer_main ${ACL_LIBRARIES})

不需要手写头文件路径和库路径。


推理项目如何初始化

asc-devkit 镜像目录下有一个初始化脚本,帮你搭建推理项目骨架:

# 初始化一个基础的推理项目
python /opt/asc-devkit/init_project.py --name my_infer

生成的目录结构:

my_infer/
├── CMakeLists.txt       # 预配置了 ACL 依赖
├── src/
│   ├── main.cpp         # 推理入口
│   └── model.cpp        # 模型加载和推理
├── include/
│   └── model.h
├── model/               # 放 OM 模型文件
├── data/                # 放输入数据
└── build/               # 编译输出

初始化后直接 cmake -B build && cmake --build build,编译出可执行文件,放入 OM 模型和数据后就能跑推理。


常见踩坑

问题 1:Docker 内找不到 NPU 设备。

检查宿主机的 npu-smi info 是否正常工作。如果宿主机能看到 NPU 但 Docker 内看不到,检查 --device 映射是否正确——需要映射 /dev/davinci_manager/dev/davinci0(或多卡时全部 davinci 设备)。

问题 2:运行时找不到 libascendcl.so

确认环境变量 LD_LIBRARY_PATH 是否包含 /usr/local/Ascend/ascend-toolkit/latest/lib64。asc-devkit 的 Dockerfile 已经把它加进了 .bashrc,但如果用户切换了 shell 或手动覆盖了 LD_LIBRARY_PATH,需要重新 source。

export LD_LIBRARY_PATH=/usr/local/Ascend/ascend-toolkit/latest/lib64:$LD_LIBRARY_PATH

问题 3:镜像内 GCC 版本跟项目不兼容。

asc-devkit 默认 GCC 9.3。如果项目用了 C++17 甚至 C++20 的特性,先确认 GCC 9.3 是否支持。如果需要更高版本 GCC,在 Dockerfile 基础上安装:

FROM cann/asc-devkit:8.0
RUN apt-get update && apt-get install -y g++-11

问题 4:npu-smi info 报错驱动版本不匹配。

asc-devkit 镜像中的 CANN Toolkit 版本需要跟宿主机上的 NPU 驱动版本匹配。检查驱动版本:

npu-smi info  # 查看 Driver Version

如果版本不匹配,拉取对应版本的 asc-devkit 镜像。


怎么选 asc-devkit 版本

用途 推荐镜像 tag CANN 版本
推理部署 cann/asc-devkit:8.0 8.0
算子开发 cann/asc-devkit:8.0-dev 8.0 + Ascend C SDK
训练开发 cann/asc-devkit:8.0-train 8.0 + torch_npu
最新开发版 cann/asc-devkit:nightly 持续集成最新版

推理部署用 :8.0。需要写 Ascend C 算子时用 :8.0-dev。需要 PyTorch 训练时用 :8.0-train

asc-devkit 仓库

Ascend C 算子开发指南


asc-devkit 的其他实用功能

asc-devkit 镜像还内置了一些开发辅助工具:

  • profilermsprof 工具,采集算子的执行时间、DDR 访问量和 NPU 利用率
  • dump 工具gdb + CANN 的 DUMP 工具,定位推理结果异常的算子是哪个
  • ATC 缓存:镜像缓存了常见模型的 ATC 转换中间文件,第一次转换后二次加载不用重新编译

开发流程建议:在 asc-devkit 容器内调试代码和做性能分析,确认无误后把编译好的可执行文件和 OM 模型部署到生产环境。生产环境不一定需要 asc-devkit——只要 CANN Runtime 和动态库就够了。


在 asc-devkit 上做一步编译验证

asc-devkit 镜像内置了一个快速验证脚本:

# 编译并运行一个简单的版本校验程序
/opt/asc-devkit/verify.sh

# 输出示例:
# CANN Toolkit: 8.0.0.alpha001
# NPU Driver: 23.0.rc1
# Compiler: g++ 9.3.0
# ACL library: found
# NPU device: available (0)
# Verification: PASSED

验证通过说明开发环境配置正确。如果验证失败,脚本会输出缺失的组件和修复建议——省掉手动排查环境问题的时间。

总结

asc-devkit 是接触昇腾开发的推荐起点。拉一个镜像、挂载项目目录、启动容器——开发环境就绪了。不需要手工装驱动、配环境变量、解决 GCC 版本冲突。当开发环境出问题时,删掉容器重建一个就恢复如初——这在排查"我本地能编但服务器编不过"这类问题时极其实用。

总结

asc-devkit 降低了昇腾开发的入门门槛。一个 Docker 镜像就能获得完整的开发环境——CANN Toolkit、编译工具链、项目模板、调试工具一应俱全。新团队成员加入时只需要 docker pull + docker run 两步就能开始开发,不再需要花半天时间手工配环境。

参考仓库

asc-devkit 开发工具包
CANN Skills 技能库

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐