Attention融合算子Experimental使用说明
前提条件
-
环境部署:调用算子之前,请先参考环境部署完成基础环境搭建,其中安装依赖章节的版本约束以如下内容为准:
- python >= 3.10.0
- torch >= 2.7.0
- gcc >= 9.0.0
- torch_npu >=2.7.0
-
安装torch与torch_npu包
根据实际环境,下载对应torch包并安装:
torch-${torch_version}+cpu-${python_version}-linux_${arch}.whl下载链接为:官网地址安装命令如下:
pip install torch-${torch_version}+cpu-${python_version}-linux_${arch}.whl根据实际环境,安装对应torch-npu包:
torch_npu-${torch_version}-${python_version}-linux_${arch}.whl下载链接为:官网地址安装命令如下:
pip install torch_npu-${torch_version}-${python_version}-linux_${arch}.whl- ${torch_version}:表示torch包版本号。
- ${python_version}:表示python版本号。
- ${arch}:表示CPU架构,如aarch64、x86_64。
算子列表
项目提供的所有算子列表如下:
| 算子名 | 接口文档 | 算子实现 | torch调用 | 图模式调用 | 算子执行硬件单元 | 说明 | ||
|---|---|---|---|---|---|---|---|---|
| kernel | host | Ascend IR | aclgraph | |||||
| compressor | 文档 | √ | √ | √ | × | √ | AI Core | 将每4或128个token的 KV cache 压缩成一个,然后每个token与这些压缩的 KV cache进行 DSA 计算。 算子torch接口调用依赖torch_ops_extension,具体安装方法见安装指导。 |
| kv_quant_sparse_attn_sharedkv | 文档 | √ | √ | √ | × | √ | AI Core | 支持量化模式的Sliding Window Attention、Compressed Attention以及Sparse Compressed Attention计算。 算子torch接口调用依赖torch_ops_extension,具体安装方法见安装指导。 |
| kv_quant_sparse_attn_sharedkv_metadata | 文档 | √ | √ | √ | × | √ | AI Cpu | 该算子为kv_quant_sparse_attn_sharedkv算子提供分核结果。 算子torch接口调用依赖torch_ops_extension,具体安装方法见安装指导。 |
| quant_lightning_indexer | 文档 | √ | √ | √ | × | √ | AI Core | 该算子是推理场景下,稀疏Attention前处理的计算,选出关键的稀疏token,并对输入query和key进行量化实现存8算8,获取最大收益。 算子torch接口调用依赖torch_ops_extension,具体安装方法见安装指导。 |
| quant_lightning_indexer_metadata | 文档 | √ | √ | √ | × | √ | AI Cpu | 该算子为quant_lightning_indexer算子提供分核结果。 算子torch接口调用依赖torch_ops_extension,具体安装方法见安装指导。 |
| sparse_attn_sharedkv | 文档 | √ | √ | √ | × | √ | AI Core | 该算子支持非量化的Sliding Window Attention、Compressed Attention以及Sparse Compressed Attention计算。 算子torch接口调用依赖torch_ops_extension,具体安装方法见安装指导。 |
| sparse_attn_sharedkv_metadata | 文档 | √ | √ | √ | × | √ | AI Cpu | 该算子为sparse_attn_sharedkv算子提供分核结果。 算子torch接口调用依赖torch_ops_extension,具体安装方法见安装指导。 |
| blitz_sparse_attention | / | / | / | / | / | / | / | 算子具体使用方法见README文档。 |
| fused_infer_attention_score | / | / | / | / | / | / | / | 算子具体使用方法见README文档。 |
| typhoon_mla | / | / | / | / | / | / | / | 算子具体使用方法见README文档。 |
自定义算子编译
-
编译自定义算子包
进入项目根目录,执行如下编译命令:
bash build.sh --pkg --experimental --soc=${soc_version} --ops=${op_list} # 如要使用DeepSeek-V4,910c环境编译命令示例如下: # bash build.sh --pkg --experimental --soc=ascend910_93 --ops=compressor,quant_lightning_indexer,quant_lightning_indexer_metadata,sparse_attn_sharedkv,sparse_attn_sharedkv_metadata # 如要使用DeepSeek-V4,ascend950环境编译命令示例如下: # bash build.sh --pkg --experimental --soc=ascend950 --ops=compressor,quant_lightning_indexer,quant_lightning_indexer_metadata,kv_quant_sparse_attn_sharedkv,kv_quant_sparse_attn_sharedkv_metadata- --soc:${soc_version}表示NPU型号。Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件使用"ascend910b",Atlas A3 训练系列产品/Atlas A3 推理系列产品使用"ascend910_93"。
- --ops:自定义算子名称,多个自定义算子通过
,分割。
若提示如下信息,说明编译成功。
Self-extractable archive "cann-ops-transformer-custom_linux.${arch}.run" successfully created.编译成功后,run包存放于项目根目录的build_out目录下。
-
安装自定义算子包
./cann-ops-transformer-${vendor_name}_linux-${arch}.run --install-path=${install_path}自定义单算子包安装时若不指定参数
--install-path,将默认安装于${ASCEND_HOME_PATH}/opp/vendors目录下。${ASCEND_HOME_PATH}已通过环境变量配置,表示CANN ops包安装路径。如指定--install-path=${install_path},则自定义算子包将安装于${install_path}/vendors目录下。注意自定义算子包不支持卸载。安装完成后,需要激活自定义算子包环境变量或导出环境变量,具体方式如下:# experimental自定义单算子包自定义安装路径 source ${install_path}/vendors/custom_transformer/bin/set_env.bash # experimental自定义单算子包默认安装路径${ASCEND_HOME_PATH}/opp/vendors # export LD_LIBRARY_PATH=${ASCEND_HOME_PATH}/opp/vendors/custom_transformer/op_api/lib/:$LD_LIBRARY_PATH
torch_ops_extension包编译安装(可选)
根据算子列表章节介绍,如需使用torch接口进行算子调用,则需前置安装torch_ops_extension包。
torch_ops_extension包为自定义算子提供了torch.ops的拓展接口,具体编译安装方法请见torch_ops_extension安装方法。
自定义算子执行
项目中各算子通过pytest验证各算子的功能是否正常,各算子的pytest调用方法如下表。
| 算子名 | pytest示例 |
|---|---|
| compressor | 示例 |
| kv_quant_sparse_attn_sharedkv | 示例 |
| quant_lightning_indexer | 示例 |
| sparse_attn_sharedkv | 示例 |