ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

massmax168准则是什么?Altar-1专家选择策略为何优于全局频率剪枝

massmax168准则是什么?Altar-1专家选择策略为何优于全局频率剪枝

【免费下载链接】altar-1

项目地址:https://ai.gitcode.com/hf_mirrors/AikidoSec/altar-1
点击查看免费下载

Altar-1 是 Aikido 基于 GLM-5.3 发布的 504B 参数 MoE 专家剪枝模型。本文带你彻底搞懂它的核心选择标准——massmax168 准则:为什么它比"保留全局使用频率最高专家"的剪枝方式更能保住模型在各领域的能力,以及新手如何快速读懂仓库里的剪枝计划与配置文件。

1分钟速览:massmax168 三个词拆开看

massmax168 这个名字其实是一句压缩过的技术说明,拆开就是三个部分:

组成含义
mass路由权重下的专家激活量(Router-weighted Expert Activation),即每个专家实际"承接了多大量的路由工作"
max不取平均值,而是取该专家在任意单一领域内占比的最大值
168每层保留 168 个专家(原模型每层有 256 个)

一句话总结:先给每个专家算它在各领域里的"份额",再挑它表现最强的那个领域份额打分,每层留下分数最高的 168 个。

这个打分依据来自 REAP(Router-weighted Expert Activation Pruning)方法,在网络安全流量、编码、工具调用、推理和英文语料上完成校准,并额外加入了多语言 Wikipedia 文章——这也是后面"保住领域专才"的关键。

为什么"全局频率剪枝"会误伤模型?

最直觉的剪枝思路是全局频率剪枝:统计校准语料中每个专家被路由到的总次数,保留被用得最多的 168 个。听起来很合理,但问题在于——

频率统计只看总量,不看"是谁在用它"。

想象一家综合医院:骨科专家全年门诊量很高,而罕见病专家全年只接诊几十例。如果按"总门诊量"排名裁人,罕见病专家第一个被裁——可一旦遇到罕见病,这家医院就彻底瘫痪了。

MoE 模型里的专家也是一样。以 Altar-1 的校准数据为例,代码专家主要在处理编码任务时被激活,小语种专家只处理多语言文本,结构化输出专家只在生成 JSON 类内容时出现。这些"领域专才"的整体激活频率往往排不进前 168 名,按全局频率剪枝就会把他们删掉,模型随即在对应领域明显退化。

massmax168 的max正是针对这一点:

  • 一个专家哪怕全年只在 5% 的 token 上被用到,只要在这 5% 里它是该领域的主力(占路由工作量的大头),它的 max 分数就会很高,就能留在 168 名额内;
  • 反过来,一个"什么都沾一点"的高频杂工专家,如果没有任何一个领域是它挑大梁的,max 分数反而不突出。

结果:每一层、每一个领域都保留了自己的"专科医生",而不再只留下一屋子全科常客。

Altar-1 是如何执行 massmax168 剪枝的?

整个过程不需要重新训练,直接对 GLM-5.3 的 AWQ-INT4 版本做"外科手术":

  1. 校准打分:在真实流量(网络安全、编码、工具调用、推理、多语言)上收集路由行为,按 massmax168 给每层 256 个专家打分;
  2. 逐层删除:每层删掉最末位的 88 个专家(256 → 168,删掉约 34%);
  3. 路由逻辑不动:每个 token 依然从剩余 168 个专家里选 8 个,激活参数量保持在约 40B,与原模型一致;
  4. 精度混合配置:只有路由专家压到 INT4(W4A16,compressed-tensors/AWQ),注意力、共享专家、稠密层和输出头保持 BF16。

剪枝结果固化在 reap_prune_plan.json 中,打开就能看到核心字段:

{"keep": 168, "criterion": "massmax168", "layers": {"3": [0, 1, 2, 4, ...], ...}}
  • "criterion": "massmax168"即本文主角;
  • "layers"列出第 3 层到第 78 层共76 个稀疏层各自保留的专家编号,每层恰好 168 个;
  • 前 3 层是稠密(dense)层,没有可剪的专家,与 config.json 中first_k_dense_replace: 3的设置吻合;
  • 文件末尾还有一个mtp_ranking字段:针对 MTP(多 token 预测)层改用权重幅度排序,属于该准则的一个特例。

在 config.json 里也能直接验证剪枝后的架构参数:

参数值说明
n_routed_experts168剪枝后的每层路由专家数
num_experts_per_tok8每个 token 激活 8 个专家(未变)
n_shared_experts1保留 1 个共享专家(BF16 不量化)
num_hidden_layers78层数未变
quantization_configint4 / group_size 32路由专家的 W4A16 量化配置

效果如何:0.506 nats 的 KL 散度说明什么?

衡量"剪枝后模型和原模型差多少",项目采用KL 散度(Kullback–Leibler divergence),数值越小越接近原模型,0 表示完全一致:

对比项KL 散度(25 条密封提示词、154k 完整词表)
Altar-1(INT4) vs 完整 BF16 GLM-5.30.506 nats
同剪枝方案的 EXL3 版本 vs 完整 BF160.511 nats

两个细节值得注意:

  • 同一份 168 专家剪枝方案下,INT4 与 EXL3 两种量化格式只差 0.005——说明在 4-bit 档位上量化格式几乎不影响结果,真正决定保真度的是"留哪 168 个专家",这正是 massmax168 的价值所在;
  • README 中明确提到该方案与频率剪枝做过正面对比(head-to-head),结论是 massmax168 保留的领域专才让剪枝后的输出分布更贴近原模型。

剪枝前后参数对照表

维度原 GLM-5.3Altar-1
总参数量753B504B(减少约 34%)
每层路由专家256168
每 token 激活专家88(不变)
激活参数量约 40B约 40B(不变)
权重精度BF16路由专家 INT4 + 其余 BF16
权重体积远超单机能力328 GB,4× H200 即可部署
是否重新训练—不需要,纯剪枝 + 量化

对推理侧来说,328 GB 权重摊到 4 张 H200 上后,仍有余量支撑 128k 上下文的 KV cache(生产批量下);vLLM 会自动选择 Marlin MoE kernel。

部署 Altar-1 的 vLLM 启动命令

官方推荐的部署方式是一行 vLLM 命令(要求 Hopper 架构,H100/H200):

vllm serve aikido/altar-1 --tensor-parallel-size 4 --trust-remote-code --max-model-len 131072

生成参数见 generation_config.json:temperature 1.0、top_p 0.95、采样开启,与 GLM 系列原模型的推荐设置一致。

文件导航:去哪里查 massmax168 的细节?

文件看什么
README.md模型总览、校准语料、KL 散度数据、vLLM 部署命令
reap_prune_plan.json剪枝计划本体:criterion: massmax168+ 每层保留的 168 个专家编号
config.json架构与量化配置:n_routed_experts、W4A16 量化组、BF16 白名单
generation_config.json采样参数(temperature / top_p / eos 等)
model.safetensors.index.json39 个权重分片(model-00001 ~ model-00039.safetensors)的张量索引
chat_template.jinja对话模板,接入服务时渲染提示词用

总结:massmax168 给 MoE 剪枝留下的启示

  • 频率不是价值:全局频率剪枝把"低频但不可替代"的领域专才当垃圾清掉了;
  • max 才是关键:massmax168 用"在任一领域的最大份额"打分,让每一层、每个领域都留下自己的主力专家;
  • 无需重训、代价可控:删掉 34% 的专家后,KL 散度仅 0.506 nats,激活计算量保持约 40B 不变,753B 的模型直接瘦身成 4×H200 就能跑的 504B 版本。

如果你的场景是多领域混合服务(代码 + 安全 + 多语言)、硬件又跑不动完整 753B 模型,Altar-1 这套"massmax168 + INT4"的组合就是一个开箱即用的答案。

【免费下载链接】altar-1

项目地址:https://ai.gitcode.com/hf_mirrors/AikidoSec/altar-1
点击查看免费下载

相关推荐

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

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进