---
title: save_model
description: "| 产品 | 是否支持 |"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/devaids/amct/atlasamct_16_0274.html
sourcePath: /source/zh/canncommercial/900/devaids/amct/atlasamct_16_0274.html
indexId: dd2cebaf6cddfa148e24bb121317025b0bbda6979a72ac1f5457183a813df33865
---
# save_model

#### 产品支持情况

| 产品 | 是否支持 |
| --- | --- |
| Atlas 350 加速卡 | x |
| Atlas A3 训练系列产品 / Atlas A3 推理系列产品 | x |
| Atlas A2 训练系列产品 / Atlas A2 推理系列产品 | x |
| Atlas 200I/500 A2 推理产品 | √ |
| Atlas 推理系列产品 | √ |
| Atlas 训练系列产品 | √ |


#### 功能说明

训练后量化接口，根据修改后的图结构，插入AscendQuant、AscendDequant等算子，将模型保存为可以做推理的文件，支持保存为可在Caffe环境下做精度仿真的fake_quant模型，和可在AI处理器上做推理的deploy模型。


#### 函数原型

```
save_model(graph, save_type, save_path)
```


#### 参数说明

| 参数名 | 输入/输出 | 说明 |
| --- | --- | --- |
| graph | 输入 | 含义：经过quantize\_model接口修改后的图结构。 数据类型：工具自定义的数据结构Graph |
| save\_type | 输入 | 含义：保存模型的类型： Fakequant表示存储精度仿真模型。 Deploy表示存储可在AI处理器做推理的部署模型。 Both表示两种模型都进行存储。 数据类型：string |
| save\_path | 输入 | 含义：模型存放路径。该路径需要包含模型名前缀，例如./quantized\_model/\*model。 数据类型：string |


#### 返回值说明

无


#### 约束说明

- 在网络推理的batch数目达到batch_num后，再调用save_model接口，否则量化因子不正确，量化结果不正确。

- 由于数据格式转换，生成的部署模型中存储的量化因子（scale/offset）与计算出来的量化因子，数值上不完全一致，但不影响精度。
- scale_offset_record_file中必须有所有量化层的量化因子，否则会报错，即  quantize_model
中的modified_model_file与modified_weights_file必须在Caffe环境中完成batch_num次推理。


#### 调用示例

```
from amct_caffe import save_model

# 在Caffe环境中对修改后的模型做batch_num次推理，以完成量化
run_caffe_model(modified_model_file, modified_weights_file, batch_num)

# 插入API，将量化的模型存为prototxt模型文件以及caffemodel权重文件，在./quantized_model中生成五个文件：model_fake_quant_model.prototxt，model_fake_quant_weights.caffemodel,model_deploy_model.prototxt，model_deploy_weights.caffemodel，model_quant.json。
save_model(graph=graph,
           save_type="Both",
           save_path="./quantized_model/model")
```

落盘文件说明：

- 精度仿真模型文件：一个模型定义文件，一个模型权重文件，文件名中包含fake_quant；模型可在Caffe环境下做推理实现量化精度仿真。
- 部署模型文件：一个模型定义文件，一个模型权重文件，文件名中包含deploy；模型经过ATC工具转换后可部署到AI处理器上。
- 量化信息文件：该文件记录了AMCT插入的量化算子位置以及算子融合信息，用于量化后的模型进行精度比对使用。

重新执行量化时，该接口输出的上述文件将会被覆盖。
