昇腾社区首页
中文
注册

配置动态shape

功能介绍

配置动态shape可以给予图编译阶段更多shape range信息,编译器用以编译高效的算子和更好地管理内存。设置maxOutputSize用于配置更为精准的输出最大值,图执行器会根据此配置在图计算前预申请好输出内存,提升性能。

使用约束

使用方法

假如有一个动态shape的resize沉图,具体实现如下,该沉图有两个输入,一个是需要resize的图片数据,一个是resize目标大小信息:

1
2
def resize_bilinear(x: torch.Tensor, hw: torch.Tensor):
      return F.interpolate(x, size=[hw[0], hw[1]], mode="bilinear", align_corners=True)

对于该动态沉图,具体配置如下所示。

  • ge.inputShape:动态输入的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表示。
  • ge.outputMaxSize(可选):指定图输出的最大内存。
    • 设置该参数时,dataflow框架会利用该参数预先为沉图输出分配好内存,可减少一次数据拷贝,提升执行性能。

      假如最大输出shape是[1,3,2567,3440],dtype是float32(fp32存储需4个字节),那么outputMaxSize计算为1x3x2567x3440x4=105965760。

      如果设置不正确,outputMaxSize小于实际输出时会有报错。

    • 不设置该参数时,在模型执行完成时根据实际情况申请输出内存。
  • inputs_tensor_desc
    • data_type:tensor的数据类型。
    • shape:tensor的shape信息,动态的维度请设置成-1。
    • format:每个输入的format信息需要根据实际的情况设置,支持NCHW, NHWC, ND三种格式。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
{
    "build_options": {
        "ge.inputShape": "1,3,1~1728,1~1728;2",
        "ge.outputMaxSize": "107495424"
    },
    "inputs_tensor_desc": [
      {
        "data_type": "DT_FLOAT",
        "shape": [1, 3, -1, -1],
        "format": "NCHW"
      },
      {
        "data_type": "DT_INT32",
        "shape": [2],
        "format": "ND"
      }
    ]
}