动态shape

配置项

说明

使用场景

input_shape

输入的shape信息。

配置示例:

custom_op.parameter_map["input_shape"].s = tf.compat.as_bytes("data:1,1,40,-1;label:1,-1;mask:-1,-1")

表示网络中有三个输入,输入的name分别为data,label,mask,各输入的shape分别为(1,1,40,-1),(1,-1),(-1,-1),name和shape之间以英文冒号分隔。其中-1表示该维度上为动态档位,需要通过dynamic_dims设置动态档位参数。

配置注意事项:

  • input_shape中输入的name需要与实际data节点的name的字母顺序保持一致,比如有三个输入:label、data、mask,则input_shape输入顺序应该为data、label、mask
  • 如果网络即有dataset输入也有placeholder输入,由于当前仅支持一种输入为动态的场景(例如dataset输入为动态),此时仅需填写dataset所有输入的shape信息。
  • 如果输入中包含标量,则需要填写为0。

在线推理

dynamic_dims

输入的对应维度的档位信息。档位中间使用英文分号分隔,每档中的dim值与input_shape参数中的-1标识的参数依次对应,input_shape参数中有几个-1,则每档必须设置几个维度。并且要求档位信息必须大于1组。

input_shape和dynamic_dims这两个参数的分档信息能够匹配,否则报错退出。

配置示例:

custom_op.parameter_map["dynamic_dims"].s = tf.compat.as_bytes("20,20,1,1;40,40,2,2;80,60,4,4")

结合上面举例的input_shape信息,表示支持输入的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)

在线推理

dynamic_node_type

指定动态输入的节点类型。

  • 0:dataset输入为动态输入。
  • 1:placeholder输入为动态输入。

当前不支持dataset和placeholder输入同时为动态输入。

配置示例:
custom_op.parameter_map["dynamic_node_type"].i = 0

在线推理

dynamic_input

当前网络的输入是否为动态输入,取值包括:

  • True:动态输入。
  • False:固定输入,默认False。

配置示例:

custom_op.parameter_map["dynamic_input"].b = True
须知:

当存在不同输入shape的子图时,由于dynamic_inputs_shape_range是针对于单张图的配置属性,因此可能会导致执行异常,建议使用set_graph_exec_config以支持动态输入场景。

训练/在线推理

dynamic_graph_execute_mode

对于动态输入场景,需要通过该参数设置执行模式,即dynamic_input为True时该参数生效。取值为:

dynamic_execute:动态图编译模式。该模式下获取dynamic_inputs_shape_range中配置的shape范围进行编译。

配置示例:

custom_op.parameter_map["dynamic_graph_execute_mode"].s = tf.compat.as_bytes("dynamic_execute")
须知:

当存在不同输入shape的子图时,由于dynamic_inputs_shape_range是针对于单张图的配置属性,因此可能会导致执行异常,建议使用set_graph_exec_config以支持动态输入场景。

训练/在线推理

dynamic_inputs_shape_range

动态输入的shape范围。例如全图有3个输入,两个为dataset输入,一个为placeholder输入,则配置示例为:

custom_op.parameter_map["dynamic_inputs_shape_range"].s = tf.compat.as_bytes("getnext:[128 ,3~5, 2~128, -1],[64 ,3~5, 2~128, -1];data:[128 ,3~5, 2~128, -1]")

使用注意事项:

  • dataset输入固定标识为“getnext”,placeholder输入固定标识为“data”,不允许用其他表示。
  • 动态维度有shape范围的用波浪号“~”表示,固定维度用固定数字表示,无限定范围的用-1表示。
  • 对于多输入场景,例如有三个dataset输入时,如果只有第二个第三个输入具有shape范围,第一个输入为固定输入时,仍需要将固定输入shape填入:
    custom_op.parameter_map["dynamic_inputs_shape_range"].s = tf.compat.as_bytes("getnext:[3,3,4,10],[-1,3,2~1000,-1],[-1,-1,-1,-1]")
  • 对于标量输入,也需要填入shape范围,表示方法为:[]。
    须知:

    当存在不同输入shape的子图时,由于dynamic_inputs_shape_range是针对于单张图的配置属性,因此可能会导致执行异常,建议使用set_graph_exec_config以支持动态输入场景。

训练/在线推理