2026/1/24 9:56:06
网站建设
项目流程
凡科做网站给后台的吗,怎么搜索关键词,网页设计素材分析,wordpress防火墙一、背景介绍
ModeSlim 是什么#xff1f;
ModeSlim 是昇腾提供的模型量化压缩工具。
ModeSlim 能做什么#xff1f;
它可以对深度学习模型进行轻量化处理#xff0c;核心目标是在保证模型性能#xff08;如精度#xff09;基本不受显著影响的前提下#xff0c;减小模…一、背景介绍ModeSlim 是什么ModeSlim 是昇腾提供的模型量化压缩工具。ModeSlim 能做什么它可以对深度学习模型进行轻量化处理核心目标是在保证模型性能如精度基本不受显著影响的前提下减小模型体积、降低计算复杂度从而提升模型的部署效率和运行速度尤其适用于资源受限的场景。官方仓库地址GitCode - 全球开发者的开源社区,开源代码托管平台二、依赖环境硬件要求Atlas 800I A2/ Atlas 800T A2、Atlas 300I Duo 推理卡OS版本openEuler 22.03 LTSPython版本python3.10/python3.11CANN版本8.2.RC2基础配套镜像昇腾镜像仓库详情三、具体步骤开启二进制编译可选如果使用的是 npu 进行量化可以选择开启二进制编译从而避免在线编译算子torch.npu.set_compile_mode(jit_compileFalse)option{}option[NPU_FUZZY_COMPILE_BLACKLIST]ReduceProdtorch.npu.set_option(option)模型加载将模型加载到 npu 上model_path/data/Qwen2.5-72B-Instruct/modelAutoModelForCausalLM.from_pretrained(pretrained_model_name_or_pathmodel_path,torch_dtypetorch.bfloat16,trust_remote_codeTrue,device_mapauto,max_memory{0:0GiB,1:0GiB,2:0GiB,3:0GiB,4:25GiB,5:25GiB,6:25GiB,7:25GiB}).eval()获取校准数据校准数据建议选取业务数据中场景比较普适的子数据集。 例如对于ceval场景选择teacher_qualification.jsonl。 对于中英文混合场景需要均衡输入中英文数据对于代码生成类模型需要输入代码生成任务。 输入数量建议为10条-50条。def get_calib_dataset(tokenizer, calib_list,devicemodel.device): calib_dataset[]forcalib_dataincalib_list: inputstokenizer(calib_data,return_tensorspt)calib_dataset.append([inputs.data[input_ids].to(device), inputs.data[attention_mask].to(device)])returncalib_dataset# boolq数据集entry/dataset/boolq_lite/dev3.jsonlwith open(entry,r)as file: calib_setjson.load(file)dataset_calibget_calib_dataset(tokenizer, calib_set)离群值抑制AntiOutlier设置对于部分模型单独的W8A8量化精度表现效果可能较差可能需要在调用量化之前调用AntiOutlier模块进行异常值抑制通过抑制量化过程中的异常值使能后续更好的量化。m1SmoothQuant算法m2SmoothQuant升级版m3AWQ算法(适用于W8A16/W4A16)m4SmoothQuant优化算法m5CBQ算法m6Flex smooth量化算法anti_configAntiOutlierConfig(anti_methodm3,dev_typenpu,dev_idmodel.device.index)anti_outlierAntiOutlier(model,calib_datadataset_calib,cfganti_config)anti_outlier.process()配置量化参数quant_configQuantConfig(a_bit8,w_bit8,disable_namesdisable_names,dev_typenpu,dev_idmodel.device.index,act_method1,pr1.0,w_symTrue,mm_tensorFalse).fa_quant(fa_amp0)disatble_names回退层arc_method激活值量化方法1 代表 min-max 量化方式2 代表 histogram 量化方式3 代表 min-max 和 histogram 的混合量化方式执行并保存alibratorCalibrator(model, quant_config,calib_datadataset_calib,disable_levelL0)calibrator.run()calibrator.save(/data/qwen2.5-72-w8a8,save_type[safe_tensor])四、qwen2.5-72B w8a8 fa3量化代码样例importjsonimporttorchimporttorch_npufromtransformersimportAutoTokenizer,AutoModelForCausalLMfrommodelslim.pytorch.llm_ptq.anti_outlierimportAntiOutlierConfig,AntiOutlierfrommodelslim.pytorch.llm_ptq.llm_ptq_toolsimportCalibrator,QuantConfigimportjsonlines SEQ_LEN_OUT100batch_size1# 如果使用npu进行量化需开启二进制编译避免在线编译算子torch.npu.set_compile_mode(jit_compileFalse)option{}option[NPU_FUZZY_COMPILE_BLACKLIST]ReduceProdtorch.npu.set_option(option) 原始模型加载 model_path/data/Qwen2.5-72B-Instruct/modelAutoModelForCausalLM.from_pretrained(pretrained_model_name_or_pathmodel_path,torch_dtypetorch.bfloat16,trust_remote_codeTrue,device_mapauto,max_memory{0:0GiB,1:0GiB,2:25GiB,3:25GiB,4:25GiB,5:25GiB,6:25GiB,7:25GiB}).eval()tokenizerAutoTokenizer.from_pretrained(pretrained_model_name_or_pathmodel_path,trust_remote_codeTrue,device_mapauto,)tokenizer.pad_tokentokenizer.eos_token 获取校准数据 defget_calib_dataset(tokenizer,calib_list,devicemodel.device):calib_dataset[]forcalib_dataincalib_list:inputstokenizer(calib_data,return_tensorspt)calib_dataset.append([inputs.data[input_ids].to(device),inputs.data[attention_mask].to(device)])returncalib_dataset entry/dataset/boolq_lite/dev3.jsonlwithopen(entry,r)asfile:calib_setjson.load(file)dataset_calibget_calib_dataset(tokenizer,calib_set) 回退层设置 disable_names[]num_layers80disable_idx_lstlist(range(num_layers))forlayer_indexindisable_idx_lst:down_proj_namemodel.layers.{}.mlp.down_proj.format(layer_index)disable_names.append(down_proj_name) AntiOutlier:本模型无需设置离群抑制值精度即可达标 配置量化参数 quant_configQuantConfig(a_bit8,w_bit8,disable_namesdisable_names,dev_typenpu,dev_idmodel.device.index,act_method1,pr1.0,w_symTrue,mm_tensorFalse).fa_quant(fa_amp0)calibratorCalibrator(model,quant_config,calib_datadataset_calib,disable_levelL0)#disable_level设置为L0精度即可达标calibrator.run()calibrator.save(/data/qwen25-72-w8a8,save_type[safe_tensor])五、常见问题报错卡异常模型无法加载max_memory{0:“0GiB”,1:“0GiB”,2:“25GiB”,3:“25GiB”,4:“25GiB”,5:“25GiB”,6:“25GiB”,7:“25GiB”}800I A2,32G qwen2.5-72B量化最少使用六卡使用四卡时报错如下图注明昇腾PAE案例库对本文写作亦有帮助。