---
title: 编译并运行Graph场景
description: "当前系统支持在用户脚本中配置动态维度信息，从而支持动态输入的场景，本节给出具体说明。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/programug/graphdevg/atlasag_25_0053.html
sourcePath: /source/zh/canncommercial/900/programug/graphdevg/atlasag_25_0053.html
indexId: 556b46ac6d25304d0abfb8b7c3112c1d50217d035741e35c5965fe54ef1e3c1270
---
# 编译并运行Graph场景

当前系统支持在用户脚本中配置动态维度信息，从而支持动态输入的场景，本节给出具体说明。

#### 功能介绍

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

编译并运行Graph场景的动态维度当前仅支持在整图设置：使用Session参数设置维度信息，输入可以为dataset方式、placeholder方式，或者两种混合方式。对于混合输入，当前仅支持其中一种为动态变化的场景。


#### 使用方法

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

2. 编译并运行Graph时，在Session接口和AddGraph接口的options中设置ge.inputShape/ge.dynamicNodeType信息，同时通过ge.dynamicDims指定维度信息。
  ge.inputShape参数必须设置。 整图设置动态维度时，用户在脚本中设置的ge.inputShape的输入顺序要和实际data节点的name字母序保持一致，比如有三个输入：label、data、mask，则ge.inputShape输入顺序应该为data、label、mask： 1 "data:1,1,40,-1;label:1,-1;mask:-1,-1" 编译并运行Graph动态维度场景，如果模型有多个输入，非分档输入支持指定内部Format格式，分档输入不支持指定内部Format格式，详细使用方法请参见指定Graph输入输出的内部格式。

  1 2 3 4 5 6 7 std::map<std::string, std::string> options = {{"ge.inputShape", "data:1,1,40,-1;label:1,-1;mask:-1,-1"}, {"ge.dynamicDims", "20,20,1,1;40,40,2,2;80,60,4,4"}, {"ge.dynamicNodeType", "1"}}; // 动态维度参数添加到Session ge::GeSession *session = new ge::GeSession(options); // 动态维度参数添加到graph session->AddGraph(graph_id, graph, options);


- ge.inputShape表示网络的输入shape信息，以上配置表示网络中有三个输入，输入的name分别为data，label，mask，各输入的shape分别为（1,1,40,-1）、（1,-1）、（-1,-1），其中-1表示该维度为动态，需要通过ge.dynamicDims设置动态维度参数。
- ge.dynamicDims用来设置动态维度的档位，档位中间使用英文分号分隔，每档中的dim值与ge.inputShape参数中的-1标识的参数依次对应，ge.inputShape参数中有几个-1，则每档必须设置几个维度。结合ge.inputShape信息，ge.dynamicDims配置为"20,20,1,1;40,40,2,2;80,60,4,4"，则表示输入shape支持三个档位，模型编译时，支持的输入组合档位数分别为：

  - 第0档：data(1,1,40,20)，label(1,20)，mask(1,1)
  - 第1档：data(1,1,40,40)，label(1,40)，mask(2,2)
  - 第2档：data(1,1,40,80)，label(1,60)，mask(4,4)
- ge.dynamicNodeType用于指定动态输入的节点类型。0：dataset输入为动态输入；1：placeholder输入为动态输入。当前不支持dataset和placeholder输入同时为动态输入。
