---
title: FastSoftMaxGradOperation
description: "| 产品 | 是否支持 |"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/ascendtb/ascendtb_01_0089.html
sourcePath: /source/zh/canncommercial/900/API/ascendtb/ascendtb_01_0089.html
indexId: 08e8235b0fd265c641ab6ffc49917f29bb01053801ad1ecae643c3993384cc0964
---
# FastSoftMaxGradOperation

#### 产品支持情况

| 产品 | 是否支持 |
| --- | --- |
| Atlas 350 加速卡 | x |
| Atlas A3 推理系列产品 / Atlas A3 训练系列产品 | √ |
| Atlas A2 训练系列产品 / Atlas A2 推理系列产品 | √ |
| Atlas 训练系列产品 | x |
| Atlas 推理系列产品 | x |
| Atlas 200I/500 A2 推理产品 | x |


#### 功能说明

训练算子，用于计算FastSoftMax的反向计算结果，其数据的排列结构与FastSoftMax相同。


#### 使用场景

图1 模型流程图

FastSoftMaxGrad算子用于计算FastSoftMax的反向计算结果，其数据的排列结构与FastSoftMax相同。

图2 输入数据的排列方式


#### 定义

```
struct FastSoftMaxGradParam {
    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的实际输入长度，元素个数与batch大小相同，最大不超过32。 |
| rsv[8] | uint8\_t | {0} | 预留参数。 |


#### 输入

| 参数 | 维度 | 数据类型 | 格式 | 描述 |
| --- | --- | --- | --- | --- |
| yInput | [nSquareTokens] | float16 | ND | 输入tensor，SoftMax算子前向计算的结果是batch个值域在(0,1)之间，且末轴和为1的(headNum, qSeqLen[i], qSeqLen[i])大小的矩阵，按照ND排布拼接成一维的结果。 |
| yGrad | [nSquareTokens] | float16 | ND | 下一个算子传入的梯度数据。排列方式与yInput相同。 |


#### 输出

| 参数 | 维度 | 数据类型 | 格式 | 描述 |
| --- | --- | --- | --- | --- |
| output | [nSquareTokens] | float16 | ND | 排列方式与yInput相同。 |


#### 约束说明

- qSeqLen数组长度不超过32，且要求各元素大于0。
- 输入tensor（yInput和yGrad）、输出tensor（outTensor）的维度大小nSquareTokens与参数中的headNum和qSeqLen有关。须满足
  ：表示qSeqLen中的第k个元素。


#### 功能列表

当参数列表中

时，

其对应的yInput的shape大小为

。

例如参数中设置


此时的yInput的shape大小为


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