FastSoftMaxOperation
产品支持情况
| 
          产品  | 
        
          是否支持  | 
       
|---|---|
| 
          | 
        
          √  | 
       
| 
          | 
        
          √  | 
       
| 
          | 
        
          x  | 
       
| 
          | 
        
          x  | 
       
| 
          | 
        
          x  | 
       
功能描述
训练算子,与unpadOperation一起使用,将unpad处理后的Q矩阵和K矩阵相乘的结果做高性能的SoftMax处理。
SoftMax数学公式:

使用场景
Multi-Head Attention计算过程如图1所示。经过unpad处理后,Q矩阵和K矩阵相乘的结果实际上由batchSize个大小为(seqLen[i], seqLen[i])的矩阵拼接而成(如图2所示),需要对这个结果的末轴做SoftMax操作。采用FastSoftMax算子,接收seqLen和headNum的信息可以对这种排列方式的数据实现SoftMax操作。
定义
          1 2 3 4 5  | 
         
          struct FastSoftMaxParam { int32_t headNum = 0; std::vector<int32_t> qSeqLen; uint8_t rsv[8] = {0}; };  | 
        
参数列表
| 
          成员名称  | 
        
          类型  | 
        
          默认值  | 
        
          描述  | 
       
|---|---|---|---|
| 
          headNum  | 
        
          int32_t  | 
        
          0  | 
        
          Attention的head数量,需大于0。  | 
       
| 
          qSeqLen  | 
        
          std::vector<int32_t>  | 
        
          -  | 
        
          每个batch的实际输入长度。元素个数为batchSize,最大不超过32。  | 
       
| 
          rsv[8]  | 
        
          uint8_t  | 
        
          {0}  | 
        
          预留参数。  | 
       
输入
| 
          参数  | 
        
          维度  | 
        
          数据类型  | 
        
          格式  | 
        
          描述  | 
       
|---|---|---|---|---|
| 
          inTensor  | 
        
          [nSquareTokens]  | 
        
          float16  | 
        
          ND  | 
        
          输入tensor,是batch个(headNum, qSeqLen[i], qSeqLen[i])大小的矩阵按照ND排布拼接成一维的结果。  | 
       
输出
| 
          参数  | 
        
          维度  | 
        
          数据类型  | 
        
          格式  | 
        
          描述  | 
       
|---|---|---|---|---|
| 
          outTensor  | 
        
          [nSquareTokens]  | 
        
          float16  | 
        
          ND  | 
        
          输出tensor,数据范围在[0, 1]之间。  | 
       
规格约束
- qSeqLen数组长度不超过32,且要求各元素大于0。
 - 输入tensor(inTensor)、输出tensor(outTensor)的维度大小nSquareTokens与参数中的headNum和qSeqLen有关。须满足
      

:表示qSeqLen中的第k个元素。 
功能列表
当参数列表中
时,
其对应的输入tensor的shape大小为
。
例如参数中设置

此时的输入tensor的shape大小为

输入和输出tensor的shape为[5528144]。

