十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

OLMo 仓库中的 AutoGPTQ 快速上手:4-bit GPTQ 量化、安装与推理实战指南

OLMo 仓库中的 AutoGPTQ 快速上手:4-bit GPTQ 量化、安装与推理实战指南 OLMo 仓库中的 AutoGPTQ 快速上手4-bit GPTQ 量化、安装与推理实战指南【免费下载链接】OLMoModeling, training, eval, and inference code for OLMo项目地址: https://gitcode.com/GitHub_Trending/ol/OLMo本篇技术指南以 AutoGPTQ 官方教程 01-Quick-Start.md 为骨架结合本仓库OLMo中实际落地的一整套 GPTQ 压缩代码inference/compression展开。你将掌握如何通过 pip 快速安装auto-gptq含 Triton 加速与 CUDA 扩展构建选项、如何使用AutoGPTQForCausalLM与BaseQuantizeConfig完成量化预训练模型 → 保存 → 加载 → 推理的完整闭环以及 OLMo 仓库是如何基于这套流程定制OLMoGPTQForCausalLM类并在真实脚本中量化大模型的。一、AutoGPTQ 是什么它在 OLMo 仓库中的位置AutoGPTQ 是一套基于 GPTQ 算法、以易用 API 为核心设计目标的大语言模型量化库。它不需要你手写复杂的 Hessian 矩阵计算与逐层校准流程而是把整条用少量校准样本把 FP16 权重压缩为低比特权重的链路封装成了几个高层接口。在本仓库OLMo中AutoGPTQ 以 vendor 依赖的形式被完整收纳在 inference/compression/dependencies/AutoGPTQ上层配套了三个可以直接复用的文件run_quantization.py基于 Wikitext-2 校准数据、在单卡上完成 4-bit 量化的入口脚本olmo_gptq_class.py为 OLMo 模型定制的 GPTQ 支持类OLMoGPTQForCausalLMrun_olmo_quantization.sh接收模型路径与输出目录两个参数的一键式量化脚本。也就是说本文讲解的 AutoGPTQ 快速上手正是 OLMo 仓库中实际运行过的压缩流程的技术底座。二、快速安装pip 一行命令以及 CUDA 扩展的开关从 v0.0.4 版本开始auto-gptq可以直接通过 PyPI 使用pip安装pip install auto-gptq2.1 可选依赖Triton 加速与旧版 Transformers 的 Llama 支持AutoGPTQ 支持使用triton后端加速推理但该后端目前仅支持 Linux。如果需要集成 Tritonpip install auto-gptq[triton]注意Triton 后端当前不支持 3-bit 量化详见 AutoGPTQ README 中的安装说明并且desc_act与group_size等参数在 Triton 后端下的行为与 CUDA 后端存在差异这一点在后续配置小节还会再次强调。对于希望尝鲜 Transformers 中新增的llama类型模型、但又不方便升级 Transformers 到最新版本的用户可以安装带 llama 支持的版本pip install auto-gptq[llama]2.2 CUDA 扩展默认构建可用环境变量关闭默认情况下只要环境中已经安装了 CUDA 和 PyTorchauto-gptq在安装时就会自动构建 CUDA 扩展。若需要关闭 CUDA 扩展的构建例如仅用于纯 Python 实验或构建环境缺少编译工具链可分别使用以下命令LinuxBUILD_CUDA_EXT0 pip install auto-gptqWindowsset BUILD_CUDA_EXT0 pip install auto-gptq2.3 从源码安装本仓库场景本仓库把 AutoGPTQ 源码直接放置在 inference/compression/dependencies/AutoGPTQ如果需要基于这份 vendored 源码安装例如同步使用仓库验证过的特定版本可以在该目录下执行pip install -v .同样可用BUILD_CUDA_EXT0跳过 PyTorch CUDA 扩展构建但官方文档明确警告这会退回到缓慢的 Python 实现属于强烈不推荐的做法除非你明确只需要验证 API 流程。三、核心 API两个类串起整个量化流程AutoGPTQ 当前暴露给用户的两个核心类是AutoGPTQForCausalLM与BaseQuantizeConfig导入方式如下from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfigAutoGPTQForCausalLM门面类负责加载预训练模型并量化from_pretrained与加载量化模型并推理from_quantized两条主线。从其源码实现看auto.pyfrom_pretrained会先通过check_and_get_model_type探测模型的model_type再从GPTQ_CAUSAL_LM_MODEL_MAP映射表中取出对应模型族的量化实现类最后委托给该实现类的同名方法——这意味着支持哪些模型结构是由注册表决定的新模型如 OLMo需要自定义类并注册进映射表。BaseQuantizeConfig量化超参配置类保存/加载时对应目录下的quantize_config.json文件。根据 _base.py 的字段定义其核心参数与约束如下参数默认值说明与取值约束依据源码bits4量化比特数源码限定可选[2, 3, 4, 8]超出会抛ValueErrorgroup_size-1分组量化的大小-1表示整层作为一个组其他值必须大于 0damp_percent0.01Hessian 矩阵的阻尼比例必须落在(0, 1)区间desc_actTrue是否按激活值大小对列做降序排列激活排序置False可显著提速推理但困惑度可能略有上升static_groupsFalse是否使用静态分组symTrue是否使用对称量化true_sequentialTrue是否按真实执行顺序逐模块量化model_name_or_pathNone记录来源模型路径model_file_base_nameNone量化权重文件的基名其中bits、group_size、damp_percent三者会在__post_init__中做合法性校验源码位置因此传参错误会在实例化阶段立刻暴露而不是等到量化中途才失败。四、完整实战一量化一个预训练模型官方教程对应的完整可运行脚本是 examples/quantization/basic_usage.py教程原文中也标注了这一点。整个流程分四步。第 1 步加载预训练模型与分词器from transformers import AutoTokenizer pretrained_model_name facebook/opt-125m quantize_config BaseQuantizeConfig(bits4, group_size128) model AutoGPTQForCausalLM.from_pretrained(pretrained_model_name, quantize_config) tokenizer AutoTokenizer.from_pretrained(pretrained_model_name)该步骤会从 Hub 下载opt-125m并缓存到本地磁盘然后加载进 CPU 内存。这是刻意为之的设计——量化过程本身不需要 GPU 常驻整模型后续教程还会介绍 CPU offload 与多设备加载等更高级的策略但在快速上手阶段记住默认 CPU 加载即可。第 2 步准备校准样本examples量化需要一组引导样本calibration examples其格式为list of dict每个 dict 只允许包含input_ids与attention_mask两个键。教程为简化代码只使用了一句文本examples [ tokenizer( auto-gptq is an easy-to-use model quantization library with user-friendly apis, based on GPTQ algorithm. ) ]必须强调样本数量越多量化后模型质量通常越好。教程中的单样本写法仅是演示 API 形态真正的生产级量化都会使用成百上千条校准样本例如本仓库 run_quantization.py 中的get_wikitext2函数就是按n_samples从 Wikitext-2 中随机切出若干条长度为seqlen默认 2048的序列每条都构造成{input_ids: inp, attention_mask: attention_mask}字典与 AutoGPTQ 的样本契约完全一致。第 3 步执行量化model.quantize(examples)quantize内部会遍历模型各层逐模块按inside_layer_modules定义的顺序注意力 Q/K/V 投影 → 注意力输出投影 → MLP 投影 → MLP 输出用校准样本计算 Hessian 信息并完成 GPTQ 权重更新。实际脚本中还可以传入use_tritonTrue让 Triton 后端参与仅 Linux。第 4 步保存量化模型quantized_model_dir opt-125m-4bit-128g model.save_quantized(quantized_model_dir)保存结果的要点教程原文明确说明默认保存为.bin格式设置use_safetensorsTrue可保存为.safetensors格式basic_usage.py 中就有这行演示权重文件的命名规则为gptq_model-{bits}bit-{group_size}g例如上面的配置会生成gptq_model-4bit-128g.bin除了权重还会额外保存两份 JSON预训练模型的config.json与量化配置quantize_config.json——后者正是下一节加载时的说明书。此外 basic_usage.py 还演示了如何用model.push_to_hub(...)把量化模型推送到 Hub或使用save_dir...参数保存并推送一步完成。五、完整实战二加载量化模型并进行推理加载量化模型不再使用.from_pretrained而是使用.from_quantizeddevice cuda:0 model AutoGPTQForCausalLM.from_quantized(quantized_model_dir, devicedevice)这一调用的内部行为教程原文描述先读取opt-125m-4bit-128g目录下的quantize_config.json再根据其中记录的bits与group_size值把对应的gptq_model-4bit-128g.bin权重文件加载到第一块可见 GPU 上。也就是说量化参数不需要你在加载时再次手填一切以保存时写入的quantize_config.json为准——这也印证了BaseQuantizeConfig.save_pretrained/from_pretrained源码这对方法存在的意义。从 auto.py 的签名可以看到from_quantized还暴露了device_map、use_triton、use_safetensors、inject_fused_attention、inject_fused_mlp、disable_exllama等进阶参数分别用于多设备映射、Triton 后端、safetensors 加载、融合注意力/MLP 模块注入以及 exllama 内核开关快速上手阶段只需关注device即可。加载完成后可以直接复用 Transformers 的TextGenerationPipeline做文本生成from transformers import TextGenerationPipeline pipeline TextGenerationPipeline(modelmodel, tokenizertokenizer, devicedevice) print(pipeline(auto-gptq is)[0][generated_text])除 pipeline 外basic_usage.py 还展示了更底层的model.generate调用方式两者等价可用。六、锦上添花这套流程在 OLMo 仓库中的真实落地AutoGPTQ 教程本身以 OPT 等模型为例而本仓库证明了同样的 API 可以直接迁移到 OLMo 上具体需要做两件事。6.1 为 OLMo 定制 GPTQ 支持类AutoGPTQ 靠一组类属性告诉量化引擎Transformer 块在哪、哪些线性层需要量化、以什么顺序量化。OLMo 的定制实现位于 olmo_gptq_class.pyfrom auto_gptq.modeling._base import BaseGPTQForCausalLM class OLMoGPTQForCausalLM(BaseGPTQForCausalLM): # Attribute name of Transformer layer block. layers_block_name model.transformer.blocks # Excludes transformer.emb_drop, which has no parameters outside_layer_modules [model.transformer.wte, model.transformer.ln_f] inside_layer_modules [[att_proj], [attn_out], [ff_proj], [ff_out]]layers_block_name指向 OLMo 的 Transformer 层容器model.transformer.blocksoutside_layer_modules列出与层同级但不参与量化的模块wte词嵌入与ln_f最终层归一化emb_drop因为不持有参数而被排除在外inside_layer_modules按执行顺序声明每个层内部需要量化的线性模块注意力 QKV 融合投影att_proj→ 注意力输出attn_out→ MLP 投影ff_proj→ MLP 输出ff_out。从源码结构看该文件保留了早期版本基于旧模块命名transformer.blocks.att_proj等的注释代码当前生效的版本则使用了model.transformer.*前缀与 OLMo 的新模型结构对应文件末尾的NOTE: In progress注释也提示这套映射可能随模型更新而调整属于仓库中标注为进行中的适配代码。要让 AutoGPTQ 认识这个类还需要把它注册进GPTQ_CAUSAL_LM_MODEL_MAP映射表该表在auto_gptq.modeling.auto中维护教程未展开属仓库源码可推断的集成点。6.2 用 Wikitext-2 校准并一键量化仓库提供的 run_quantization.py 把教程流程升级成了可命令行调用的完整工具其 docstring 明确说明基于 AutoGPTQ 官方的basic_usage_wikitext2示例改造python run_quantization.py \ --pretrained-model /path/to/your/unquantized/model \ --quantized-model-dir /path/to/output/quantized/model \ --n-samples 128脚本要点命令行参数由argparse定义源码--pretrained-model接受本地目录或 Hugging Face 模型名--quantized-model-dir指定输出目录--n-samples默认 128控制 Wikitext-2 校准样本数量数据准备阶段复用get_wikitext2(nsamples, seed, seqlen, model)源码加载wikitext-2-raw-v1的 train/test 切分按固定种子随机截取长度为 2048 的序列量化配置与教程推荐一致BaseQuantizeConfig(bits4, group_size128)注释明确推荐设为 128源码调用了model.quantize(trainloader, use_tritonTrue)在支持 Triton 的 Linux 环境下启用加速后端并打印量化耗时通过from hf_olmo import *导入 OLMo 的 Hugging Face 实现使模型能以AutoGPTQForCausalLM.from_pretrained正常加载脚本头部 docstring 给出了单卡运行示例对应的是从open-instruct的 Alpaca 65B 模型量化到gptq_alpaca_fixed_65b的真实场景。配合 run_olmo_quantization.sh 只需两个位置参数即可运行完整流程bash run_olmo_quantization.sh /path/to/pretrained/model /path/to/output/dir脚本内部即执行上述 Python 命令--n-samples 128是把教程四步流程固化为生产命令的典型封装。七、关键参数与最佳实践小结结合教程与仓库源码以下实践要点值得在正式使用时遵守校准样本宁多勿少教程明确指出样本越多量化质量大概率越好本仓库默认用 128 条 2048 长度的 Wikitext-2 序列run_quantization.py比教程单句示例严谨得多。group_size128是推荐值源码注释与教程一致建议 128-1表示不分组整层量化。desc_actFalse换取推理速度官方注释说明该设置可显著加速推理但困惑度可能略有下降basic_usage.py中同时提到desc_act与group_size在 Triton 后端下才有更完整的效果组合。权重格式默认.binuse_safetensorsTrue可输出更安全的.safetensors格式从 auto.py 可见加载侧对应use_safetensors参数保存与加载需保持一致。Triton 后端仅限 Linux且不支持 3-bit这是官方 README 与教程共同强调的边界条件。新模型结构需要定制类OLMo 无法直接套用 AutoGPTQ 内置模型族必须像 olmo_gptq_class.py 那样声明layers_block_name/outside_layer_modules/inside_layer_modules并注册到模型映射表量化引擎才能正确识别要压缩的线性层及其顺序。八、总结通过本文你已经走通了 AutoGPTQ 的完整快速上手链路从pip install auto-gptq与 CUDA 扩展的构建开关到BaseQuantizeConfig各参数的含义与合法性校验再到加载预训练模型 → 校准样本 →model.quantize→save_quantized→from_quantized→ pipeline 推理的标准闭环。更进一步你看到了这套通用流程如何在 OLMo 仓库中落地为OLMoGPTQForCausalLM定制类与 run_quantization.py 实战脚本。掌握这些之后你就可以把任意支持的因果语言模型压缩到 4-bit 并在 GPU 上直接推理后续教程还将深入预训练/量化模型的高级加载策略CPU offload、多设备与不同场景下的最佳实践。【免费下载链接】OLMoModeling, training, eval, and inference code for OLMo项目地址: https://gitcode.com/GitHub_Trending/ol/OLMo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表