更新时间:2021-03-18 GMT+08:00
分享

单算子Json文件配置

配置文件支持定义多组算子Json文件配置,一组配置包括算子类型、算子输入和输出信息、视算子情况决定是否包括属性信息,举例如下(用户请根据实际情况进行修改):

  1. format为ND:
    [
    {
      "op": "GEMM",
      "input_desc": [
        {
          "format": "ND",
          "shape": [16, 16],
          "type": "float16"
        },
        {
          "format": "ND",
          "shape": [16, 16],
          "type": "float16"
        },
        {
          "format": "ND",
          "shape": [16, 16],
          "type": "float16"
        },
        {
          "format": "ND",
          "shape": [],
          "type": "float16"
        },
        {
          "format": "ND",
          "shape": [],
          "type": "float16"
        }
      ],
      "output_desc": [
        {
          "format": "ND",
          "shape": [16, 16],
          "type": "float16"
        }
      ],
      "attr": [
      {
        "name": "transpose_a",
        "type": "bool",
        "value": false
      },
      {
        "name": "transpose_b",
        "type": "bool",
        "value": false
        }
      ]
    }
    ]
  2. format为NCHW:
    [
     {
       "op": "Conv2D",  
       "input_desc": [     
         {        
           "format": "NCHW",      
           "shape": [1, 3, 16, 16],     
           "type": "float16"     
         },      
         {       
           "format": "NCHW",       
           "shape": [3, 3, 3, 3],        
           "type": "float16"       
         }     
       ],    
       "output_desc": [     
         {     
           "format": "NCHW",        
           "shape": [1, 3, 16, 16],     
           "type": "float16"      
         }    
       ],   
       "attr": [      
           {       
             "name": "strides",       
             "type": "list_int",       
             "value": [1, 1, 1, 1]    
           },     
           {       
             "name": "pads",      
             "type": "list_int",      
             "value": [1, 1, 1, 1]     
           },      
           {        
             "name": "dilations",      
             "type": "list_int",     
             "value": [1, 1, 1, 1]    
           }  
       ]  
     } 
     ]
  3. 多组算子Json文件配置。
    如果Json文件配置了多组算子,则模型转换完成后,会生成多组算子对应的.om离线模型文件,分别以序号0_xx,1_xx,...形式呈现。如下配置文件只是样例,请根据实际情况进行修改。
    [
      {
        "op": "MatMul",
        "input_desc": [
          {
            "format": "ND",
            "shape": [
              16,
              16
            ],
            "type": "float16"
          },
          ...
        ],
        "output_desc": [
          {
            "format": "ND",
            "shape": [
              16,
              16
            ],
            "type": "float16"
          }
        ],
        "attr": [
          {
            "name": "alpha",
            "type": "float",
            "value": 1.0
          },
         ...
        ]
      },
      {
        "op": "MatMul",
        "input_desc": [
          {
            "format": "ND",
            "shape": [
              256,
              256
            ],
            "type": "float16"
          },
         ...
        ],
        "output_desc": [
          {
            "format": "ND",
            "shape": [
              256,
              256
            ],
            "type": "float16"
          }
        ],
        "attr": [
          {
            "name": "alpha",
            "type": "float",
            "value": 1.0
          },
          ...
        ]
      }
    ]

Json文件由OpDesc的数组构成,参数解释如下:

表1 OpDesc参数说明

属性名

类型

说明

是否必填

op

string

算子类型。

input_desc

TensorDesc数组

算子输入描述。

output_desc

TensorDesc数组

算子输出描述。

attr

Attr数组

算子属性。

表2 TensorDesc数组参数说明

属性名

类型

说明

是否必填

format

string

Tensor的排布格式,配置为算子原始框架支持的format。

支持的format如下:

  • NCHW
  • NHWC
  • ND:表示支持任意格式。
  • NC1HWC0:华为自研的5维数据格式。其中,C0与微架构强相关,该值等于cube单元的size,例如16;C1是将C维度按照C0切分:C1=C/C0, 若结果不整除,最后一份数据需要padding到C0。
  • FRACTAL_Z:卷积的权重的格式。
  • FRACTAL_NZ:华为自研的分形格式,在cube单元计算时,输出矩阵的数据格式为NW1H1H0W0。整个矩阵被分为(H1*W1)个分形,按照column major排布,形状如N字形;每个分形内部有(H0*W0)个元素,按照row major排布,形状如z字形。考虑到数据排布格式,将NW1H1H0W0数据格式称为Nz格式。其中,H0,W0表示一个分形的大小,示意图如下所示:

type

string

Tensor的数据格式,支持的type如下:

  • bool
  • int8
  • uint8
  • int16
  • uint16
  • int32
  • uint32
  • float16
  • float
  • double

shape

int数组

Tensor的shape,例如[1, 224, 224, 3]。

name

string

Tensor的名称。

如果算子的输入为动态输入,则需要设置该字段。如ConcatD算子在算子原型中,其动态输入定义为: DYNAMIC_INPUT(input_values, …),则此处需要设置为”input_values0”, “input_values1”,…。

表3 Attr数组参数说明

属性名

类型

说明

是否必填

name

string

属性名。

type

string

属性值的类型,支持的类型有:

  • bool
  • int
  • float
  • string
  • list_bool
  • list_int
  • list_float
  • list_string
  • list_list_int

value

由type的取值决定

属性值,根据type不同,属性值不同:

  • bool: true/false
  • int: 10
  • float: 1.0
  • string: “NCHW”
  • list_bool: [false, true]
  • list_int: [1, 224, 224, 3]
  • list_float: [1.0, 0.0]
  • list_string: [“str1”, “str2”]
  • list_list_int: [[1, 3, 5, 7], [2, 4, 6, 8]]

分享:

    相关文档

    相关产品

close