
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
去年底接到一个任务:把内部的7B推理服务从A100迁移到昇腾910,attention部分得换成FlashAttention。论文读过,原理懂,但真到昇腾NPU上动手就抓瞎——环境怎么配、算子怎么调、性能怎么测,全得从头摸索。后来顺着cann-learning-hub的学习资源走了一遍,花了五天把FlashAttention从"能跑"调到"跑得快"。整个过程记录下来,给同样在迁移路上的人参考。

一行代码出结果。但从这行调用到真正在昇腾910的达芬奇架构上跑起来,中间经过了图编排、算子加载、Tiling参数计算、UB内存分配、任务流水线调度。完成这些工作的,是CANN Runtime。

并非通用C语言,而是基于C++17标准扩展的领域特定嵌入式语言(Embedded DSL)aoeaic运行时:CANN(Compute Architecture for Neural Networks)提供底层支持// 定义输入输出Tensor描述) {// 获取当前线程块信息// 计算全局偏移// 向量化加载(支持float16/float32/int8等)// SIMD计算// 存储结果。

一行代码出结果。但从这行调用到真正在昇腾910的达芬奇架构上跑起来,中间经过了图编排、算子加载、Tiling参数计算、UB内存分配、任务流水线调度。完成这些工作的,是CANN Runtime。

一行代码出结果。但从这行调用到真正在昇腾910的达芬奇架构上跑起来,中间经过了图编排、算子加载、Tiling参数计算、UB内存分配、任务流水线调度。完成这些工作的,是CANN Runtime。

第一次在昇腾NPU上跑大模型推理的人,面对CANN生态的几十个仓库,第一反应通常是:FlashAttention算子在哪个仓库里?改算子要改哪个文件?编译完产物在哪?这些问题的答案全在里。这个仓库是昇腾CANN大模型算子的主仓库,FlashAttention、RMSNorm、RoPE、SwiGLU——Transformer架构用到的核心算子,实现全在这里。

第一次在昇腾NPU上跑大模型推理的人,面对CANN生态的几十个仓库,第一反应通常是:FlashAttention算子在哪个仓库里?改算子要改哪个文件?编译完产物在哪?这些问题的答案全在里。这个仓库是昇腾CANN大模型算子的主仓库,FlashAttention、RMSNorm、RoPE、SwiGLU——Transformer架构用到的核心算子,实现全在这里。

第一次在昇腾NPU上跑大模型推理的人,面对CANN生态的几十个仓库,第一反应通常是:FlashAttention算子在哪个仓库里?改算子要改哪个文件?编译完产物在哪?这些问题的答案全在里。这个仓库是昇腾CANN大模型算子的主仓库,FlashAttention、RMSNorm、RoPE、SwiGLU——Transformer架构用到的核心算子,实现全在这里。

刚接触昇腾CANN生态的时候,光是找FlashAttention算子在哪就花了不少时间。官方文档按功能模块划分,仓库按层级划分,两套逻辑对不上号——文档里写的是"大模型算子优化",仓库里是一个叫ops-transformer的目录。这种对应关系不搞清楚,改代码都不知道去哪改。ops-transformer是昇腾CANN大模型算子的主阵地。FlashAttention、RMSNorm、RoPE、Sw

刚接触昇腾CANN生态的时候,光是找FlashAttention算子在哪就花了不少时间。官方文档按功能模块划分,仓库按层级划分,两套逻辑对不上号——文档里写的是"大模型算子优化",仓库里是一个叫ops-transformer的目录。这种对应关系不搞清楚,改代码都不知道去哪改。ops-transformer是昇腾CANN大模型算子的主阵地。FlashAttention、RMSNorm、RoPE、Sw








