---
title: 动态输入shape范围
description: "本节介绍如何在模型构建时设置动态输入的shape范围。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/programug/graphdevg/atlasag_25_0054.html
sourcePath: /source/zh/canncommercial/900/programug/graphdevg/atlasag_25_0054.html
indexId: 5e79137ee5ef3d935d2c6a3c9a7ca1283ec4e647a780fe2f74eda257475a1e9770
---
# 动态输入shape范围

本节介绍如何在模型构建时设置动态输入的shape范围。

#### 功能介绍

Atlas 200I/500 A2 推理产品 不支持该特性。

用户在模型编译时可以指定模型输入数据的shape范围，从而编译出支持动态输入的模型。


#### 使用方法

1. 在Data算子定义时，将数据shape的指定维度设置为-1：
  1 2 3 4 5 auto shape_data = vector<int64_t>({ -1,3,5,-1 }); TensorDesc desc_data(ge::Shape(shape_data), FORMAT_NCHW, DT_FLOAT); auto data = op::Data("data"); data.update_input_desc_x(desc_data); data.update_output_desc_y(desc_data);

2. 模型编译时，在aclgrphBuildModel接口options中通过INPUT_SHAPE指定模型输入数据的shape范围。
```
void PrepareOptions(std::map<AscendString, AscendString>& options) {
    options.insert({
        {ge::ir_option::INPUT_FORMAT, "NCHW"},
        {ge::ir_option::INPUT_SHAPE, "8~20,3,5,-1"} 
    });
}
```

INPUT_SHAPE参数设置shape范围时的格式要求：

  - 支持按照name设置："input_name1:n1,c1,h1,w1;input_name2:n2,c2,h2,w2"，例如："input_name1:8~20,3,5,-1;input_name2:5,3~9,10,-1"。指定的节点必须放在双引号中，节点中间使用英文分号分隔。input_name必须是转换前的网络模型中的节点名称。如果用户知道data节点的name，推荐按照name设置。
  - 支持按照index设置："n1,c1,h1,w1;n2,c2,h2,w2"，例如："8~20,3,5,-1;5,3~9,10,-1"。可以不指定节点名，节点按照索引顺序排列，节点中间使用英文分号分隔。按照index设置shape范围时，data节点需要设置属性index，说明是第几个输入，index从0开始。
  - 动态维度有shape范围的用波浪号“~”表示，固定维度用固定数字表示，无限定范围的用-1表示。


#### 使用注意事项

如果模型编译时通过该参数设置了动态输入的shape范围，使用应用工程进行模型推理时，需在模型执行aclmdlExecute(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/ascendgraphapi/aclcppdevg_03_0298.html)接口之前，调用aclmdlSetDatasetTensorDesc(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/ascendgraphapi/aclcppdevg_03_1443.html)接口，用于设置真实的输入Tensor描述信息（输入shape范围）；模型执行之后，调用aclmdlGetDatasetTensorDesc(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/ascendgraphapi/aclcppdevg_03_1444.html)接口获取模型动态输出的Tensor描述信息；再进一步调用aclTensorDesc(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/ascendgraphapi/aclcppdevg_03_1474.html)下的操作接口获取输出Tensor数据占用的内存大小、Tensor的Format信息、Tensor的维度信息等。
