ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Yi 模型 GPTQ 量化实战:使用 AutoGPTQ 对 Yi-1.5-6B-Chat 进行 8-bit 量化、保存与推理

Yi 模型 GPTQ 量化实战:使用 AutoGPTQ 对 Yi-1.5-6B-Chat 进行 8-bit 量化、保存与推理 Yi 模型 GPTQ 量化实战使用 AutoGPTQ 对 Yi-1.5-6B-Chat 进行 8-bit 量化、保存与推理【免费下载链接】YiA series of large language models trained from scratch by developers 01-ai项目地址: https://gitcode.com/GitHub_Trending/yi/Yi本文以 01-ai 开源仓库中的 AutoGPTQ 量化教程 为主体讲解如何基于 GPTQ 算法对 Yi 系列模型以 Yi-1.5-6B-Chat 为例进行训练后量化PTQ覆盖环境安装、模型加载、量化超参数配置、校准数据构造、量化模型保存与推理的完整闭环并辅以仓库内 quantization/gptq 目录下的源码实现作为底层依据。读完本文你将能够独立将 Yi 模型含微调后的模型量化为 GPTQ 格式并了解如何用 HuggingFace transformers 直接加载、使用量化产物。一、AutoGPTQ 与 GPTQ 量化概述AutoGPTQ 是一个基于 GPTQ 算法的大语言模型量化工具包简单易用且提供用户友好型接口通过它可以很方便地对 Yi 系列模型进行量化。GPTQGenerative Pre-trained Transformer Quantization是一种训练后量化Post-Training Quantization, PTQ方法无需重新训练仅借助少量校准数据即可把模型权重从 FP16 压缩到更低位宽从而在显著降低显存占用的同时保留模型精度并带来潜在的推理加速。仓库中 GPTQ 量化说明 也明确指出Yi 模型可以“毫不费力”地完成 GPTQ 量化官方同时提供基于 AutoGPTQ 的量化脚本与基于 transformers 的评估脚本。以 Yi-1.5-6B-Chat 为例使用 AutoGPTQ 完成 8-bit 量化后的资源占用情况如下量化前后磁盘占用差异明显显存需求也随之下降| 模型 | 显存使用 | 硬盘占用 | |--|------|------| | Yi-1.5-6B-Chat | 7G | 27G |说明上表为教程作者在 8-bitbits8量化配置下实测的资源占用具体数值会随量化位数、上下文长度max_position_embeddings、group_size以及输入 batch 大小而变化仅作参考基线。二、安装 AutoGPTQ推荐从源码安装AutoGPTQ 的官方推荐安装方式是直接从源码安装以获得与当前 CUDA / PyTorch 环境最匹配的编译产物git clone AutoGPTQ 源码仓库 cd AutoGPTQ pip install .安装完成后即可在 Python 中导入auto_gptq包使用AutoGPTQForCausalLM与BaseQuantizeConfig两个核心类。三、加载待量化模型AutoGPTQ 与 HuggingFace transformers 生态完全兼容因此加载模型的方式与常规 transformers 用法一致。既可以加载 HuggingFace 上发布的 Yi 原始权重也可以直接替换model_path为本地下载好的模型或已经微调好的 Yi 模型——量化流程与加载流程完全复用from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig from transformers import AutoTokenizer # 配置量化超参数 # 加载分词器和模型 model_path 01-ai/Yi-1.5-6B-Chat quant_path Yi-1.5-6B-Chat-GPTQ quantize_config BaseQuantizeConfig( bits8, # 量化为 8-bit 模型 group_size128, # 推荐 128 damp_percent0.01, desc_actFalse, # 设为 False 可以显著提升推理速度 ) tokenizer AutoTokenizer.from_pretrained(model_path) model AutoGPTQForCausalLM.from_pretrained(model_path, quantize_config)量化超参数逐项解读bits量化位宽。教程示例使用bits88-bit也可按需设为 4 以进一步压缩模型体积。仓库脚本 quant_autogptq.py 中默认值为--bits 4与教程的 8-bit 演示互为补充可根据精度与资源的权衡自行选择。group_size权重分组的通道数推荐 128。它控制量化尺度scale/zero point的计算粒度分组越小量化误差越小但存储开销与计算复杂度越高。damp_percentHessian 矩阵对角线上加入的阻尼项比例用于稳定矩阵求逆过程默认约 0.01 即可通常无需调整。desc_actdescending activation是否对激活值按重要性降序排列后再量化。设为False可以显著提升推理速度代价是极端离群值场景下的少量精度损失若更看重精度可设为True。四、构造校准数据并执行量化GPTQ 是训练后量化方法需要少量校准样本来估计权重重要性Hessian 信息。model.quantize(examples)中样本的数据类型应为List[Dict]且字典的键有且仅有input_ids和attention_mask——这是本步骤最容易出错的地方务必核对数据格式。以下示例演示如何把一条 Yi 的 Chat 格式对话role/content通过apply_chat_template转成文本再分词得到量化所需的输入import torch examples [] messages [ {role: user, content: hi}, {role: assistant, content: Hello! Its great to see you today. How can I assist you} ] text tokenizer.apply_chat_template(messages, tokenizeFalse, add_generation_promptFalse) model_inputs tokenizer([text]) input_ids torch.tensor(model_inputs.input_ids[:max_len], dtypetorch.int) examples.append(dict(input_idsinput_ids, attention_maskinput_ids.ne(tokenizer.pad_token_id))) model.quantize(examples)几个实操要点apply_chat_template(..., add_generation_promptFalse)生成不含生成提示符的完整对话文本确保校准数据贴近真实推理输入分布上例中max_len需要预先定义为截断长度如max_len 512用于控制单条校准样本的序列长度防止校准阶段显存溢出attention_mask通过input_ids.ne(tokenizer.pad_token_id)从input_ids直接推导无需额外构造实际应用中可准备多条多样化的对话样本组成examples列表样本越有代表性量化后的精度损失通常越小。五、保存量化模型量化完成后将模型与分词器一并保存到本地目录后续即可随时加载使用。使用use_safetensorsTrue以 safetensors 格式安全存储权重model.save_quantized(quant_path, use_safetensorsTrue) tokenizer.save_pretrained(quant_path)执行后Yi-1.5-6B-Chat-GPTQ目录下即为完整的量化模型产物含量化配置、safetensors 权重与分词器文件可以直接分发或部署。六、加载量化模型进行推理使用AutoGPTQForCausalLM.from_quantized从量化目录加载模型配合 transformers 的AutoTokenizer即可完成对话式推理from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig from transformers import AutoTokenizer, GenerationConfig quantized_model_dir Yi-1.5-6B-Chat-GPTQ tokenizer AutoTokenizer.from_pretrained(quantized_model_dir, use_fastTrue, trust_remote_codeTrue) model AutoGPTQForCausalLM.from_quantized(quantized_model_dir, device_mapauto, use_safetensorsTrue, trust_remote_codeTrue) output tokenizer.decode(model.generate( **tokenizer(|im_start|user Hi!|im_end| |im_start|assistant, return_tensorspt).to(model.device), max_new_tokens512)[0] ) print(output)要点说明device_mapauto让 transformers 自动将各层分配到可用设备显存有限时可自动卸载到 CPUtrust_remote_codeTrue用于加载 Yi 这类依赖远程代码remote code的模型配置与实现提示词采用 Yi 系列 Chat 模型的官方模板格式|im_start|user ...|im_end| |im_start|assistant与模型预训练时的对话格式保持一致可保证生成质量。七、仓库源码佐证脚本化量化与快速验证除了教程中的纯 API 流程仓库 quantization/gptq 目录还提供了两条可直接运行的命令行脚本可作为批量量化和验证的参考实现。7.1 一键量化脚本 quant_autogptq.pyquant_autogptq.py 封装了完整量化流程命令行用法python quant_autogptq.py --model /base_model \ --output_dir /quantized_model --bits 4 --group_size 128 --trust_remote_code从源码实现可以看出几个与教程互补的关键细节使用 transformers 的GPTQConfig而非BaseQuantizeConfig并内置datasetwikitext2作为校准数据集、disable_exllamaFalse启用 ExLlama 内核以加速推理加载配置后强制model_config.max_position_embeddings 4096代码注释明确说明这是为了避免量化阶段 OOM——与大序列校准样本导致显存超限的常见问题直接相关参数解析支持--bits默认 4、--group_size默认 128、--trust_remote_code与教程中的超参数一一对应模型以safe_serializationTrue保存与教程的use_safetensorsTrue行为一致。7.2 量化模型快速验证脚本 eval_quantized_model.py量化是否可用、精度是否符合预期可通过 eval_quantized_model.py 快速验证python eval_quantized_model.py --model /quantized_model --trust_remote_code该脚本加载量化模型后device_mapcuda:0、use_safetensorsTrue以count to 1000: 0 1 2 3为提示词、do_sampleFalse贪婪解码、max_new_tokens4096生成长序列文本从而直观检验量化模型在长文本生成任务上的连贯性与能力。它可以作为量化质量回归的简易手段配合教程中的对话式推理一起使用。八、使用注意事项小结数据格式严格性model.quantize(examples)要求List[Dict]字典只能包含input_ids与attention_mask两个键多余键会导致报错长序列显存量化阶段同样消耗显存建议控制校准样本长度如 5121024 token仓库脚本通过限制max_position_embeddings4096规避 OOM自定义流程时可参考此思路Chat 模板推理时必须使用 Yi 的|im_start|...|im_end|对话模板或apply_chat_template否则模型输出质量会明显下降微调模型复用无论是 HuggingFace 官方权重还是本地微调产物只需替换model_path即可走完全部量化流程无需改动任何代码精度与速度权衡desc_actFalse换推理速度、bits越低体积越小具体取舍应结合部署环境显存、延迟要求与精度评测结果决定仓库提供了 eval_quantized_model.py 帮助做量化前后对比验证。至此你已经掌握从零开始用 AutoGPTQ 量化 Yi 系列模型的完整链路安装 → 加载 → 配置超参数 → 构造校准数据 → 量化 → 保存 → 推理验证并可结合仓库 quantization/gptq 下的脚本实现工程化量产与验证。【免费下载链接】YiA series of large language models trained from scratch by developers 01-ai项目地址: https://gitcode.com/GitHub_Trending/yi/Yi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表