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

#### 产品支持情况

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


#### 功能说明

将填充后的序列恢复成原始的变长序列。


#### 定义

```
struct UnpadWithHiddenStateParam {
    std::vector<int32_t> qSeqLen;
    int32_t maxSeqLen = 4096;
    uint8_t rsv[12] = {0};
};
```


#### 参数列表

| 成员名称 | 类型 | 默认值 | 描述 |
| --- | --- | --- | --- |
| qSeqLen | std::vector<int32\_t> | \- | 每个batch实际SeqLen的值，元素个数为batchSize。batchSize的值最大不超过32。 |
| maxSeqLen | int32\_t | \- | 最大SeqLen值。取值不超过4096。 |
| rsv[12] | uint8\_t | {0} | 预留参数。 |


#### 输入

| 参数 | 维度 | 数据类型 | 格式 | 描述 |
| --- | --- | --- | --- | --- |
| x | [batchSize, maxSeqLen, hiddenSize] | float16 | ND | unpad前，带冗余的tensor，与pad输出shape一致。 |


#### 输出

| 参数 | 维度 | 数据类型 | 格式 | 描述 |
| --- | --- | --- | --- | --- |
| output | [nTokens, hiddenSize] | float16 | ND | unpad后，不带冗余的tensor，与pad输入shape一致。nTokens为qSeqLen数组的元素和。 |


#### 约束说明

无


#### 接口调用示例

qSeqlen ={2, 3, 1} //每个batch的实际输入长度

maxSeqlen=4 //qSeqlen中最大的输入长度

x的shape为(3, 4, 5) //batchSize为3，最大输入长度为4，隐藏层大小为5

```
x=[
[1,2,3,4,5
6,7,8,9,10
0,0,0,0,0
0,0,0,0,0],
[11,12,13,14,15
16,17,18,19,20
21,22,23,24,25
0,0,0,0,0],
[26,27,28,29,30
0,0,0,0,0
0,0,0,0,0
0,0,0,0,0]]
```

output的shape为(6, 5) //总tokens数为6 隐藏层大小为5

```
x=[1, 2, 3, 4, 5
6, 7, 8, 9, 10
11, 12, 13, 14, 15
16, 17, 18, 19, 20
21, 22, 23, 24, 25
26, 27, 28, 29, 30]
```
