hmct.api.build_model

接口说明

HMCT提供的模型转换功能,输入一个onnx模型,经过模型转换和量化输出量化后的模型。

接口形式

def build_model( onnx_model: ModelProto, march: str, cali_data: Union[Sequence[np.ndarray], Dict[str, Sequence[np.ndarray]]], quant_config: Optional[Union[str, Dict[str, Any]]] = None, input_dict: Optional[Dict[str, Any]] = None, name_prefix: Optional[str] = None, verbose: Optional[bool] = True, ) -> ModelProto

返回值说明

输出一个量化后的onnx模型,可以用于量化模型精度评测,以及通过hbdk编译成部署模型。

参数说明

参数名类型默认值详细说明
onnx_modelModelProto必选,无默认值输入的onnx模型。
marchstr必选,无默认值计算平台。
cali_dataUnion[Sequence[np.ndarray], Dict[str, Sequence[np.ndarray]]]必选,无默认值

校准数据:

  1. 单输入模型可以通过Sequence[np.ndarray]指定校准数据。
  2. cali_data = [sample0, sample1, ...]
  3. 多输入模型需要通过Dict[str, Sequence[np.ndarray]]指定校准数据。
  4. cali_data = {'input_name0': [sample0, sample1, ...], 'input_name1': [sample0, sample1, ...]}
quant_configOptional[Union[str, Dict[str, Any]]]None

指定量化配置参数,详细的量化参数配置说明参考 量化配置

  1. 使用默认量化方法。
  2. quant_config = None
  3. 可以通过一个json文件配置量化参数。
  4. quant_config = quant_config_json_file
  5. 通过一个dict类型配置量化参数。
  6. quant_config = {'node_config' : {'Conv0', {'qtype', 'int16'}}}
input_dictOptional[Dict[str, Any]]None

根据指定的参数,修改转换后的模型输入。注意:调用者需要确保对模型的输入修改是合法的。

  1. 修改指定输入的input_shape。
  2. input_dict = {'input_name0': {'input_shape':[x,x,x,x]}}
  3. 修改指定输入的batch_size。
  4. input_dict = {'input_name0': {'input_batch': 4}}
name_prefixOptional[str]None

指定模型转换过程中生成物的保存路径。

  1. None,保存在当前目录下。
  2. 指定一个相对当前目录的路径,将转换过程中生成物保存在其中。
  3. # 保存在当前目录下,保存的文件前面带temp_前缀; name_prefix = 'temp_' # 保存在./tmp01目录下,保存的文件前面带temp_前缀; name_prefix = './tmp01/temp_'
verboseOptional[bool]Trueverbose=True/False,指定模型转换过程中是否打印详细信息。

生成物说明

生成物名称生成物说明
original_float_model.onnx原始模型转换之后的输出,该阶段的转换包括:opset、ir version转换,input_shape修改操作。
optimized_float_model.onnx模型优化阶段的输出,该阶段的转换包括:常量折叠、算子融合、无用算子删除、算子替换、算子拆分。
calibrated_model.onnx模型校准阶段的输出,该阶段的量化包括:插入校准节点,统计数据分布,计算量化参数。
ptq_model.onnx模型量化阶段的输出,该阶段的量化包括:基于指定march的量化参数调整和转换。