公司动态
昇腾上调用大模型算子的3种方式:ops-transformer aclnn、PyTorch与图模式调用指南
昇腾上调用大模型算子的3种方式ops-transformer aclnn、PyTorch与图模式调用指南【免费下载链接】ops-transformer本项目是CANN提供的transformer类大模型算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-transformerops-transformer是 CANN 提供的 transformer 类大模型算子库面向昇腾 NPU提供 attention、MoE、mc2 通算融合等高性能算子帮助大模型在 NPU 上加速计算。本文将带你掌握在昇腾上调用大模型算子的 3 种主流方式aclnn APIC/C、PyTorchtorch_extension、GE 图模式帮你在 10 分钟内选对集成路径快速跑通第一个算子。一、先认识 ops-transformer大模型算子库的定位ops-transformer 是 CANN 算子体系中专门服务大模型的进阶算子库覆盖 Attention如 flash_attn、sparse_flash_mla、MoE如 moe_init_routing、grouped_matmul、mc2 通算融合如 matmul_all_reduce等核心场景支持 Atlas A2/A3 及 Ascend 950 系列产品。项目按算子类别组织目录结构清晰目录内容典型算子attention/注意力类算子flash_attn、sparse_flash_mla、lightning_indexermoe/MoE 路由/重排类算子moe_init_routing、moe_token_permutemc2/通算融合通信算子matmul_all_reduce、moe_distribute_dispatchgmm/分组矩阵乘算子grouped_matmul、grouped_matmul_swiglu_quantposembedding/位置编码/融合 RoPE 算子rotary_position_embedding、kv_rms_norm_rope_cachetorch_extension/PyTorch 桥接接口cann_ops_transformer 模块以 Attention 算子为例推理场景中 KV Cache 常采用分块PA/NZ格式存储以提升访存效率下图展示了 KV Cache 的 NZ 分块排布方式理解它有助于你读懂算子参数中的kv_cache_layout、cacheMode等字段在分页PagedKV Cache 场景下算子还会配合 BlockTable 与 cacheIndex 完成 token 到 Block 的映射下图直观展示了这一索引关系二、3种调用方式速览一张表看懂怎么选在动手之前先建立全局认知。ops-transformer 提供 3 种官方调用方式本质区别在于你在哪个编程界面上使用算子调用方式编程语言是否需要 IR 定义适用人群典型场景aclnn APIC/C不需要底层 C 业务、自研推理引擎高性能服务、算子库二次集成PyTorchtorch_extensionPython不需要算法/应用工程师训练/微调、快速实验、模型迁移GE 图模式C 构图需要算子 IR图编译优化场景TorchAir 图编译、离线推理图三种方式共享同一套算子内核Kernel选择哪一种只取决于你的技术栈而不是算子能力差异。三、方式一aclnn API——C/C 业务的最快接入路径aclnn API将每个算子封装为以aclnn为前缀的 C 语言接口如aclnnFlashAttentionScoreHost 侧直接调用无需提供算子 IR 定义是 C 业务集成的标准方式。调用流程经典的两段式接口aclnn 调用遵循固定的「两段式」范式理解了它调用任何算子都是同一套路第一段aclnnXxxGetWorkspaceSize(...)——传入输入/输出张量返回工作空间大小并生成执行器executor按返回大小用aclrtMalloc申请 device 内存第二段aclnnXxx(workspaceAddr, workspaceSize, executor, stream)——真正下发算子任务aclrtSynchronizeStream(stream)同步等待再将结果拷回 host 检查。# 每个算子的 examples/ 目录都提供了完整调用示例 # 例如 attention/flash_attention_score 下即有 aclnn 调用样例工程 想快速上手官方为示例算子 AddExample 提供了完整调用脚本源码位于examples/add_example/examples/test_aclnn_add_example.cpp配套文档见docs/zh/invocation/quick_op_invocation.md该文档同时覆盖 aclnn、图模式与 PyTorch 三种方式的编译运行步骤。如何找到你要调用的接口名全量 aclnn 接口索引docs/zh/menu_aclnn_api.mdaclnn API 清单docs/zh/op_api_list.md每个算子目录下的op_api/子目录存放对应的头文件与接口文档四、方式二PyTorchtorch_extension——Python 用户的零门槛选择如果你习惯 PyTorch 开发这是体验最好的方式。项目通过JIT 编译机制torch.utils.cpp_extension.load在首次调用时即时编译 C Wrapper把 PyTorch 函数无缝桥接到 CANN 的 aclnn API同时借助GE Converter 支持 TorchAir 图模式训练/推理都能平滑切换。使用步骤# 1. 确保已安装CANN Toolkit 包 ops-transformer 包 Ascend for PyTorch # 2. Python 中直接 import 使用import torch import torch_npu import cann_ops_transformer # ops-transformer 提供的 PyTorch 模块之后即可像调用 torch 原生算子一样调用例如out cann_ops_transformer.flash_attn(q, k, v, metadata) # 示例示意几个实用提示接口清单全量 torch_extension 接口列表见docs/zh/torch_api_list.md每个接口都有独立文档位于torch_extension/cann_ops_transformer/docs/zh/目录包含参数说明与确定性行为描述。V 版本选择同一接口存在多个 V 版本如 moe_init_routing 的 V1/V2/V3/V4选最高 V 版本即可高版本向下兼容低版本能力。metadata 配套部分算子如 sparse_flash_mla、flash_attn需先调用配套的xxx_metadata前置接口计算负载均衡参数接口文档中有明确标注需与 xxx_metadata 配套使用。简易算子fast_kernel_launchexperimental 目录下贡献的简易算子仅支持 PyTorch 调用工程模板参考examples/fast_kernel_launch_example/。五、方式三GE 图模式——面向图编译优化的构图调用GE 图模式基于算子的 IRIntermediate Representation定义以构图方式调用算子创建 Graph 对象 → 实例化算子节点 → 连接输入输出 → 通过 Session 编译运行。构图调用的 10 步核心流程以官方示例算子 AddExample 为例主流程完整代码见examples/add_example/examples/test_geir_add_example.cppGraph graph(graphName); // 1. 创建图对象 ge::GEInitialize(globalOptions); // 2. 图引擎初始化 auto add1 op::AddExample(add1); // 3. 创建算子节点 graph.SetInputs(inputs).SetOutputs(outputs); // 6. 绑定输入/输出 session-AddGraph(graphId, graph, ...); // 8. session 添加图 session-RunGraph(graphId, input, output); // 9. 运行图 GEFinalize(); // 10. 释放资源图模式的特点算子包自动加载GE 图引擎根据环境变量自动加载已安装的算子包内置包或自定义包CMake 工程无需区分算子来源⚡图级优化构图后可获得算子融合等图编译优化适合离线推理与 TorchAir 场景PyTorch 桥接层最终也可落到图编译调用流程原理图见官方文档docs/zh/invocation/quick_op_invocation.md中的 GE 图模式章节。六、新手捷径一条命令先跑通算子样例无论选哪种方式推荐先用项目自带脚本build.sh验证环境再写自己的调用工程。每个算子的examples/目录都有现成样例一条命令即可编译运行# 自定义算子包模式编译自定义包后使用 bash build.sh --run_example flash_attention_score eager cust --vendor_namecustom # 已安装 ops-transformer 整包后 bash build.sh --run_example flash_attention_score eager # 图模式调用样例 bash build.sh --run_example flash_attention_score graph参数说明--run_example ${op} ${mode} ${pkg_mode}参数说明取值${op}算子名小写下划线如flash_attention_score${mode}调用方式eageraclnn/graph图模式${pkg_mode}包模式cust自定义算子包编译自定义算子包时注意按产品选择--soc参数Atlas A2 系列用ascend910bA3 系列用ascend910_93950 系列用ascend950。零基础部署可参考docs/QUICKSTART.md环境安装与源码构建细节见docs/zh/install/目录文档。七、三种方式怎么选常见场景建议✅选 aclnn API如果你在自研推理引擎或 C 服务中集成算子追求极致控制力需要精确管理 workspace 与 stream接口文档看docs/zh/op_api_list.md每个算子的op_host/与op_api/目录含完整定义。✅选 PyTorchtorch_extension如果你做模型训练、微调或快速实验希望 GPU/NPU 代码统一风格减少迁移成本实验性算子experimental 目录大多仅提供此调用方式。✅选 GE 图模式如果你需要图编译优化算子融合、TorchAir 编译构建离线推理图或图编译工具链。八、新手避坑清单 ⚠️常见问题解决方案编译提示找不到ASCEND_HOME_PATH先执行 CANN 环境变量脚本如source /usr/local/Ascend/cann/set_env.sh再编译版本不匹配报错源码分支需与 CANN 软件版本配套按 release 标签下载避免 master 分支混用算子调用失败、日志提示环境变量缺失按日志提示setenv后重试自定义包需确认opp/vendors下 config.ini 已注册 vendor同一算子有多个 V 版本选最高 V 版本向下兼容950 系列示例跑不起来部分算子仅支持特定产品查阅接口列表中的确定性/支持产品标注精度对不上想定位问题用msprof op采集算子级性能数据配合 DumpTensor 调试方法见docs/QUICKSTART.md第三章结语掌握aclnn、PyTorch、GE 图模式这三种调用方式就打通了昇腾 NPU 上使用 ops-transformer 大模型算子的全部路径C 高性能业务走 aclnnPython 研发迭代走 torch_extension图编译优化走 GE 图模式。建议新手先用bash build.sh --run_example跑通官方样例再按需阅读对应算子目录下的接口文档即可快速将 flash_attn、sparse_flash_mla、moe 系列等大模型算子集成到你的业务中。【免费下载链接】ops-transformer本项目是CANN提供的transformer类大模型算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-transformer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考