API function: Uses the FlashAttention algorithm to perform self-attention computation in training scenarios.
Formula:
The forward propagation formula for attention is as follows:
Each operator has calls. First, [object Object] is called to obtain the workspace size required for computation and the executor that contains the operator computation process. Then, [object Object] is called to perform computation.
[object Object]
[object Object]
Parameters
[object Object]Returns:
[object Object]: status code. For details, see .The first-phase API implements input parameter verification. The following errors may be thrown.
[object Object]
- Deterministic computing:
[object Object]defaults to a deterministic implementation.
- When this API is used together with PyTorch, ensure that the CANN package versions match the PyTorch package versions.
- The constraints for input
[object Object],[object Object], and[object Object]are as follows:- The data format of
[object Object],[object Object], and[object Object]can be interpreted from multiple dimensions. To be specific, B (Batch) indicates the size of an input sample batch, S (Seq-Length) indicates the length of the input sample sequence, H (Head-Size) indicates the size of the hidden layer, N (Head-Num) indicates the number of heads, and D (Head-Dim) indicates the minimum unit size of the hidden layer (D = H/N). - B: The batch sizes must be equal.
- D: Head-Dim must satisfy (qD == kD && kD >= vD).
[object Object]must be consistent.- The data type must be consistent with that of
[object Object].
- The data format of
- The shapes of input
[object Object]and[object Object]must be the same except D. - N of the input
[object Object]can be different from N of the[object Object]or[object Object], but they must be proportional. That is, Nq/Nkv must be a non-zero integer and the value of Nq ranges from 1 to 256. When Nq/Nkv > 1, it is a grouped-query attention (GQA). When Nkv=1, it is a multi-query attention (MQA). Unless otherwise specified, N in this document indicates Nq. - You need to pay attention to constraints of the data shape. The following takes the
[object Object]values BSND and BNSD as examples to describe the constraints (H = N*D in BSH and SBH):- B: The value ranges from 1 to 2M. When
[object Object]is passed, B supports a maximum of 2K. - N: The value ranges from 1 to 256.
- S: The value ranges from 1 to 1M.
- D: The value ranges from 1 to 768.
- B: The value ranges from 1 to 2M. When
- realShiftOptional: If Sq is greater than 1024, the length of Sq in each batch is the same as that of Skv, and the sparseMode is 0, 2, or 3, the alibi positional encoding compression can be enabled. In this case, only the last 1024 rows of the original PSE need to be input for memory optimization. That is, alibi_compress = ori_pse[:, :, -1024:, :]. The details are as follows:
- If the parameters of each batch are different, the shape is BNHSkv (H=1024).
- When each batch is the same, the shape is 1NHSkv (H=1024).
- If this parameter is not used, a null pointer can be passed.
[object Object]: 0 and 1 are reserved, and 2 indicates that invalid row calculation is enabled. This function is used to prevent precision loss caused by the mask of the entire row during calculation. However, this configuration deteriorates the performance. If the operator can determine that invalid rows exist, the invalid row computation is automatically enabled, such as in scenarios where[object Object]is set to 3 and Sq is greater than Skv.- The constraints for
[object Object]are as follows:- If the shape values of all
[object Object]are the same and less than 2048, you are advised to use the default mode to reduce memory usage. - When the value is set to 0 or 4, ensure that the ranges of
[object Object],[object Object], and[object Object]are consistent. - When the value is set to 1, 2, 3, 5, or 6, the user-configured
[object Object]and[object Object]do not take effect. - When the value is set to 1, 2, 3, 4, 5, or 6, the value of
[object Object]must be correct. Otherwise, the calculation result is incorrect. If[object Object]is set to[object Object],[object Object],[object Object], and[object Object]do not take effect and all tokens are calculated. - If no specific value is required, you are advised to set it to 0.
- For details about the sparse modes, see .
- If the shape values of all
- In some scenarios, if the computation load is too large, the operator execution may time out (AI Core error, errorStr: timeout or trap error). In this case, you are advised to perform axis splitting. Note: The computation load is affected by parameters such as B, S, N, and D. Larger values indicate larger computation loads.
- The
[object Object]sparse computing scenario is[object Object]or[object Object]. When Sq > Skv, the value range of N of[object Object]is [0, Skv]. When Sq ≤ Skv, the value range of N of[object Object]is [Skv – Sq, Skv]. - In the band scenario, the values of
[object Object]and[object Object]must overlap. - If the value of Sq in realShiftOptional is greater than 1024 and the shape is BNHS or 1NHS, Sq and Skv must be of the same length.
The following example is for reference only. For details, see .
[object Object]