recipe.yaml深度拆解:gemma-4-12B-it-w8a8-llmcompressor量化配方中targets、ignore与W8A8方案的隐藏细节

📅 发布时间:2026/10/19 1:45:50
recipe.yaml深度拆解:gemma-4-12B-it-w8a8-llmcompressor量化配方中targets、ignore与W8A8方案的隐藏细节
【免费下载链接】gemma-4-12B-it-w8a8-llmcompressor项目地址https://ai.gitcode.com/hf_mirrors/amd/gemma-4-12B-it-w8a8-llmcompressor点击查看免费下载gemma-4-12B-it-w8a8-llmcompressor是 AMD 用 LLM Compressor 对 Gemma-4 12B 多模态模型做的 W8A8 动态量化版专为 CPU 推理优化。仓库里那份只有 7 行的 recipe.yaml正是整个量化过程的核心配方哪层要量化targets、哪层必须跳过ignore、用什么精度方案W8A8。本文带你逐字段拆解这份量化配方的隐藏细节并对照 config.json 验证量化结果到底落在了哪些模块上。 这个模型是什么先建立全局认知再拆配方项目说明源模型gemma-4-12B-itBF16约 22.3 GiB量化后体积约 12.1 GiB减少约 46%量化方法W8A88-bit 静态权重 8-bit 动态激活RTN 算法推理引擎vLLMCPU面向 AMD EPYC 处理器量化框架LLM Compressorcompressed-tensors 格式一句话总结这是一份CPU 上跑得动的 12B 多模态模型而它的量化策略完全写在 recipe.yaml 里。 recipe.yaml 全景7 行配方的完整结构打开 recipe.yaml全部内容如下default_stage: default_modifiers: QuantizationModifier: targets: [Linear] ignore: [lm_head, re:.*embed_vision.*, re:.*embed_audio.*, re:.*vision_embedder.*] scheme: W8A8 bypass_divisibility_checks: false这是 LLM Compressor 的标准配方格式default_stage定义阶段default_modifiers挂载修改器这里只挂了一个QuantizationModifier量化修改器。真正决定怎么量化的是下面四个参数。targets: [Linear] —— 为什么只写一个词targets指定要被量化的模块类型按 PyTorch 类名匹配。[Linear]的意思是匹配模型中所有nn.Linear层——注意力投影q/k/v/o、MLP 的 up/gate/down 等全部覆盖不写Conv等类型意味着卷积类模块默认不量化用一个类型名就能圈住绝大部分大参数计算层这是 CPU INT8 量化收益最高的部分。小提醒类型名匹配的是 Python 类而不是模块路径。想精确控制到某一层需要用正则前缀见下一节。ignore 的 4 条规则 —— 为什么它们必须留在 BF16recipe.yaml 第 5 行的ignore列表排除了 4 类模块它们全程保持 BF16规则匹配对象作用lm_head输出词表投影头把隐藏层映射回 26 万词的 logit精度敏感re:.*embed_vision.*视觉嵌入模块图像 patch 到词表的映射re:.*embed_audio.*音频嵌入模块音频特征到词表的映射re:.*vision_embedder.*多模态嵌入器视觉-文本对齐的投影层两个隐藏细节值得注意re:前缀是正则匹配开关。不带前缀的lm_head是精确名称匹配带re:的条目按正则对模块路径做匹配.*表示中间任意内容所以一条规则能覆盖一整棵模块子树。为什么偏偏是它们Gemma 4 是 encoder-free 的多模态架构图像/音频要先经过嵌入层翻译成词表空间。这类嵌入层参数量占比小、量化收益低但数值动态范围大、对 INT8 截断敏感保持 BF16 是典型的低 ROI 模块豁免策略。对照 config.json 可以看到量化完成后这些正则被展开成了 4 个具体模块名正好印证了正则的实际命中范围ignore: [ model.embed_vision.patch_dense, model.embed_vision.multimodal_embedder.embedding_projection, model.embed_audio.embedding_projection, lm_head ]scheme: W8A8 —— 8-bit 权重 8-bit 激活到底怎么分工W8A8是 LLM Compressor 内置的量化方案scheme含义是WWeights INT8静态per-channel通道级权重在量化时就固定了 scale推理时直接用 INT8 存储与计算这是省显存/内存的主力AActivations INT8动态per-tokentoken 级激活值不预存 scale而是在推理时按每个 token 实时计算缩放因子。动态是这里的关键词激活分布随输入变化很大预先标定静态容易失真per-token 动态量化虽然多一步现场计算但精度几乎不损失。而 CPU 场景恰好擅长这种整数运算——量化后的矩阵乘可以走 AMD ZenDNN 优化的 INT8 指令路径速度反而比 BF16 快。在 config.json 的quantization_config.config_groups.group_0中可以逐字段核对这份方案的落地结果weightsnum_bits: 8、type: int、symmetric: true、strategy: channel、dynamic: falseinput_activationsnum_bits: 8、strategy: token、dynamic: true与配方描述完全一致权重对称 INT8 按通道静态激活对称 INT8 按 token 动态。bypass_divisibility_checks: false —— 最容易被忽略的一个参数这个字段默认是false不绕过意思是量化时会校验张量维度是否满足 CPU INT8 内核的对齐/整除要求例如通道数需被特定块大小整除才能命中优化内核。保留校验可以避免产出能加载但跑不快的模型。如果你复现其他模型时遇到整除校验报错才需要把它设为true并自行权衡性能损失。 配方如何被执行从 recipe 到 model.safetensors量化并不靠 recipe.yaml 直接运行而是由脚本调用 LLM Compressor 的oneshotAPI 完成README 中给出了完整流程见 README.md以 BF16 加载源模型gemma-4-12B-it注意需用Gemma4UnifiedForConditionalGeneration架构加载否则会存出文本版 config 被 vLLM 拒绝用QuantizationModifier(schemeW8A8, targets[Linear], ignore[...])定义与 recipe.yaml 完全一致的配方调用oneshot(model, recipe, tokenizer, output_dir)一步完成量化并以 compressed-tensors 格式保存本仓库的 model.safetensors 就是产物手动保存 processoroneshot不会写它而 vLLM 需要。也就是说recipe.yaml 是配方的声明式记录README 里的 Python 调用是它的命令式等价物两者参数一一对应可以互为校验。 量化效果验证省了多少损失了多少体积22.3 GiB → 12.1 GiB约 46% 的磁盘/内存节省见 README.md精度GSM8K5-shot从 BF16 基线的 0.9401 到 W8A8 的 0.9325恢复率 99.19%——对 CPU 部署来说几乎是免费的压缩。基准BF16 基线W8A8恢复率GSM8K (5-shot)0.94010.932599.19%❓ 新手常见疑问速答Q1W8A8 是不是权重激活都固定 8-bit权重是静态 8-bit量化时定死激活是动态 8-bit推理时按 token 实时算 scale两者机制不同。Q2为什么 lm_head 不量化词表投影直接决定输出分布且该模型tie_word_embeddings: true词嵌入与输出头共享误伤会影响全部输出 token 的打分。Q3这个模型能上 GPU 吗不建议。它是为 AMD EPYC CPU ZenDNN 栈优化的版本锁定见 README.mdbypass_divisibility_checks: false的对齐校验也是围绕 CPU 内核做的。Q4如何自己验证配方与产物一致比对 recipe.yaml 与 config.jsontargets应出现在group_0.targetsignore的正则应被展开为具体模块名scheme: W8A8应对应group_0的 weights/activations 配置。✅ 小结配方字段值一句话含义targets[Linear]量化所有线性层覆盖绝大部分计算与参数ignore4 条含 3 条正则词表头与视觉/音频嵌入层豁免保 BF16schemeW8A8INT8 静态权重 INT8 动态激活对称量化bypass_divisibility_checksfalse强制维度对齐校验确保 CPU 内核性能这份 7 行的配方浓缩了量化什么、跳过什么、怎么量化三个核心决策。理解targets/ignore/scheme的分工后你也能照着它给自己的多模态模型写一份 CPU 友好的量化配方。相关资源量化配方recipe.yaml量化配置产物config.json复现步骤与评测命令README.md模型架构说明config.json赞分享【免费下载链接】gemma-4-12B-it-w8a8-llmcompressor项目地址https://ai.gitcode.com/hf_mirrors/amd/gemma-4-12B-it-w8a8-llmcompressor点击查看免费下载相关推荐drizzle-zod 0.2.0 发布解读select 模式 Schema、SQLite 支持与统一导入路径drizzle zod 0.2.0 发布解读select 模式 Schema、SQLite 支持与统一导入路径 本文基于 drizzle orm 仓库中 drrecipe.yaml配方解析gemma-4-26B-A4B-it-w8a8-llmcompressor如何决定哪些层量化、而哪些层必须跳过recipe.yaml配方解析gemma 4 26B A4B it w8a8 llmcompressor如何决定哪些层量化、而哪些层必须跳过 gemma 4大模型模型量化本地部署多模态W8A8量化手把手教程gemma-4-26B-A4B-it-w8a8-llmcompressor 的 LLM Compressor oneshot 代码逐行注释W8A8量化手把手教程gemma 4 26B A4B it w8a8 llmcompressor 的 LLM Compressor oneshot 代码逐行注大模型模型量化本地部署多模态上一篇PowerToys Image Resizer一次右键批量调好几十张图片的尺寸下一篇怎样使用KMS智能激活工具Windows和Office永久激活终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考