pypto.experimental.online_softmax#
产品支持情况#
Ascend 950PR/Ascend 950DT:支持
Atlas A3 训练系列产品/Atlas A3 推理系列产品:不支持
Atlas A2 训练系列产品/Atlas A2 推理系列产品:不支持
功能说明#
该接口为定制接口,约束较多。不保证稳定性。
该算子用于块式在线Softmax计算,对输入scores按第0维做局部统计。算子会先对scores乘以scale,再计算每一列的最大值和指数和,同时输出未归一化的指数结果。该接口通常用于FlashAttention等分块注意力场景,配合pypto.experimental.online_softmax_update逐块更新全局最大值、指数和与中间输出。
函数原型#
online_softmax(scores: Tensor, scale: float) -> Tuple[Tensor, Tensor, Tensor]
参数说明#
参数名 |
输入/输出 |
说明 |
|---|---|---|
scores |
输入 |
源操作数。 |
scale |
输入 |
float类型。 |
返回值说明#
返回三个输出Tensor:
返回值 |
说明 |
|---|---|
exp_scores_bf16 |
缩放并减去列最大值后的指数结果,数据类型为DT_BF16,Shape与scores相同。 |
column_max |
每一列的局部最大值,数据类型为DT_FP32,Shape为[1, q_len]。 |
column_sum |
每一列的局部指数和,数据类型为DT_FP32,Shape为[1, q_len]。 |
约束说明#
该接口为定制接口,不保证稳定性。
scores 数据类型仅支持 DT_FP32。
当前版本不切分第0维,要求 scores.shape[0] <= vec_tile[0]。
调用示例#
TileShape设置示例#
调用该operation接口前,应通过set_vec_tile_shapes设置TileShape。
TileShape的维度设置须与输入scores保持一致。当前版本不切分第0维,要求scores.shape[0] <= vec_tile[0]。
接口调用示例#
import pypto
scores = pypto.tensor([128, 128], pypto.DT_FP32)
scale = 1.0 / (128 ** 0.5)
pypto.set_vec_tile_shapes(128, 64)
exp_scores_bf16, column_max, column_sum = pypto.experimental.online_softmax(scores, scale)