NormRopeReshapeOperation

功能

对输入tensor x进行RmsNorm操作,再对keyrope进行Rope操作,将两个操作的输出合并后进行ReshepeAndCache操作 。

图1 计算流程图

硬件支持情况

硬件型号

支持情况

Atlas 800I A2 推理产品

支持

定义

1
2
3
4
5
6
struct NormRopeReshapeParam {
    uint32_t precisionMode = 0;
    uint32_t rotaryCoeff = 2;
    float epsilon = 1e-5;
    uint8_t rsv[16] = {0};
};

参数列表

成员名称

类型

默认值

取值范围

是否必选

描述

precisionMode

uint32_t

0

-

精度模式。目前只支持0。

epsilon

float

1e-5

-

归一化时加在分母上防止除零。

rotaryCoeff

uint32_t

2

-

算子内Rope部分计算的旋转系数。

rsv

uint8_t

uint8_t

-

预留参数。

输入

参数

维度

数据类型

格式

描述

X

[ntokens, 1, head_size_x]

float16

ND

维度目前只支持[ntokens, 1, 512]。

gamma

[head_size_x]

float16

ND

维度目前只支持[512]。

keyRope

[ntokens, hiddenSizeK]

float16

ND

[ntokens, hiddenSizeK] hiddenSizeK = headNum * head_size(这里headNum=1)。维度目前只支持[ntokens, 64]。

cos

[ntokens, head_size]

float16

ND

[ntokens, head_size],大小与hiddenSizeK一致(headNum=1)。维度目前只支持[ntokens, 64]。

sin

[ntokens, head_size]

float16

ND

同cos。

slotMapping

[dnslot]

int32

ND

元素值大小不能超过blockNum * blockSize。维度目前只支持[64]。

keycachein

[blockNum, blockSize, 1,dnrac]

float16

ND

dnrac=head_size_x+hiddenSizeK。维度目前只支持[blockNum, blockSize, 1, 576]。blockNum * blockSize ≥ ntokens。

输出

参数

维度

数据类型

格式

描述

keycacheout

[blockNum, blockSize, 1, dnrac]

与keycachein一致

ND

同keycachein。

规格约束