news 2026/5/23 5:03:43

昇腾CANN asc-devkit:开发者工具包的核心能力和工程化实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
昇腾CANN asc-devkit:开发者工具包的核心能力和工程化实践

asc-devkit 是 CANN 开发者工具包的入口——它是一个命令行工具,也是一套 IDE 插件,还打包了所有开发所需的脚本和模板。定位类似于 NVIDIA 的 nsys(性能分析)+ nvcc(编译器封装)+ 项目脚手架工具,合在一起的统一入口。

三个核心子工具

asc-devkit/ ├── asc-cli # 命令行工具:项目创建/编译/运行/调试 ├── asc-vscode # VSCode 插件:语法高亮/调试面板/性能分析 └── asc-templates # 项目模板:kernel/ACL推理/算子测试/性能分析

asc-cli:一条命令创建项目

不用手动创建 CMakeLists.txt、配置环境变量、设置编译参数。asc-cli 一条命令搞定。

# 创建算子开发项目asc create--type=kernel--name=my_first_kernelcdmy_first_kernel tree# my_first_kernel/# ├── kernel/# │ └── my_kernel.cpp # 算子代码模板# ├── host/# │ └── main.cpp # host 端入口# ├── test/# │ └── test_my_kernel.cpp # 单元测试模板# ├── CMakeLists.txt # CMake 配置(自动填充)# └── ascend.json # 项目元数据# 编译asc build--target=my_first_kernel# 背后等价于:# cmake . -DCMAKE_TOOLCHAIN_FILE=/path/to/ascend.cmake# make -j# 运行asc run my_first_kernel1024# 背后等价于:# ./build/my_first_kernel 1024

三种项目模板覆盖主流场景:

模板类型生成内容适用场景
kernelkernel.cpp + host/main.cpp + CMakeLists.txt开发新算子
inference模型加载 + ACL 推理 + 前后处理模型推理部署
test算子单元测试框架 + 覆盖率配置算子测试

VSCode 插件的调试面板

asc-vscode 最核心的功能是 NPU 远程调试面板——在 VSCode 里设置断点,可以停在 NPU 上的 kernel 代码里。

// .vscode/launch.json(asc create 自动生成){"version":"0.2.0","configurations":[{"name":"Ascend Kernel Debug","type":"ascend","request":"launch","program":"${workspaceFolder}/build/my_first_kernel","args":["1024"],"device":0,"kernel":"my_kernel","breakpoints":{"host":["main.cpp:42"],"kernel":["my_kernel.cpp:15","my_kernel.cpp:28"]},"env":{"ASCEND_DEVICE_ID":"0","ASCEND_LOG_LEVEL":"DEBUG"}}]}

调试面板提供三个视图:

┌─────────────────────────────────────────────┐ │ NPU Debugger Panel │ ├─────────────────────────────────────────────┤ │ 🔍 Kernel State │ │ Name: my_kernel │ │ Status: RUNNING │ │ AI Core: 0 │ │ │ │ 📊 L1 Cache(实时) │ │ local_a: [0x7f00_0000] size=4096B │ │ local_b: [0x7f00_1000] size=4096B │ │ │ │ 🎯 Vector Pipeline │ │ Stage 1 [===================================================================================] 100%│ │ Stage 2 [=========================================================== ] 65% │ │ │ │ 🧠 Variables(断点处快照) │ │ local_a[0..3] = [1.0, 2.0, 3.0, 5.0] │ │ local_b[0..3] = [0.5, 1.0, 1.5, 2.5] │ └─────────────────────────────────────────────┘

调试面板能把 L1 缓存里的数据直接读出来展示——这是传统 CPU 调试器做不到的。

踩坑一:asc build 的 CMake 缓存污染

asc build 会在项目目录创建build/目录并缓存 CMake 变量。如果用 asc build 构建了一次 Release 版本,然后又手动cmake -DCMAKE_BUILD_TYPE=Debug切换模式——CMake 缓存里的旧变量会覆盖新参数,实际编译的还是 Release。

错误操作序列

asc build# 第一次:默认 Release,CMake 缓存写了 CMAKE_BUILD_TYPE=Release# 想切 Debug:手动改 CMake 参数cmake-DCMAKE_BUILD_TYPE=Debug build/make-j# 问题:CMakeCache.txt 里 CMAKE_BUILD_TYPE 已经是 Release# cmake 不会覆盖已存在的 cache 变量# 实际编译出来仍然是 Release(断言全被编译器删掉)

正确做法:用asc build --rebuild清缓存后重新构建。

asc build--rebuild--build-type=Debug# asc build --rebuild 会先删掉 build/ 目录再重建 CMake 配置

踩坑二:远程调试的 kernel 断点有效条件

NPU 上的断点不是在所有 kernel 上都有效。断点依赖编译时插入的调试符号——而 Release 模式下编译器删掉了符号信息。

断点有效条件

条件有效无效
编译模式-DCMAKE_BUILD_TYPE=DebugRelease/RelWithDebInfo
kernel 代码在 L1 里有变量名字段编译器优化掉变量名
多核并行单核 kernel多核(断点触发顺序不可控)
Pipeline 阶段计算阶段(COMPUTE)SDMA 搬运阶段(异步 DMA)

最常见的问题是:Release 模式编译的 kernel 设置断点后 VSCode 显示no debug info——需要--rebuild --build-type=Debug重新构建。

踩坑三:asc-templates 的模板路径硬编码

asc createasc-templates目录读取模板。如果把 asc-devkit 整体移动了位置,asc create 找不到模板路径。

错误现象

asc create--type=kernel--name=my_kernel# Error: Cannot find template 'kernel' in /opt/asc-devkit/asc-templates/# 但 asc-devkit 安装在 /usr/local/asc-devkit/

模板路径硬编码在编译时的INSTALL_PREFIX里。安装到/usr/local/后,asc create 仍然去/opt/asc-devkit/找模板。

修复方法:设置环境变量。

exportASC_TEMPLATE_PATH=/usr/local/asc-devkit/asc-templates asc create--type=kernel--name=my_kernel# 现在从 /usr/local/ 读取模板

或者改~/.asc-config.json

{"template_path":"/usr/local/asc-devkit/asc-templates","cache_dir":"~/.cache/asc-devkit","default_build_type":"Release","default_device":0}

asc-devkit 把一个 NPU 开发者从零到第一个编译运行通过的 kernel 的时间,从 1-2 天压缩到了不到 30 分钟。但它的价值不是为了省时间——是消除了「环境变量设对了没有」「CMake 版本兼容了没有」「头文件路径引对了没有」这类跟算子开发无关的心智负担。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 5:02:46

NISQ时代量子化学计算的变分算法优化实践

1. 量子化学计算的NISQ时代挑战量子计算在化学模拟领域展现出革命性潜力,但当前NISQ(含噪声中等规模量子)设备的局限性使得传统量子算法难以实用化。作为在德国弗劳恩霍夫研究所从事量子计算研究的团队,我们在实际工作中深刻体会到…

作者头像 李华
网站建设 2026/5/23 5:01:37

React状态管理权威评测:ReactStateMuseum中的10大热门方案

React状态管理权威评测:ReactStateMuseum中的10大热门方案 【免费下载链接】ReactStateMuseum A whirlwind tour of React state management systems by example 项目地址: https://gitcode.com/gh_mirrors/re/ReactStateMuseum ReactStateMuseum是一个全面的…

作者头像 李华
网站建设 2026/5/23 4:55:59

如何用Balena Etcher安全制作启动盘?终极三步法告别烧录烦恼

如何用Balena Etcher安全制作启动盘?终极三步法告别烧录烦恼 【免费下载链接】etcher Flash OS images to SD cards & USB drives, safely and easily. 项目地址: https://gitcode.com/GitHub_Trending/et/etcher 还在为制作系统启动盘而烦恼吗&#xff…

作者头像 李华
网站建设 2026/5/23 4:55:04

MQTTClient技术深度解析:嵌入式物联网通信的高性能解决方案

MQTTClient技术深度解析:嵌入式物联网通信的高性能解决方案 【免费下载链接】mqttclient A high-performance, high-stability, cross-platform MQTT client, developed based on the socket API, can be used on embedded devices (FreeRTOS / LiteOS / RT-Thread …

作者头像 李华
网站建设 2026/5/23 4:53:15

RefineDet检测结果可视化:使用refinedet_demo.py轻松实现目标标注

RefineDet检测结果可视化:使用refinedet_demo.py轻松实现目标标注 【免费下载链接】RefineDet Single-Shot Refinement Neural Network for Object Detection, CVPR, 2018 项目地址: https://gitcode.com/gh_mirrors/re/RefineDet RefineDet是一种高效的单阶…

作者头像 李华
网站建设 2026/5/23 4:42:47

DECO项目架构解析:从源码理解装饰器并发模型的设计哲学

DECO项目架构解析:从源码理解装饰器并发模型的设计哲学 【免费下载链接】deco 项目地址: https://gitcode.com/gh_mirrors/de/deco DECO(Decorated Concurrency)是一个革命性的Python并行计算框架,它通过装饰器实现了简洁…

作者头像 李华