Rspress

# #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_model | ModelProto | 必选，无默认值 | 输入的onnx模型。
march | str | 必选，无默认值 | 计算平台。
cali_data | Union[Sequence[np.ndarray], Dict[str, Sequence[np.ndarray]]] | 必选，无默认值 | 校准数据： 单输入模型可以通过Sequence[np.ndarray]指定校准数据。 `cali_data = [sample0, sample1, ...]` 多输入模型需要通过Dict[str, Sequence[np.ndarray]]指定校准数据。 `cali_data = {'input_name0': [sample0, sample1, ...], 'input_name1': [sample0, sample1, ...]}`
quant_config | Optional[Union[str, Dict[str, Any]]] | None | 指定量化配置参数，详细的量化参数配置说明参考 量化配置。 使用默认量化方法。 `quant_config = None` 可以通过一个json文件配置量化参数。 `quant_config = quant_config_json_file` 通过一个dict类型配置量化参数。 `quant_config = {'node_config' : {'Conv0', {'qtype', 'int16'}}}`
input_dict | Optional[Dict[str, Any]] | None | 根据指定的参数，修改转换后的模型输入。注意：调用者需要确保对模型的输入修改是合法的。 修改指定输入的input_shape。 `input_dict = {'input_name0': {'input_shape':[x,x,x,x]}}` 修改指定输入的batch_size。 `input_dict = {'input_name0': {'input_batch': 4}}`
name_prefix | Optional[str] | None | 指定模型转换过程中生成物的保存路径。 None，保存在当前目录下。 指定一个相对当前目录的路径，将转换过程中生成物保存在其中。 `# 保存在当前目录下，保存的文件前面带temp_前缀； name_prefix = 'temp_' # 保存在./tmp01目录下，保存的文件前面带temp_前缀； name_prefix = './tmp01/temp_'`
verbose | Optional[bool] | True | verbose=True/False，指定模型转换过程中是否打印详细信息。

## #生成物说明

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

页面目录