全部产品
云市场

优化任务高级配置说明

更新时间:2019-12-12 23:36:33

image.png
除了直接配置优化层级+GPU型号后立即开始优化任务,您还可以在如上图文本框内输入待优化模型的高级配置JSON。通常来说,已知的信息越多,越有利于提升Blade的优化效果。您可以通过Blade给定的字段在高级配置输入框内输入有关您模型的详细信息。

以下是一个虚构模型的高级配置JSON示例。

  1. {
  2. "inputs": ["input0", "input1"],
  3. "input_shapes": [["[1,70]*[1,15]", "copy:0"], [100*20, 100*20]],
  4. "input_ranges": [["[0,1]", "[0,64999]"]],
  5. "outputs": ["fusion/Sigmoid", "fusion/div_6"],
  6. "calibration_dataset": "calibration_dataset.npy"
  7. }

接下来,我们将详细解释各合法字段及代表的含义。
以下字段均有默认值,可缺省。

“enable_fp16” “enable_fp16” 辅助您设置是否启用FP16优化。缺省值为true。也就是说,Blade在默认情况下会尝试FP16的优化,在输出精度和加速效果都符合预期的情况下才会保留。
“caffemodel” 如果您希望优化的模型是Caffe模型,可以通过该字段来指定”caffemodel”的文件名(caffemodel应当和模型打包在一起)。
“inputs” 输入节点名称列表。
“input_shapes” 该字段用于指定输入数据尺寸。请注意,这里必须是一个列表的列表。
外层列表中的每个元素也是一个内层列表,内层列表指定模型的一组合法输入尺寸。内层列表中元素的个数等于”inputs”字段列表元素的个数。
内存列表每个元素既可以代表确定的shape,例如”[82242243]”。也可以代表不确定的shape,例如”[10-1]”(此处-1代表未知)。还可以指定一个区间的shape,例如”[1,70][1,15]”(此处表示第一个维度从1到70都是合法的取值,第二个维度从1到15都是合法的取值,请注意这里采用闭区间表示)。
对于string类型的输入,您也可以标定区间,例如“[‘a’,’k’]”,表示从’a’到’k’都是合法的输入。
特别的,您还可以以”copy:i”的方式来表示某个输入的shape始终和第i个输入保持一致(0-based numbering)。例如上述例子中的”copy:0”即表示”input1”和shape始终和”input0”一致,当”input0”的shape是[45,12]时,”input1”的shape也是[45,12]。如果您在”input1”的位置也写成”[1,72]
[1,17]”,则无法表示“两者一致”的约束关系,我们在优化时会认为”input0”和”input1”的一组”[45,12]”和”[36,8]” shape也是合法的。这可能和您的初衷是相悖的。
“input_ranges” 该字段用于指定输入数据的取值范围。
和”input_shapes”类似,这里也必须是一个列表的列表。每个内层列表对应”input_shapes”中对应的内层列表。内层列表中每个元素则对应”inputs”列表中相应的元素。内层列表的元素是类似”[a,b]”这样的字符串,表示取值范围从a到b(闭区间)。例如,某个输入是一个mask,那么对应的取值范围则是”[0,1]”。
“outputs” 输出节点名称列表。
“calibration_dataset” 该字段用以指定校正数据集(校正数据集应当和模型打包在一起)。
校正数据集需要以numpy array的方式保存为”.npy”文件。保存的内容是一个字典,key是模型input tensor的名称(如”Placeholder:0”),value则是供量化使用的calibration数据。
当您的输入模型是Keras或者Tensorflow且优化层级为”o2”时,该字段可以缺省。缺省的情况下Blade将尝试在线量化(无需校正数据集)。
当您的输入模型是Caffe或者Onnx且优化层级为”o2”时,该字段不可缺省。
“ignore_dynamic_shape” 当字段为true时,表明您的模型在部署时输入数据的shape虽然有可能是不固定的,但是仅限于有限几组shape变化的可能(例如最高不超过数千组组合)。
该信息可以帮助我们在后续的版本中为您启用PAI-TAO编译优化技术,帮助您获得更好的模型优化效果。