昇腾社区首页
中文
注册

配置动态shape

功能介绍

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

使用约束

使用方法

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

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范围。对于该动态沉图,由于输入的图片高、宽是不固定的,但根据具体业务得知是在1~1728范围内,所以在ge.inputShape中将第一个输入的高、宽维度设置成1~1728范围。对于第二个输入只有高、宽两个数字,所以ShapeRange是固定的数值[2]。更多介绍请参考Ascend Graph开发指南
  • 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三种格式。
{
    "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"
      }
    ]
}