训练后量化过程中,用户需自行提供训练好的权重文件和一小批验证集用来矫正量化因子,调用API接口完成模型的调优过程。目前支持MindSpore框架模型的量化调优。模型量化期间,用户可手动配置参数,并使用部分数据完成对模型的校准,获取一个量化后的模型。
执行训练后量化前,需参考环境准备,完成CANN开发环境的部署及Python环境变量配置。
… target = config.device_target # init context ms.set_context(mode=ms.GRAPH_MODE, device_target=target, save_graphs=False) if target == "Ascend": device_id = int(os.getenv('DEVICE_ID')) ms.set_context(device_id=device_id) # create dataset dataset = create_dataset(dataset_path=config.data_path, do_train=False, batch_size=config.batch_size, eval_image_size=config.eval_image_size, target=target) # define net model = resnet(class_num=config.class_num) # load checkpoint param_dict = ms.load_checkpoint(config.checkpoint_file_path) ms.load_param_into_net(model, param_dict) net.set_train(False) …
from msmodelslim.mindspore.quant.ptq_quant.quantize_model import quantize_model from msmodelslim.mindspore.quant.ptq_quant.create_config import create_quant_config from msmodelslim.mindspore.quant.ptq_quant.save_model import save_model
import logging logging.getLogger().setLevel(logging.INFO) #请根据实际情况进行配置
model = get_user_network() #加载模型结构,返回模型实例 load_checkpoint(ckpt_file_path, model) #模型加载预训练参数,请根据实际情况配置
config_file = "./quant_config.json" #待生成的量化配置文件存放路径及名称,请根据实际情况配置 create_quant_config(config_file, model)
通过create_quant_config接口生成的默认配置文件,用户可以手动修改其中的配置项,以达到手动控制量化的目的。
input_data = ms.Tensor(np.random.uniform(size=[256, 3, 224, 224]), dtype=mstype.float32) #请根据实际情况配置 model_calibrate = quantize_model(config_file, model, input_data) #通过调用quantize_model接口生成的量化后的模型
若原模型包含logger,将无法对原模型进行deepcopy,影响后续量化算子的插入,用户在使用 quantize_mdoel() 接口前需删除原模型中的logger属性。
for i, data in enumerate(dataset.create_dict_iterator(num_epochs=1)): net(data['image']) if i >= 2: break
file_name = "./quantized_model" #指定量化后模型保存路径和文件名 save_model(file_name, model_calibrate, input_data, file_format="AIR") #请根据需要配置量化后模型的格式
“file_format”支持AIR、MINDIR两种格式,默认值为AIR。
python3 resnet50_quant.py