--dynamic_batch_size
功能说明
设置动态BatchSize参数,适用于执行推理时,每次处理图片或者句子数量不固定的场景。
在某些推理场景,如检测出目标后再执行目标识别网络,由于目标个数不固定导致目标识别网络输入BatchSize不固定。如果每次推理都按照最大的BatchSize或最大分辨率进行计算,会造成计算资源浪费。因此,推理需要支持动态BatchSize和动态分辨率的场景,使用ATC工具时,通过该参数设置支持的BatchSize,通过--dynamic_image_size参数设置支持的分辨率档位。
模型转换完成后,在生成的om模型中,会新增一个输入,在模型推理时通过该新增的输入提供具体的BatchSize值。例如,a输入的BatchSize是动态的,在om模型中,会有与a对应的b输入来描述a的具体BatchSize。
关联参数
该参数需要与--input_shape配合使用,不能与--dynamic_image_size、--dynamic_dims、--input_shape_range同时使用。
且只支持N在shape首位的场景,即shape的第一位设置为"-1"。如果N在非首位场景下,请使用--dynamic_dims参数进行设置。
参数取值
参数值:档位数,例如"1,2,4,8"。
参数值格式:指定的参数必须放在双引号中,档位之间使用英文逗号分隔。
参数值约束:档位数取值范围为(1,100],即必须设置至少2个档位,最多支持100档配置;每个档位数值建议限制为:[1~2048]。
推荐配置及收益
- 如果用户设置的档位数值过大或档位过多,可能会导致模型转换失败,此时建议用户减少档位或调低档位数值。
- CV(计算机视觉)类的网络,--dynamic_batch_size建议取值为8、16档位,该场景下的网络性能比单个BatchSize更优(8、16档位只是建议取值,实际使用时还请以实际测试结果为准)。
- OCR/NLP(文字识别/自然语言处理)类网络,--dynamic_batch_size档位取值建议为16的整数倍(该档位值只是建议取值,实际使用时还请以实际测试结果为准)。
- 如果用户设置的档位数值过大或档位过多,在运行环境执行推理时,建议执行swapoff -a命令关闭swap交换区间作为内存的功能,防止出现由于内存不足,将swap交换空间作为内存继续调用,导致运行环境异常缓慢的情况。
示例
--input_shape="data:-1,3,416,416;img_info:-1,4" --dynamic_batch_size="1,2,4,8"
其中,“--input_shape”中的“-1”表示设置动态BatchSize。则ATC在模型编译时,支持的输入组合档数分别为:
第0档:data(1,3,416,416)+img_info(1,4)
第1档:data(2,3,416,416)+img_info(2,4)
第2档:data(4,3,416,416)+img_info(4,4)
第3档:data(8,3,416,416)+img_info(8,4)
支持的型号
Atlas 200/300/500 推理产品
Atlas 推理系列产品(Ascend 310P处理器)
Atlas 训练系列产品
Atlas 200/500 A2推理产品
Atlas A2训练系列产品
依赖约束
- 使用约束:
- 不支持含有过程动态shape算子(网络中间层shape不固定)的网络。
- 若用户执行推理业务时,每次处理的图片数量不固定,则可以通过配置该参数来动态分配每次处理的图片数量。例如用户执行推理业务时需要每次处理2张、4张、8张图片,则可以配置为2,4,8,申请了档位后,模型推理时会根据实际档位申请内存。
- 如果用户设置了动态BatchSize,同时又通过--insert_op_conf参数设置了动态AIPP功能:
实际推理时,调用《CANN AscendCL应用软件开发指南(C&C++)》手册中的“AscendCL API参考>模型加载与执行>aclmdlSetInputAIPP”接口设置动态AIPP相关参数值时,需确保batchSize要设置为最大Batch数。
- 某些场景下,通过该参数设置动态BatchSize特性后,生成的离线模型网络结构会与固定BatchSize场景下的不同,推理性能可能存在差异。
- 接口约束:
如果模型转换时通过该参数设置了动态BatchSize,则使用应用工程进行推理时,需在aclmdlExecute接口之前,增加aclmdlSetDynamicBatchSize接口,用于设置真实的BatchSize档位。
关于aclmdlSetDynamicBatchSize接口的具体使用方法,请参见《CANN AscendCL应用软件开发指南(C&C++)》手册“AscendCL API参考>模型加载与执行”章节。