第一次接触 CANN 开发时我花了一整天配环境——装驱动、装 Toolkit、装第三方依赖、配环境变量。后来发现 asc-devkit 可以省掉大半时间。asc-devkit 是 CANN 社区维护的开发环境工具包。它提供了一套 Docker 镜像和初始化脚本包含编译 C 推理代码需要的全部工具链和 CANN 头文件。asc-devkit 是什么asc-devkit 不是一个单独的软件包它是一个开发环境定义——通过 Dockerfile 和 shell 脚本告诉你在昇腾开发需要装哪些东西、怎么装、装完后怎么验证。它解决了三个问题环境一致性——团队所有人用同一个 Docker 镜像不会因为 Ubuntu 版本或 GCC 版本不同导致编译错误开箱即用——镜像预装了 CANN Toolkit、cmake、g、Python、ONNX 工具链快速迭代——只需要拉一次镜像后续更新 CANN Toolkit 版本也只需要换镜像 tag快速搭建开发环境第一步拉取镜像dockerpull cann/asc-devkit:8.0第二步启动容器挂载代码目录和 NPU 设备dockerrun-it--rm\--nameascend_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/davinci0NPU 设备节点多卡时映射 davinci0-davinci7/dev/davinci_managerNPU 管理设备/dev/hisi_hdc调试通道第三步验证环境# 检查 CANN 版本cat/usr/local/Ascend/ascend-toolkit/latest/version.cfg# 检查 NPU 状态npu-smi info# 编译一个简单的推理程序cd/workspace cmake-Bbuild cmake--buildbuild全部完成后开发环境就绪。从拉取镜像到编译通过通常 10-15 分钟。编译工具链asc-devkit 镜像预装了完整的编译工具链CANN 头文件和动态库/usr/local/Ascend/ascend-toolkit/latest/include和/usr/local/Ascend/ascend-toolkit/latest/lib64CMake预配置了FindACL.cmake自动找到 AscendCL 的头文件和库路径GCC 9.3跟 CANN Toolkit 测试用的编译器版本一致CMake 项目的典型CMakeLists.txtcmake_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--namemy_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 模型和数据后就能跑推理。常见踩坑问题 1Docker 内找不到 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。exportLD_LIBRARY_PATH/usr/local/Ascend/ascend-toolkit/latest/lib64:$LD_LIBRARY_PATH问题 3镜像内 GCC 版本跟项目不兼容。asc-devkit 默认 GCC 9.3。如果项目用了 C17 甚至 C20 的特性先确认 GCC 9.3 是否支持。如果需要更高版本 GCC在 Dockerfile 基础上安装FROM cann/asc-devkit:8.0 RUN apt-get update apt-get install -y g-11问题 4npu-smi info报错驱动版本不匹配。asc-devkit 镜像中的 CANN Toolkit 版本需要跟宿主机上的 NPU 驱动版本匹配。检查驱动版本npu-smi info# 查看 Driver Version如果版本不匹配拉取对应版本的 asc-devkit 镜像。怎么选 asc-devkit 版本用途推荐镜像 tagCANN 版本推理部署cann/asc-devkit:8.08.0算子开发cann/asc-devkit:8.0-dev8.0 Ascend C SDK训练开发cann/asc-devkit:8.0-train8.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 pulldocker run两步就能开始开发不再需要花半天时间手工配环境。参考仓库asc-devkit 开发工具包CANN Skills 技能库
用 asc-devkit 搭建昇腾开发环境
发布时间:2026/5/21 19:46:49
第一次接触 CANN 开发时我花了一整天配环境——装驱动、装 Toolkit、装第三方依赖、配环境变量。后来发现 asc-devkit 可以省掉大半时间。asc-devkit 是 CANN 社区维护的开发环境工具包。它提供了一套 Docker 镜像和初始化脚本包含编译 C 推理代码需要的全部工具链和 CANN 头文件。asc-devkit 是什么asc-devkit 不是一个单独的软件包它是一个开发环境定义——通过 Dockerfile 和 shell 脚本告诉你在昇腾开发需要装哪些东西、怎么装、装完后怎么验证。它解决了三个问题环境一致性——团队所有人用同一个 Docker 镜像不会因为 Ubuntu 版本或 GCC 版本不同导致编译错误开箱即用——镜像预装了 CANN Toolkit、cmake、g、Python、ONNX 工具链快速迭代——只需要拉一次镜像后续更新 CANN Toolkit 版本也只需要换镜像 tag快速搭建开发环境第一步拉取镜像dockerpull cann/asc-devkit:8.0第二步启动容器挂载代码目录和 NPU 设备dockerrun-it--rm\--nameascend_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/davinci0NPU 设备节点多卡时映射 davinci0-davinci7/dev/davinci_managerNPU 管理设备/dev/hisi_hdc调试通道第三步验证环境# 检查 CANN 版本cat/usr/local/Ascend/ascend-toolkit/latest/version.cfg# 检查 NPU 状态npu-smi info# 编译一个简单的推理程序cd/workspace cmake-Bbuild cmake--buildbuild全部完成后开发环境就绪。从拉取镜像到编译通过通常 10-15 分钟。编译工具链asc-devkit 镜像预装了完整的编译工具链CANN 头文件和动态库/usr/local/Ascend/ascend-toolkit/latest/include和/usr/local/Ascend/ascend-toolkit/latest/lib64CMake预配置了FindACL.cmake自动找到 AscendCL 的头文件和库路径GCC 9.3跟 CANN Toolkit 测试用的编译器版本一致CMake 项目的典型CMakeLists.txtcmake_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--namemy_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 模型和数据后就能跑推理。常见踩坑问题 1Docker 内找不到 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。exportLD_LIBRARY_PATH/usr/local/Ascend/ascend-toolkit/latest/lib64:$LD_LIBRARY_PATH问题 3镜像内 GCC 版本跟项目不兼容。asc-devkit 默认 GCC 9.3。如果项目用了 C17 甚至 C20 的特性先确认 GCC 9.3 是否支持。如果需要更高版本 GCC在 Dockerfile 基础上安装FROM cann/asc-devkit:8.0 RUN apt-get update apt-get install -y g-11问题 4npu-smi info报错驱动版本不匹配。asc-devkit 镜像中的 CANN Toolkit 版本需要跟宿主机上的 NPU 驱动版本匹配。检查驱动版本npu-smi info# 查看 Driver Version如果版本不匹配拉取对应版本的 asc-devkit 镜像。怎么选 asc-devkit 版本用途推荐镜像 tagCANN 版本推理部署cann/asc-devkit:8.08.0算子开发cann/asc-devkit:8.0-dev8.0 Ascend C SDK训练开发cann/asc-devkit:8.0-train8.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 pulldocker run两步就能开始开发不再需要花半天时间手工配环境。参考仓库asc-devkit 开发工具包CANN Skills 技能库