☰
recipe.yaml配方解析:gemma-4-26B-A4B-it-w8a8-llmcompressor如何决定哪些层量化、而哪些层必须跳过
2026/11/3 19:11:38 网站建设 项目流程

recipe.yaml配方解析:gemma-4-26B-A4B-it-w8a8-llmcompressor如何决定哪些层量化、而哪些层必须跳过

【免费下载链接】gemma-4-26B-A4B-it-w8a8-llmcompressor项目地址: https://ai.gitcode.com/hf_mirrors/amd/gemma-4-26B-A4B-it-w8a8-llmcompressor

gemma-4-26B-A4B-it-w8a8-llmcompressor是 AMD 使用 LLM Compressor 制作的 Gemma4 26B-A4B 多模态 MoE 模型(25.8B 参数)的 W8A8 8-bit 量化版本。仓库中的 recipe.yaml 就是这份「量化配方」:仅 9 行内容,就决定了哪些层量化成 8-bit、哪些层必须保留 BF16,以及按什么精度量化。

📄 9 行量化配方:逐字段解析

recipe.yaml 全文只有 9 行,是一个单阶段配方:default_stage→default_modifiers→QuantizationModifier(量化修正器)。

default_stage: default_modifiers: QuantizationModifier: targets: [Linear] ignore: [lm_head, 're:.*lm_head', 're:.*router\.proj$', 're:.*vision_tower.*', 're:.*embed_vision.*', 're:.*embed_audio.*'] scheme: W8A8 bypass_divisibility_checks: false requires_calibration_data: false

下面逐字段拆解它的「圈层」逻辑。

targets: [Linear] — 默认把全部线性层标记为量化目标

targets(见 recipe.yaml)声明量化目标:模型里所有Linear(全连接)层默认都参与量化,包括 30 个语言层的注意力 q/k/v/o 投影、共享 MLP,以及每层 128 个路由专家的每一个投影层。

scheme: W8A8 — 权重 8-bit、激活 8-bit

scheme(recipe.yaml)指定量化方案:W8A8即Weights 8-bit +Activations 8-bit。具体细节记录在 config.json 的quantization_config中:

对象位数对称性量化粒度时机
权重 weightsINT8对称per-channel(每输出通道一个 scale)静态(保存前完成)
输入激活 activationsINT8对称per-token(每个输入 token 一个 scale)动态(推理时实时计算)

权重使用memoryless_minmaxobserver 在保存时算好 scale;激活则不预存,推理时按 token 动态量化,精度损失更小。

requires_calibration_data: false — 零校准数据量化

false(recipe.yaml)表示不需要校准数据集:权重直接按 RTN(Round-to-Nearest,四舍五入)算法舍入到 INT8,全程不用跑样例数据,量化一次完成(oneshot)。README.md 也确认了本模型就是用 RTN 算法量化的。

bypass_divisibility_checks: false — 保留维度合法性检查

false(recipe.yaml)表示不跳过「维度整除性检查」。若量化按分组进行,张量维度必须能被组大小整除,该检查确保 scale 与张量形状对齐,保存出的权重索引不会错位。

ignore: 5 条「禁入」模式

ignore(recipe.yaml)是白名单——匹配以下模式的模块一律跳过,保留 BF16:

配方模式匹配对象为什么跳过
lm_head、re:.*lm_head输出投影层最终 logits 投影,与输入嵌入共享权重,量化易拖累输出质量
re:.*router\.proj$每层 MoE 路由器决定激活哪些专家,精度极其敏感
re:.*vision_tower.*27 层视觉塔多模态视觉编码器
re:.*embed_vision.*视觉嵌入投影层图像到文本的对齐
re:.*embed_audio.*音频嵌入投影层(预留)本模型无音频模块(audio_config: null),属防御性规则

💡 注意re:前缀表示正则匹配:re:.*router\.proj$会精确命中所有以router.proj结尾的模块名,无需逐层手写。

⚠️ 为什么跳过 MoE router:最小的层,却最敏感

router 是这个模型最「值得保」的模块:

  • 小:router.proj只是 2816 → 128 的小矩阵,跳过它省下的磁盘空间几乎可以忽略
  • 敏感:router 的输出决定每个 token 激活 128 个专家中的哪8 个(top_k_experts: 8)。路由一旦出错,整个 token 的计算就跑偏,影响远大于普通权重的舍入误差
  • 有专门参数:从 model.safetensors.index.json 可以看到每层router有proj.weight、scale、per_expert_scale三个参数,全部保持 BF16,没有任何weight_scale量化字段

🎯 为什么跳过视觉塔与 lm_head

  • 视觉塔:27 层视觉编码器 + patch 嵌入(patch_embedder.input_proj)+ 视觉投影(embed_vision.embedding_projection)全部保留 BF16。语言模型是 30 层 × 128 专家,视觉塔参数量小得多,量化收益有限,而视觉特征退化会直接拖累多模态任务
  • lm_head:本模型tie_word_embeddings: true(输入/输出嵌入共享),输出投影与词嵌入表是同一份权重,INT8 化容易损伤生成质量
  • embed_tokens 与 LayerNorm:输入嵌入表和归一化层不是Linear模块,天然不在targets范围内

🔍 对照 config.json:从 5 条正则到 252 个具体层名

recipe.yaml 是「处方」,config.json 的quantization_config.ignore则是「执行记录」——llm-compressor 已把 5 条正则展开成252 个具体层名写入配置,推理框架(vLLM)加载时可直接按名跳过,无需再跑正则:

模块数量
视觉塔(patch_embedder + 27 个 encoder 层 × 7 个投影)190
MoE router(30 层 ×router/router.proj)60
embed_vision.embedding_projection1
lm_head1
合计252

同时quant_method: "compressed-tensors"、quantization_status: "compressed"表明模型已按compressed-tensors量化格式保存,vLLM 等引擎可直接加载。

✅ 权重索引验证:11,725 个被量化的投影层

统计 model.safetensors.index.json 中的weight_scale(每通道量化 scale)字段,每个对应一个 INT8 化的线性层:

模块计算方式数量
路由专家30 层 × 128 专家 × 3 投影(gate/up/down)11,520
共享稠密 MLP30 层 × 3 投影90
注意力投影25 个滑动注意力层 × 4 + 5 个全注意力层 × 3115
合计11,725

有个有趣的细节:5 个 full-attention 层(第 5/11/17/23/29 层)的注意力k与v投影共享权重(attention_k_eq_v: true),因此这 5 层各只量化了 3 个投影。而 router、视觉塔、lm_head 则完全没有weight_scale字段——它们仍是 BF16,与配方 ignore 名单完全吻合。

📊 量化效果:省 47% 磁盘,精度恢复 98.95%

  • 磁盘:48.1 GiB(BF16)→ 25.3 GiB(W8A8),减少约 47%(索引元数据 total_size 为 27,161,975,452 字节)
  • 精度:GSM8K(5-shot)BF16 基线 0.9462 → W8A8 0.9363,精度恢复 98.95%

该模型面向 AMD EPYC CPU 推理(ZenDNN + vLLM 技术栈),部署与评测步骤见 README.md。

📁 关键文件速查

文件作用
recipe.yaml量化配方:targets / ignore / scheme
config.jsonquantization_config:实际量化参数与展开后的 ignore 名单
model.safetensors.index.json权重索引:验证真实被量化的层
README.md量化过程、部署方式与评测结果

一句话总结:targets: [Linear]先圈定全部线性层,ignore用 5 条正则精准排除 MoE router、视觉塔、lm_head 等敏感模块;W8A8 + RTN 零数据量化让 11,725 个投影层从 BF16 降到 INT8,磁盘减 47%,基准精度恢复 98.95%。

【免费下载链接】gemma-4-26B-A4B-it-w8a8-llmcompressor项目地址: https://ai.gitcode.com/hf_mirrors/amd/gemma-4-26B-A4B-it-w8a8-llmcompressor

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询