---
title: NormRopeReshapeOperation
description: "| 硬件型号 | 是否支持 |"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/ascendtb/ascendtb_01_0190.html
sourcePath: /source/zh/canncommercial/900/API/ascendtb/ascendtb_01_0190.html
indexId: 93822bedc119e4e9a3a85a7ab363a3c2f89f9f297fd900f8fde478278be36f4464
---
# NormRopeReshapeOperation

#### 产品支持情况

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


#### 功能说明

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

图1 计算流程图


#### 定义

```
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 | \- | 否 | 归一化时加在分母上防止除0。 |
| 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。 |


#### 约束说明

- x、gamma的最后一维大小相等且32字节对齐。
- keyRope、cos、sin的数据类型需保持一致，hiddenSizeK和head_size大小需相等。
- 11*dn*sizeof(float16) + dnrac * sizeof(float16) < maxUbSize(196352)。
- ntokens小于等于65536。
