lowbit算法稀疏量化场景
lowbit算法稀疏量化场景导入代码样例:
# 导入相关依赖
import torch
import torch_npu # 若需要cpu上进行量化,可忽略此步骤
import torch.utils.data
from transformers import AutoTokenizer, AutoModel
# for local path
tokenizer = AutoTokenizer.from_pretrained(
pretrained_model_name_or_path='./chatglm2',
trust_remote_code=True
)
model = AutoModel.from_pretrained(
pretrained_model_name_or_path='./chatglm2',
trust_remote_code=True,
torch_dtype=torch.float32
).npu() # 如果需要在npu上进行多卡量化,需要先参考前提条件进行配置,并配置以下参数device_map='auto', torch_dtype为当前使用模型的默认数据类型;在npu上进行量化时,单卡校准需将模型移到npu上model = model.npu(),多卡校准时不需要
# 准备校准数据,请根据实际情况修改
calib_list = ["中国的首都在哪里?",
"请做一首诗歌:",
"我想要学习python,该怎么学习?",
"请帮我写一篇关于大模型推理优化的任职报告:",
"中国最值得去的几个景点"]
#获取校准数据函数定义
def get_calib_dataset(tokenizer, calib_list):
calib_dataset = []
for calib_data in calib_list:
inputs = tokenizer([calib_data], return_tensors='pt').to(model.device)
print(inputs)
calib_dataset.append([inputs.data['input_ids'], inputs.data['attention_mask']])
return calib_dataset
dataset_calib = get_calib_dataset(tokenizer, calib_list) #校准数据获取
# 稀疏量化配置,请根据实际情况修改
from msmodelslim.pytorch.llm_ptq.llm_ptq_tools import Calibrator, QuantConfig # 导入稀疏量化配置接口
# 使用QuantConfig接口,配置稀疏量化参数,并返回配置实例
quant_config = QuantConfig(
w_bit=4,
disable_names=['transformer.encoder.layers.0.self_attention.query_key_value','transformer.encoder.layers.0.self_attention.dense', 'transformer.encoder.layers.0.mlp.dense_h_to_4h'],
dev_type='npu', # 在cpu进行量化时,需要配置参数dev_type='cpu',并取消参数dev_id=model.device.index的配置
dev_id=model.device.index,
act_method=2,
mm_tensor=False,
sigma_factor=3.0
do_smooth=False,
is_lowbit=True,
use_sigma=True
)
#使用Calibrator接口,输入加载的原模型、稀疏量化配置和校准数据,定义校准
calibrator = Calibrator(model, quant_config, calib_data=dataset_calib, disable_level='L0')
calibrator.run() #使用run()执行量化
calibrator.save('./quant_weight') #使用save()保存模型量化参数,请根据实际情况修改路径
print('Save quant weight success!')
父主题: 量化及稀疏量化场景导入代码样例