---
title: 动态batch_size
description: "本节介绍如何在模型构建时支持动态batch_size功能。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/programug/graphdevg/atlasag_25_0049.html
sourcePath: /source/zh/canncommercial/900/programug/graphdevg/atlasag_25_0049.html
indexId: c610554f4bd6333567b4952a8824ba94db33015dc32e4804fa3e0f8ad88e283d70
---
# 动态batch_size

本节介绍如何在模型构建时支持动态batch_size功能。

#### 功能介绍

batch_size即每次模型推理处理的图片数，对于每次推理图片数量固定的场景，处理图片数由数据shape的N值决定；对于每次推理图片数量不固定的场景，则可以通过动态batch_size功能来动态分配每次处理的图片数量。例如用户执行推理业务时需要每次处理2张、4张、8张图片，则可以在模型中配置档位信息2,4,8，申请了档位后，模型推理时会根据实际档位申请内存。


#### 使用方法

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

2. 模型编译时，在aclgrphBuildModel接口options中设置INPUT_SHAPE/INPUT_FORMAT信息，同时通过DYNAMIC_BATCH_SIZE指定每个档位值的大小。
  INPUT_FORMAT必须设置并且和所有Data算子的format保持一致，且仅支持NCHW和NHWC，否则会导致模型编译失败。 INPUT_SHAPE参数必须设置。

  1 2 3 4 5 6 7 void PrepareOptions(std::map<AscendString, AscendString>& options) { options.insert({ {ge::ir_option::INPUT_FORMAT, "NCHW"}, {ge::ir_option::INPUT_SHAPE, "data:-1,1,28,28"}, // INPUT_SHAPE中的-1表示设置动态batch。 {ge::ir_option::DYNAMIC_BATCH_SIZE, "2,4,8"} // 设置N的档位 }); }


#### 使用注意事项

- 该功能不能和动态分辨率、动态维度同时使用。

- 如果用户设置的档位数值过大或档位过多，可能会导致模型编译失败，此时建议用户减少档位或调低档位数值。
- 若用户执行推理业务时，每次处理的图片数量不固定，则可以通过配置该参数来动态分配每次处理的图片数量。例如用户执行推理业务时需要每次处理2张、4张、8张图片，则可以配置为2,4,8，申请了档位后，模型推理时会根据实际档位申请内存。
- 如果模型编译时通过该参数设置了动态batch_size，则使用应用工程进行模型推理时，在模型执行接口之前：

  - 使用aclmdlSetDynamicBatchSize接口，用于设置真实的batch_size档位。
  - 不使用aclmdlSetDynamicBatchSize接口，则模型执行时，默认按照batch_size设置范围的最大值进行赋值。
接口详细说明请参见“aclmdlSetDynamicBatchSize(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/ascendgraphapi/aclcppdevg_03_0306.html)”。
- 如果用户设置了动态batch_size，同时又通过INSERT_OP_FILE参数设置了动态AIPP功能：
  实际推理时，调用aclmdlSetInputAIPP接口设置动态AIPP相关参数值时，需确保batch_size要设置为最大Batch数。接口详细说明请参见“aclmdlSetInputAIPP(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/ascendgraphapi/aclcppdevg_03_0308.html)”。

- 某些场景下，通过该参数设置动态batch_size特性后，生成的离线模型网络结构会与固定batch_size场景下的不同，推理性能可能存在差异。
- 如果用户设置的档位数值过大或档位过多，在运行环境执行推理时，建议执行swapoff -a命令关闭swap交换空间作为内存的功能，防止出现由于内存不足，将swap交换空间作为内存继续调用，导致运行环境异常缓慢的情况。
