ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Yi 模型 4-bit 量化实战:基于 AutoAWQ 的激活感知权重量化完整指南

Yi 模型 4-bit 量化实战:基于 AutoAWQ 的激活感知权重量化完整指南 Yi 模型 4-bit 量化实战基于 AutoAWQ 的激活感知权重量化完整指南【免费下载链接】YiA series of large language models trained from scratch by developers 01-ai项目地址: https://gitcode.com/GitHub_Trending/yi/Yi本指南以 Yi-1.5-6B-Chat 为例完整讲解如何在当前 Yi 开源仓库体系中用 AutoAWQ 完成 4-bit 量化从环境版本兼容检查、量化配置项解析、模型加载与保存到用 transformers 直接加载量化产物进行推理。读完本文你可以将一张普通消费级显卡能承载的模型规模扩大数倍并掌握仓库中 quant_autoawq.py 与 eval_quantized_model.py 两个官方脚本的完整用法。AWQ 量化原理速览AutoAWQ 是一款易于使用的 4-bit 量化模型软件包。与原文档口径一致与 FP16 相比AutoAWQ 可将模型推理速度提高约 3 倍并将内存需求降低约 3 倍。需要说明的是这一数字是 AutoAWQ 官方给出的典型性能表述实际加速比与显存收益会随模型规模、batch 大小、GPU 架构是否支持 INT4 算子加速而浮动。AutoAWQ 的核心是实现了激活感知权重量化Activation-aware Weight QuantizationAWQ算法量化过程不再只盯着权重分布而是同时观察激活值的分布识别出对模型输出影响最大的重要权重通道对这些通道在量化时予以保护保留更高精度或缩放补偿从而在 INT3/INT4 的低比特条件下显著缓解精度损失。AWQ 属于训练后量化Post-Training QuantizationPTQ无需重新训练模型这是它能快速落地到 Yi 等开源模型的关键。仓库的 quantization/awq/README.md 同样确认了这一技术定位并指出Yi 模型无需太多额外工作即可完成 AWQ 量化Yi models can be AWQ quantized without a lot of efforts。准备工作确认演示资源与官方基线本次所有演示均以Yi-1.5-6B-Chat作为示例模型。原文档给出了该演示环境的显存与硬盘占用情况| 模型 | 显存使用 | 硬盘占用 | |--|------|-------| | Yi-1.5-6B-Chat | 6G | 24.5G |该表为原文档演示环境的实测值显存占用会因加载精度、上下文长度、是否开启 KV Cache 优化等浮动。作为横向参考主仓库 README.md 中给出了官方模型的部署资源基线FP16 的Yi-6B-Chat最小显存要求约 15 GB而 AWQ 量化后的Yi-6B-Chat-4bits最小显存仅约 4 GBbatch1 时约 4 GB、batch4 时约 5 GB——量化对部署门槛的降低非常直观。值得一提的是官方早已把 AWQ 量化的成果内置到模型体系中在 README.md 的发布记录中明确提到Chat 模型发布时同时提供了两个由 AWQ 量化的 4-bit 模型Yi-34B-Chat-4bits、Yi-6B-Chat-4bits。也就是说如果你不想自己动手量化可以直接下载官方 4-bit 模型而本指南则带你完整复现这一量化过程。环境安装AutoAWQ 的版本兼容检查AWQ 的版本兼容问题比较容易出错因此安装前首先要确认本机 torch 与 CUDA 的版本import torch print(torch.__version__)同时检查 CUDA 可用性确认当前环境确实能看到 GPUprint(torch.cuda.is_available()) print(torch.cuda.get_device_name(0))方式一pip 安装CUDA ≥ 12.1如果本机 CUDA 版本满足 12.1可直接使用 pip 安装pip install autoawq安装完成后可运行下方验证代码确认 AutoAWQ 能正常导入import awq from awq import AutoAWQForCausalLM print(AutoAWQ is ready.)方式二源码安装CUDA 11.8 / ROCm 5.6 / ROCm 5.7对于CUDA 11.8、ROCm 5.6 和 ROCm 5.7环境官方推荐从源码进行安装git clone https://github.com/casper-hansen/AutoAWQ.git cd AutoAWQ pip install -e .从源码安装会基于本机实际的 CUDA/ROCm 环境现场编译内核算子因此能够覆盖 pip 预编译包暂未提供的平台组合。安装过程中若遇到编译报错请优先核对 torch 版本与 CUDA 工具链的匹配关系。加载模型从预训练权重到量化入口AutoAWQ 完全兼容 transformers你可以直接粘贴 Hugging Face 上的模型路径也可以把模型路径替换为本地已经下载好的模型或你已经微调好的模型。from awq import AutoAWQForCausalLM from transformers import AutoTokenizer # model_path 是模型的路径这里从 Hugging Face 加载 Yi 模型 # 如果你有已经微调好的 Yi 模型同样直接替换 model_path 即可 model_path 01-ai/Yi-1.5-6B-Chat # quant_path 为量化后模型的保存路径 quant_path Yi-1.5-6B-Chat-awq quant_config { zero_point: True, q_group_size: 128, w_bit: 4, version: GEMM } # 加载模型和分词器 model AutoAWQForCausalLM.from_pretrained( model_path ) tokenizer AutoTokenizer.from_pretrained( model_path, trust_remote_codeTrue )其中quant_config是决定量化效果的核心配置四个关键参数的作用如下| 配置项 | 示例值 | 含义与影响 | |--|--|--| |zero_point|True| 是否启用零点量化Zero Point Quantization。开启后会在量化区间内加入零点偏移对非对称分布如激活值/权重常见分布更友好通常建议保持True| |q_group_size|128| 量化分组大小。权重按每 128 个元素为一组共享同一套缩放/零点参数组越小精度越高但存储开销与计算开销越大128是精度与体积兼顾的常用默认值 | |w_bit|4| 权重量化位宽。4即 INT4是 AWQ 的主打配置如需更高精度可尝试8体积约翻倍 | |version|GEMM| 反量化计算内核版本。GEMM适合多数通用 GPU部分场景可切换GEMV逐行向量乘以优化小 batch / 单请求延迟 |执行量化补齐文档缺失的关键调用需要特别指出原文档在加载模型之后直接进入保存模型省略了真正执行量化的一步。在from_pretrained之后、save_quantized之前必须调用model.quantize()才会真正触发 AWQ 算法。仓库中的官方脚本 quant_autoawq.py 给出了完整的调用链quant_config { zero_point: True, q_group_size: args.group_size, w_bit: args.bits, } # Quantize model.quantize(tokenizer, quant_configquant_config) # Save quantized model model.save_quantized(args.output_dir, safetensorsTrue) tokenizer.save_pretrained(args.output_dir)可以看到quantize()需要把tokenizer一并传入——因为 AWQ 是激活感知算法需要利用 tokenizer 构造校准数据calibration data来统计激活值分布从而识别重要通道。这也是为什么在加载阶段必须同时准备好 tokenizer。手动操作时完整的量化-保存流程为# 使用上面加载好的 model 与 tokenizer执行量化 model.quantize(tokenizer, quant_configquant_config) # 保存模型 model.save_quantized(quant_path) tokenizer.save_pretrained(quant_path) print(fModel is quantized and saved at {quant_path})save_quantized会把量化权重与量化参数缩放、零点、分组信息一并写入quant_path目录并保留与 transformers 兼容的模型结构后续可直接被AutoModelForCausalLM加载。仓库脚本中使用了safetensorsTrue建议同样开启以获得更安全、更高效的权重序列化格式。命令行方式仓库官方量化脚本除了在 Python 中手动编写流程仓库还提供了开箱即用的命令行脚本 quant_autoawq.py。其内部用 argparse 暴露了以下参数| 参数 | 默认值 | 说明 | |--|--|--| |--model|01-ai/Yi-6b| 预训练模型路径本地路径或 Hugging Face 模型名 | |--output_dir| 必填 | 量化输出目录 | |--trust_remote_code| 关闭 | 是否信任远程代码Yi 系列模型建议开启 | |--bits|4| 量化位宽 | |--group_size|128| 量化分组大小 |对应 quantization/awq/README.md 中的运行示例python quantization/awq/quant_autoawq.py \ --model 01-ai/Yi-1.5-6B-Chat \ --output_dir Yi-1.5-6B-Chat-awq \ --bits 4 \ --group_size 128 \ --trust_remote_code该脚本与手写流程完全等价加载 tokenizer带trust_remote_code与模型 → 组装quant_config→model.quantize(tokenizer, quant_configquant_config)→model.save_quantized(..., safetensorsTrue)→ 保存 tokenizer见 quant_autoawq.py。保存与分发本地目录与云盘同步量化完成后quant_path目录即为完整的可分发模型。若在 Colab 等云端环境运行同样也可以直接将模型挂载到云盘上便于更快速方便地下载与共享from google.colab import drive import shutil # 挂载 Google 云端硬盘 drive.mount(/content/drive) # 将文件或文件夹同步到云端硬盘的指定路径 # 假设你想要同步的文件或文件夹位于 Colab 的当前工作目录下 # 并且你想要将其同步到云端硬盘的 MyDrive/Yi-1.5-6B-Chat-awq 文件夹中 # 定义本地文件或文件夹的路径 local_path Yi-1.5-6B-Chat-awq # 定义云端硬盘的目标路径 drive_path /content/drive/MyDrive/Yi-1.5-6B-Chat-awq # 同步操作使用 copytree shutil.copytree(local_path, drive_path) print(f文件夹{local_path}已同步到{drive_path}。)同步完成后量化模型即可被任何 transformers 环境直接消费也可以进一步上传到模型平台托管。使用量化后的模型transformers 直接推理量化完成后我们通过 transformers 即可直接使用量化模型无需再依赖 AutoAWQ 的加载 APIfrom transformers import AutoModelForCausalLM, AutoTokenizer # model_path quant_path model_path Yi-1.5-6B-Chat-awq tokenizer AutoTokenizer.from_pretrained(model_path, use_fastFalse) model AutoModelForCausalLM.from_pretrained( model_path, device_mapauto, torch_dtypeauto ).eval() # 提示词 messages [ {role: user, content: hi} ] input_ids tokenizer.apply_chat_template( conversationmessages, tokenizeTrue, add_generation_promptTrue, return_tensorspt ) output_ids model.generate(input_ids.to(cuda)) response tokenizer.decode(output_ids[0][input_ids.shape[1]:], skip_special_tokensTrue) print(response)这段代码里有几个值得注意的细节device_mapauto让模型自动分布到可用设备torch_dtypeauto让加载器按权重实际保存的数据类型加载apply_chat_template会使用 Yi 模型自带的对话模板拼接多轮消息add_generation_promptTrue会在末尾追加模型回复的引导 token解码时用output_ids[0][input_ids.shape[1]:]截掉输入部分只保留新生成的回复内容由于 Yi-1.5 系列依赖远程代码若该环境加载失败可在from_pretrained中补充trust_remote_codeTrue。批量评估量化模型仓库官方脚本仓库还提供了 eval_quantized_model.py 用于快速验证量化模型的生成能力。该脚本的关键实现L14-L23展示了 AWQ 专用加载 API 的典型用法model ( AutoAWQForCausalLM.from_quantized( args.model, trust_remote_codeargs.trust_remote_code, fuse_layersTrue, # 融合层加速 batch_sizeargs.batch, # 并行生成条数 ) .cuda() .eval() )运行方式对应 quantization/awq/README.md 的示例python quantization/awq/eval_quantized_model.py \ --model Yi-1.5-6B-Chat-awq \ --trust_remote_code \ --batch 4脚本会用count to 1000: 0 1 2 3作为提示以do_sampleFalse、max_new_tokens4096的配置批量生成输出结果供人工或自动化检查模型是否在量化后仍保持连贯的生成能力。参数--batch默认值为 4可据此调节并行度。量化效果的预期与部署建议综合原文档演示数据与主仓库 README.md 的官方资源表可以形成如下部署预期显存需求FP16 的 6B 级 Chat 模型最小显存约 15 GB单卡 RTX 3090/4090/A10/A30 起步而 4-bit AWQ 量化后最小显存约 4 GBRTX 3060 12 GB、RTX 4060 8 GB 即可运行硬盘占用原文档演示中 Yi-1.5-6B-Chat 的 FP16 权重占用约 24.5 GB量化后 6B 模型权重体积可压缩至 4 GB 上下6B 参数 × 0.5 字节/参数 约为 3 GB另加少量量化参数与 tokenizer 文件即压缩至约 1/6速度收益INT4 权重反量化后参与计算配合fuse_layersTrue的算子融合可显著缩短单 token 生成延迟但实际倍数取决于 GPU 是否支持高效 INT4 路径。因此量化是让 Yi-1.5-6B-Chat 这类模型降级到小显存单卡的高性价比路径本地部署、边缘推理、批量服务等场景均可直接复用本文产出的Yi-1.5-6B-Chat-awq目录。若对精度有更高要求可将w_bit调整为8重跑同一流程若追求更极致的内存收益则可进一步配合后续部署框架使用量化权重做服务化加载。延伸阅读量化目录整体入口quantization/awq/README.mdAWQ 说明与 quantization/gptq/README.md同仓库提供的 GPTQ 量化方案适用于精度敏感场景量化脚本源码quant_autoawq.py、eval_quantized_model.py主仓库中的量化章节与官方 4-bit 模型资源表README.md、README.md若你在本地仅需推理而无需自行量化可直接使用官方提供的Yi-6B-Chat-4bits由 AWQ 量化见 README.md。【免费下载链接】YiA series of large language models trained from scratch by developers 01-ai项目地址: https://gitcode.com/GitHub_Trending/yi/Yi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表