# CANN——FA算子 融合算子是指将多个独立的"小算子"融合成一个"大算子",二者功能等价,但性能内存上"大算子"明显优于"小算子"。 FA(Flash Attention)是大语言模型(Large LanguageModel, LLM)中最核心的一个融合算子。 ![](C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20251004214235761.png)融合算子的优势: - 减少计算量:简化计算过程,减少计算量,提高计算效率。 - 减少内存占用:合并中间结果,提高内存利用率。 - 优化数据流:减少数据传输,提高数据处理效率。 - 简化代码实现:减少代码量,提高可读可维性。 ### 功能描述 正向计算公式: ``attention_out=Dropout(Softmax(Mask(scale*(pse+query*key'),atte"en_mask)),keep_prob)*value`` ### 接口原型 ```python torch_npu.npu_fusion_attention( const at::Tensor &query, const at::Tensor &key, const at::Tensor 8&value, int64_t head_num,c10::string_view input_layout, const c10::optional &pse_opt, const c10:optional &padding_mask_opt,const c10::optional&atten_mask_opt, double scale,double keep_prob, int64_t pre_tockens, int64_t next_tockens, t inner_precise at::OptionallntArrayRef prefix_opt, at::OptionallntArrayRef actual_seq_qlen, at::OptionallntArrayRef actual_seq_kvlen, int64_t sparse_mode, bool gen_mask_parallel, bool sync ) ``` 共7个输出:(Tensor,Tensor,Tensor,Tensor,int,int,int): 1. 第1个输出为Tensor,计算公式的最终输出attention_out 2. 第2个输出为Tensor,Softmax计算的Max中间结果,用于反向计算 3. 第3个输出为Tensor,Softmax计算的Sum中间结果,用于反向计算 4. 第4个输出为Tensor,保留参数,暂未使用。 5. 第5个输出为int,DSA生成dropoutmask中,Philox算法的seed。 6. 第6个输出为int,DSA生成dropoutmask中,Philox算法的offset。 7. 第7个输出为int,DSA生成dropoutmask的长度。 ![](C:/Users/Administrator/AppData/Roaming/Typora/typora-user-images/image-20251004215052398.png)