动态输入shape范围
本节介绍如何在模型构建时设置动态输入的shape范围。
功能介绍
用户在模型编译时可以指定模型输入数据的shape范围,从而编译出支持动态输入的模型。
支持的型号
Atlas 推理系列产品
Atlas 训练系列产品
Atlas A2训练系列产品/Atlas 800I A2推理产品
使用方法
- 在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_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指定模型输入数据的shape范围。
1 2 3 4 5 6
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表示。
父主题: 专题