☰
Puzzletron算法揭秘:Model Optimizer如何为LLM/VLM做异构剪枝与NAS
2026/9/26 5:21:27 网站建设 项目流程

Puzzletron算法揭秘:Model Optimizer如何为LLM/VLM做异构剪枝与NAS

【免费下载链接】Model-OptimizerA unified library of SOTA model optimization techniques like quantization, distillation, pruning, neural architecture search, speculative decoding, etc. It compresses deep learning models for downstream deployment frameworks like TensorRT-LLM, TensorRT, vLLM, etc. to optimize inference speed.项目地址: https://gitcode.com/GitHub_Trending/te/Model-Optimizer

Puzzletron 是 NVIDIA Model Optimizer 内置的实验性模型压缩算法,基于神经架构搜索(NAS)为 LLM/VLM 做异构剪枝:它逐层评估 FFN 宽度缩减、注意力移除等候选方案,再用混合整数规划(MIP)在内存/延迟预算下拼出精度最优的"每层结构都不同"的模型,最后通过知识蒸馏找回损失。

🧩 它解决什么问题:从"一刀切"到"外科手术"

传统剪枝(如 Minitron)是同质剪枝——所有层统一减宽、统一删层,产出的模型结构标准、部署方便,但压缩一激进就容易把关键推理通路剪没。

Puzzletron 反过来:每一层都可以有自己的结构。有的层保留完整注意力,有的层直接删掉注意力;FFN 宽度从原始的 14336 到 3072 不等。这种"外科手术式"压缩在 >30% 的激进压缩下能显著保住精度,代价是产出的是异构架构,需要 vLLM 的 AnyModel 后端来部署。

理论关系:Minitron 是 Puzzletron 的特例——任何 Minitron 能产出的架构,Puzzletron 在足够大的搜索空间里也都能找到。区别在于搜索粒度和优化目标(Puzzletron 可以直接以内存预算为硬约束)。

⚙️ 8步自动化流水线:一次命令跑完 NAS

整条流水线由 examples/puzzletron/main.py 驱动,核心实现在 modelopt/torch/puzzletron/puzzletron_nas_plugin.py。一次完整运行包含 8 个阶段:

阶段内容执行方式
1启动 Puzzletron 流水线-
2HF 模型转换为 Puzzletron(AnyModel)格式单卡
3剪枝打分:用激活钩子评估各通道/注意力贡献多卡
4执行剪枝并保存各候选检查点单卡
5构建替换库(每层的候选块)+ 子块统计单卡
6计算单块得分(精度损失量化)多卡
7运行 MIP 求解器并"拼装"出目标模型多卡
8流水线完成,输出逐层架构与评估指标多卡

其中第 3、4 步的打分逻辑见 modelopt/torch/puzzletron/pruning/ 目录:FFN 中间维度剪枝(ffn_intermediate_pruning_mixin.py)、KV 头剪枝、MoE 专家移除等均以 Mixin 形式注册,配合激活钩子完成重要性评分。

🔍 MIP 优化:把"选结构"变成数学规划

MIP 求解入口在 modelopt/torch/puzzletron/mip/run_puzzle.py。它拿到每个层的候选块清单及其"质量/成本"分数后,求解一个混合整数规划问题:在满足约束的前提下,让总精度损失最小。

支持的约束很直白(配置在 YAML 的human_constraints里):

  • target_memory:显存预算(MiB)
  • num_params:参数量上限
  • target_latency_seconds:端到端延迟上限(需开启 runtime 统计,通过 vLLM 实测)
  • target_throughput、stats.has_attention等

以 llama-3_1-8B_pruneffn_memory.yaml 为例,只需指定三样东西:

mip: human_constraints: target_memory: 78_000 # 78 GiB 显存预算 pruning: intermediate_size_list: [3072, 5888, 8704, 11520] # 候选 FFN 宽度

求解后的输出是逐层架构清单,例如中间 12 层注意力被置为no_op(直接删掉),其余层保留gqa_4,FFN 保持或收窄——模型因此从 113 GiB 降到 75.8 GiB。

两个省时技巧:

  1. --mip-only模式:剪枝和打分完成后,改约束(比如把target_memory从 78000 改成 96000)只需重跑 MIP,不用重新做昂贵的打分;
  2. MIP 扫描模式:在配置里开启sweep.enabled: true并给出一组压缩率,一次跑出完整的"精度-内存"权衡曲线,结果导出为 CSV 并绘图(即文首那张图)。

📊 实战效果:Qwen3-8B 与 Llama-3.1-8B 的公开数据

官方对比指南(examples/pruning/minitron_vs_puzzletron/README.md)在 Qwen3-8B 上的关键结论:

压缩目标方法蒸馏后 MMLU(相对教师)
~14% 参数(7B)Minitron95.6%✅
~14% 参数(7B)Puzzletron91.1%
~38% 内存(78k MiB)Puzzletron74.9%✅
~38% 内存(78k MiB)Minitron61.7%

一句话决策规则:温和压缩(<20%)选 Minitron,激进压缩或有硬内存/延迟预算选 Puzzletron。两者交叉点大约在 20%~38% 压缩区间,可参考完整的内存扫描实验图:

📉 蒸馏:不是可选项,是精度恢复的必选项

剪枝后的模型"失忆"程度与压缩强度正相关:温和压缩只掉几个点,但 38% 压缩下 MMLU 会掉到接近随机猜测(25% 基线附近)。知识蒸馏(教师 logits + KL 散度损失)把 Qwen3-8B 剪枝模型拉回+28.6 个百分点,仅用 WikiText-103 跑 100 次迭代就实现。

一个有意思的观察:蒸馏前 Puzzletron 在 80% 内存档位领先 Minitron +8.3pp,蒸馏后却被反超 +3.8pp——蒸馏前的架构排名不保证蒸馏后成立,官方提到的 Blockwise Local Distillation(BLD)正是为此准备的改进方向。蒸馏流程本身基于 Megatron-Bridge,参考 examples/megatron_bridge/README.md。

🚀 部署到 vLLM 并实测加速

Puzzletron 产出的是标准 HuggingFace 检查点,但需要 vLLM 的AnyModel后端来加载异构架构(部署步骤见 examples/puzzletron/README.md 的 "Deploy compressed model in vLLM" 一节,另见 examples/puzzletron/evaluation/ 的评估脚本)。

在单张 H200 上的推理基准(并发 64):

模型吞吐量 (tok/s)相对基线
Qwen3-8B 基线218.9-
Puzzletron 78k(压缩38%)370.5+69%

同时别忘了"压缩组合拳":剪枝减架构、量化(FP8/NVFP4)减精度,二者互补,可叠加使用。

🗂️ 支持模型与上手路径

已内置的模型支持(见 examples/puzzletron/configs/):Llama-3.1-8B、Llama-3.2-3B、Qwen2.5-7B、Qwen3-8B、Mistral-Small-24B、Nemotron-Nano-12B-v2、Nemotron-Nano-30B-A3B(含 MoE 专家剪枝)、GPT-OSS-20B(专家移除),以及 VLM 方向的 Qwen3-VL。

接入新模型只需两步:写一个ModelDescriptor(定义权重分块正则)+ 一个Converter(生成逐层 BlockConfig),完整指引在 modelopt/torch/puzzletron/anymodel/README.md。

最小启动命令(Llama-3.1-8B,2 卡):

torchrun --nproc_per_node 2 examples/puzzletron/main.py \ --config examples/puzzletron/configs/llama-3_1-8B_pruneffn_memory/llama-3_1-8B_pruneffn_memory.yaml

📚 延伸阅读

资料路径
Puzzletron 官方教程examples/puzzletron/README.md
Minitron vs Puzzletron 完整对比指南examples/pruning/minitron_vs_puzzletron/README.md
算法核心插件modelopt/torch/puzzletron/puzzletron_nas_plugin.py
MIP 求解器modelopt/torch/puzzletron/mip/
剪枝 Mixin 与打分modelopt/torch/puzzletron/pruning/
替换库构建modelopt/torch/puzzletron/replacement_library/
蒸馏结果examples/pruning/puzzletron/README.md

小结:Puzzletron 把"剪哪些层、每层剪多狠"这个架构设计问题交给了 MIP 求解器,让压缩结果精确贴合你的显存或延迟预算;温和压缩场景下 Minitron 仍是更简单可靠的选择,两者同属 Model Optimizer 的压缩工具箱,可按目标灵活切换。

【免费下载链接】Model-OptimizerA unified library of SOTA model optimization techniques like quantization, distillation, pruning, neural architecture search, speculative decoding, etc. It compresses deep learning models for downstream deployment frameworks like TensorRT-LLM, TensorRT, vLLM, etc. to optimize inference speed.项目地址: https://gitcode.com/GitHub_Trending/te/Model-Optimizer

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

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

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

立即咨询