恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
AI Core还是AI CPU?CANN ops-math仓库AI CPU算子开发完全实践指南
首页
资讯中心
/
AI Core还是AI CPU?CANN ops-math仓库AI CPU算子开发完全实践指南
AI Core还是AI CPU?CANN ops-math仓库AI CPU算子开发完全实践指南
发布时间:2026/9/17 18:35:11
AI Core还是AI CPUCANN ops-math仓库AI CPU算子开发完全实践指南【免费下载链接】ops-math本项目是CANN提供的数学类基础计算算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-math你是否在为CANN ops-math仓库贡献算子时纠结我的算子该跑在 AI Core 还是 AI CPU 上别担心本文就用最通俗的方式带你走通AI CPU 算子开发全流程——从创建工程到编译部署一个完整可跑通的实战指南新手也能照着做。一分钟搞懂AI Core 和 AI CPU 有什么区别在 CANN 架构中NPU 内部有多种硬件单元算子按运行位置分为两类对比项AI Core 算子AI CPU 算子编程语言Ascend C标准 C运行单元AI Core 硬件单元AI CPU 硬件单元开发难度需掌握 Tiling、Ascend C 等概念更低普通 C 即可上手适用场景大规模并行数值计算主流少量不适合 AI Core 实现的控制类/复杂逻辑算子选型建议绝大多数数学计算类算子加、乘、卷积等都应优先使用AI Core只有当计算逻辑难以用 AI Core 表达如复杂分支、依赖 CPU 库时才考虑AI CPU。对应的开发文档分别是AI Core 开发指南aicore_develop_guide.mdAI CPU 开发指南aicpu_develop_guide.mdAI CPU 算子开发全流程5 步走通以仓库自带的AddExampleAicpu加法算子为例AI CPU 算子开发的标准流程为工程创建 → 算子定义 → Kernel实现 → 编译部署 → 算子验证完整样例代码位于 examples/add_example_aicpu/ 目录强烈建议边看文档边翻样例。第 1 步一键创建算子工程目录进入项目根目录执行以下命令即可自动生成标准算子目录骨架# ${op_class} 为算子类型如 math${op_name} 为算子小写下划线名 bash build.sh --genop_aicpu${op_class}/${op_name}创建成功后目录结构一目了然与 AI Core 相比明显更精简没有 Tiling 相关目录${op_name} ├── examples # 算子调用示例aclnn / 图模式 ├── op_host # Host 侧实现InferShape 形状推导 ├── op_kernel_aicpu # Device 侧 Kernel 实现AI CPU 核心代码 │ ├── ${op_name}_aicpu.cpp # Kernel 入口 Compute 实现 │ ├── ${op_name}_aicpu.h # 算子类声明 │ └── ${op_name}.json # 算子信息库 └── CMakeLists.txt第 2 步算子定义README json算子定义需要交付两个文件README.md写清算子功能、计算公式、参数与约束。可参考 add_example_aicpu/README.md其中定义了y x1 x2的加法语义与参数表。${op_name}.json算子信息库声明输入输出名称、支持的数据类型、运行的 engine 等。例如 add_example.json 中就指定了engine:DNN_VM_AICPU——这就是标识该算子跑在 AI CPU 上的关键配置。第 3 步实现 Kernel核心代码只有 3 件事AI CPU 算子的 Kernel 实现非常直接共 3 步全部写在op_kernel_aicpu/目录① 声明算子类继承CpuKernel基类重写Compute函数。参考 add_example_aicpu_aicpu.hnamespace aicpu { class AddExampleCpuKernel : public CpuKernel { public: ~AddExampleCpuKernel() default; uint32_t Compute(CpuKernelContext ctx) override; }; } // namespace aicpu② 实现 Compute 函数从上下文获取输入输出 Tensor → 合法性校验 → 按数据类型分发执行计算。核心逻辑就是一个普通的 for 循环加法见 add_example_aicpu_aicpu.cppuint32_t AddExampleCpuKernel::Compute(CpuKernelContext ctx) { Tensor* input0 ctx.Input(0); Tensor* input1 ctx.Input(1); Tensor* output ctx.Output(0); // 空指针与空数据校验后按 DT_FLOAT / DT_INT32 分发 // 最终执行y[i] x0[i] x1[i] }③ 注册算子一行宏完成注册让框架能找到你的 Compute 函数REGISTER_CPU_KERNEL(kAddExample, AddExampleCpuKernel); 除了 Kernel还需要在 Host 侧实现InferShape运行时推导输出 shape样例见 add_example_infershape.cpp逻辑是把输入 shape 原样拷贝给输出。另外注意AI CPU 算子不支持自动生成 aclnn 接口需要参考 math/cross/op_api/ 相关路径手工补齐 aclnn 适配代码。第 4 步编译部署生成 .run 安装包交付件齐备后一条命令编译出自定义算子安装包# --soc 指定 NPU 型号如 ascend910bAtlas A2/ ascend910_93Atlas A3 bash build.sh --pkg --soc${soc_version} --ops${op_name} -j16出现如下提示即编译成功Self-extractable archive cann-ops-math-${vendor_name}_linux-${arch}.run successfully created.执行生成的.run文件即可安装算子会落到${ASCEND_HOME_PATH}/opp/vendors目录下如需卸载运行opp/vendors/custom_math/scripts/uninstall.sh脚本。第 5 步算子验证UT aclnn 调用部署完成后先配置环境变量再做两级验证export LD_LIBRARY_PATH${ASCEND_HOME_PATH}/opp/vendors/${vendor_name}_math/op_api/lib:${LD_LIBRARY_PATH} export ASCEND_CUSTOM_OPP_PATH${ASCEND_HOME_PATH}/opp/vendors/${vendor_name}_mathUT 验证通过 Kernel 单元测试快速检查计算正确性样例见 test_add_example_aicpu.cppaclnn 调用验证在应用中通过 aclnn 接口端到端调用算子样例见 test_aclnn_add_example.cpp如需入图运行还有图模式样例 test_geir_add_example.cppAI Core 开发有什么不同快速对比如果你最终选择 AI Core 路线流程会更长一步多出Tiling 实现和图模式适配两个环节工程创建 → 算子定义 → Tiling实现 → Kernel实现 → 图模式适配 → aclnn适配 → 编译部署 → 算子验证对应命令是bash build.sh --genop${op_class}/${op_name}注意没有_aicpu后缀完整指引请参考 AI Core 算子开发指南。常见问题 FAQQ1什么时候必须用 AI CPUA当算子逻辑复杂大量分支、动态控制流、依赖难以移植到 AI Core 的算法、或需要 CPU 侧第三方库如 Eigen 支持半精度时。仓库中 identity、case_condition 等控制流类算子就是典型 AI CPU 实现。Q2AI CPU 算子性能如何AAI CPU 适合逻辑复杂但数据量不大的算子对大规模数值计算AI Core 的并行吞吐远高于 AI CPU务必优先评估 AI Core 方案。Q3开发前需要准备什么环境A先完成 CANN 环境准备与源码下载参考项目 README.md并具备 C 基础。编译部署的细节可查阅 编译安装文档。总结一张表带走步骤关键动作参考文件工程创建build.sh --genop_aicpu生成目录build_genop.sh算子定义README json 信息库add_example.jsonKernel 实现CpuKernel 派生 Compute 注册add_example_aicpu_aicpu.cpp编译部署build.sh --pkg生成 .run 包build_lib.sh算子验证UT aclnn 调用tests/utAI CPU 算子开发看似玄乎拆开来就是写 C → 注册 → 编译 → 验证四件套。现在就打开 examples/add_example_aicpu/ 目录照着样例动手写下你的第一个 CANN 算子吧【免费下载链接】ops-math本项目是CANN提供的数学类基础计算算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-math创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考