编译Graph为离线模型场景
当前系统支持在接口中指定配置动态档位信息,从而支持动态输入的场景,本节给出详细说明。
功能介绍
用户可以在模型构建时,设置ND格式下动态维度的档位。适用于执行推理时,每次处理任意维度的场景。
支持的型号
Atlas 200/300/500 推理产品
Atlas 推理系列产品
Atlas 训练系列产品
Atlas 200/500 A2推理产品
Atlas A2训练系列产品/Atlas 800I A2推理产品
使用方法
- 在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);
- 模型编译时,在aclgrphBuildModel接口options中设置INPUT_SHAPE/INPUT_FORMAT信息,同时通过DYNAMIC_DIMS指定档位信息。
- INPUT_FORMAT必须设置并且和所有Data算子的format保持一致,且仅支持ND,否则会导致模型编译失败。
- INPUT_SHAPE可选设置。如果不设置,系统直接读取对应Data节点的shape信息,如果设置,以此处设置的为准,同时刷新对应Data节点的shape信息。
1 2 3 4 5 6 7
void PrepareOptions(std::map<std::string, std::string>& options) { options.insert({ {ge::ir_option::INPUT_FORMAT, "ND"}, {ge::ir_option::INPUT_SHAPE, "data:1,-1,-1"}, {ge::ir_option::DYNAMIC_DIMS, "1,2;3,4;5,6;7,8"} // 模型编译时,支持的data算子的shape为1,1,2; 1,3,4; 1,5,6; 1,7,8 }); }
使用注意事项
- 该功能不能和动态Batch、动态分辨率、AIPP功能同时使用。
- 参数通过"dim1,dim2,dim3;dim4,dim5,dim6;dim7,dim8,dim9"的形式设置,所有档位必须放在双引号中,每档中间使用英文分号分隔,每档中的dim值与INPUT_SHAPE参数中的-1标识的参数依次对应,INPUT_SHAPE参数中有几个-1,则每档必须设置几个维度。例如:
1 2 3 4 5 6 7
void PrepareOptions(std::map<std::string, std::string>& options) { options.insert({ {ge::ir_option::INPUT_FORMAT, "ND"}, {ge::ir_option::INPUT_SHAPE, "data:1,1,40,-1;label:1,-1;mask:-1,-1"}, {ge::ir_option::DYNAMIC_DIMS, "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)
- 如果模型编译时通过该参数设置了动态维度,则使用应用工程进行模型推理时,在模型执行接口之前:
父主题: 动态维度