当前位置: 首页 > news >正文

REAP剪枝原理详解:路由门值与专家激活范数的巧妙结合

REAP剪枝原理详解:路由门值与专家激活范数的巧妙结合

【免费下载链接】Qwen-3.5-28B-A3B-REAP项目地址: https://ai.gitcode.com/hf_mirrors/0xSero/Qwen-3.5-28B-A3B-REAP

REAP(Router-weighted Expert Activation Pruning)剪枝技术是一种创新的混合专家模型(MoE)压缩方法,它通过结合路由门值与专家激活范数来实现高效的专家剪枝。本文将深入解析REAP剪枝的核心原理,帮助读者理解这一技术如何在保持模型性能的同时显著减少计算资源消耗。

REAP剪枝技术的核心创新点

什么是REAP剪枝?

REAP剪枝是由ICLR 2026论文《REAP the Experts: Why Pruning Prevails for One-Shot MoE Compression》提出的专家剪枝方法。它通过综合评估每个专家的重要性,实现对MoE模型中冗余专家的精准裁剪。在Qwen3.5-35B-A3B模型上的应用显示,REAP可以成功移除20%的专家(从256个减少到205个),同时保持模型在各项基准测试中的竞争力。

路由门值与专家激活范数的双重考量

REAP剪枝的核心在于通过两个关键指标来评估专家重要性:

  1. 路由门值(Router gate-values):衡量路由器选择每个专家的频率和强度。这反映了专家在模型决策过程中的活跃程度。

  2. 专家激活范数(Expert activation norms):表示每个专家输出贡献的大小。这直接关联到专家对最终模型输出的影响程度。

通过这两个维度的综合评估,REAP能够识别并保留那些既被频繁使用又对模型输出有重要贡献的专家,同时移除那些使用频率低且贡献小的冗余专家。

REAP剪枝的实现流程

层明智剪枝策略

REAP采用层明智(layerwise)剪枝策略,这意味着剪枝过程是逐层进行的。这种方法允许针对不同层的特点进行精细化调整,确保剪枝后模型的整体性能损失最小化。

路由器权重重归一化

剪枝后一个关键步骤是对路由器的logit权重进行重归一化,使其总和为1。这一步骤对于维持模型输出的规模和稳定性至关重要,是确保剪枝后模型性能不出现大幅下降的关键技术。

剪枝配置参数

REAP剪枝的效果可以通过多个参数进行控制,主要包括:

  • 压缩率(compression_ratio):控制要剪枝的专家比例。在Qwen3.5-35B-A3B-REAP模型中使用的是20%的压缩率。

  • 种子(seed):确保剪枝过程的可重复性。

  • 校准样本(calibration samples):用于评估专家重要性的数据集。Qwen3.5-35B-A3B-REAP使用了1000个混合类别的校准样本。

这些参数可以在reap_layerwise_args.yaml配置文件中进行调整。

REAP剪枝的效果评估

性能保持能力

尽管剪枝了20%的专家,Qwen3.5-35B-A3B-REAP模型在多个基准测试中仍保持了出色的性能:

  • HumanEval(pass@1):原始模型76.2%,剪枝后73.2%,仅下降3.0%

  • HumanEval+(pass@1):原始模型72.0%,剪枝后70.1%,仅下降1.9%

在部分推理任务中,剪枝后的模型甚至表现出小幅提升,如BoolQ任务从88.00%提升到89.20%,OpenBookQA任务从45.20%提升到47.20%。

资源消耗优化

REAP剪枝带来的最显著好处是模型资源消耗的降低:

  • 内存占用:从原始模型的约71 GB(bf16)减少到剪枝后的约53 GB(bf16),减少了近25%。

  • 模型文件:从14个safetensors文件减少到仅2个,大大简化了模型的存储和传输。

虽然在当前vLLM路由开销下,吞吐量提升并不明显,但模型的VRAM占用显著降低,使得在资源受限的环境中部署大型MoE模型成为可能。

如何应用REAP剪枝

基本使用方法

要在自己的项目中使用经过REAP剪枝的Qwen3.5-35B-A3B模型,可以通过以下Python代码实现:

from transformers import AutoModelForCausalLM, AutoTokenizer model_id = "0xSero/Qwen3.5-35B-A3B-REAP-20pct" tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained( model_id, torch_dtype="auto", device_map="auto", ) messages = [{"role": "user", "content": "Write a quicksort in Python."}] text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) inputs = tokenizer(text, return_tensors="pt").to(model.device) outputs = model.generate(**inputs, max_new_tokens=512) print(tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True))

使用vLLM服务

对于需要更高性能的场景,可以使用vLLM部署REAP剪枝后的模型:

vllm serve 0xSero/Qwen3.5-35B-A3B-REAP-20pct \ --tensor-parallel-size 4 \ --gpu-memory-utilization 0.9 \ --max-model-len 32768

复现REAP剪枝过程

如果想在自己的模型上应用REAP剪枝,可以按照以下步骤进行:

git clone https://github.com/cerebras/reap cd reap bash scripts/build.sh python -m reap.layerwise_prune \ --model_name Qwen/Qwen3.5-35B-A3B \ --dataset_name "theblackcat102/evol-codealpaca-v1:250,open-r1/Mixture-of-Thoughts[code]:250,open-r1/Mixture-of-Thoughts[math]:250,open-r1/Mixture-of-Thoughts[science]:250" \ --compression_ratio 0.20 \ --prune_method reap \ --seed 42 \ --renormalize_router_weights true

REAP剪枝的未来展望

REAP剪枝技术为MoE模型的高效部署开辟了新途径。通过智能地结合路由门值和专家激活范数,它实现了在保持性能的同时显著降低资源消耗的目标。随着研究的深入,我们可以期待REAP剪枝在以下方面的进一步发展:

  1. 更高压缩率:探索在更高压缩率下保持性能的方法,进一步降低资源消耗。

  2. 动态剪枝:开发基于输入内容动态调整专家集合的技术,实现更精细的资源分配。

  3. 跨模型适用性:将REAP剪枝技术应用于更多类型的MoE模型,拓展其适用范围。

REAP剪枝代表了MoE模型压缩领域的一项重要进展,它不仅为大型语言模型的高效部署提供了实用解决方案,也为未来的模型优化研究提供了新的思路。

引用

如果您在研究中使用了REAP剪枝技术,请引用以下论文:

@inproceedings{lasby2025reap, title={REAP the Experts: Why Pruning Prevails for One-Shot MoE Compression}, author={Lasby, Mike and others}, booktitle={ICLR 2026}, year={2026} }

通过结合路由门值与专家激活范数的双重考量,REAP剪枝技术为MoE模型的高效压缩提供了一种创新且实用的解决方案。它不仅能够显著降低模型的资源消耗,还能在各种任务中保持出色的性能,为大型语言模型的部署和应用开辟了新的可能性。

【免费下载链接】Qwen-3.5-28B-A3B-REAP项目地址: https://ai.gitcode.com/hf_mirrors/0xSero/Qwen-3.5-28B-A3B-REAP

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

http://www.zskr.cn/news/1418744.html

相关文章:

  • MindSpeed-LLM框架深度解析:华为昇腾AI生态的大语言模型加速方案
  • 别死记硬背!用一个“猜数字”游戏,掌握库函数的学习方法
  • 鼎捷Tiptop ERP T100/GP 5.3版本Webservice接口开发:从零到部署的完整避坑指南(含SoapUI测试)
  • Sora 2动效渲染瓶颈全拆解:从GPU管线调度到CSS Layering的12ms响应达标实操指南
  • AI赋能社交:从算法匹配到动态理解与主动赋能的约会新范式
  • 告别ifconfig!用networkctl命令优雅管理你的Linux网络(systemd-networkd实战)
  • Midjourney Remix mode保姆级教程:手把手教你修改提示词,让AI更懂你
  • 别再踩坑了!手把手教你用YOLOv5 v6.0 + ONNX在Ubuntu 20.04的ROS上部署目标检测(附VMware虚拟机USB摄像头连接完整流程)
  • 脉冲神经网络与二进制权重的能效优化技术
  • 千问大模型在阿里生态中的核心应用场景与落地价值
  • 别再折腾Docker了!Ubuntu 22.04上源码编译ZLMediaKit保姆级教程(含libsrtp/openssl避坑指南)
  • 【评测】CSDN大模型热点洞察创作流程与评测
  • Vue+Element UI项目里,Table数据刷新后展开状态丢失?教你用expand-row-keys动态恢复
  • FlashAttention训练反向传播:梯度是怎么传回来的?
  • 用DeepXDE搞定薛定谔方程:一个Python物理信息神经网络(PINN)实战教程
  • 为什么92%的团队用Sora 2做不出可用元宇宙资产?揭秘3层隐性技术门槛与2024Q2最新破解方案
  • 随心剪 99.2 分断层登顶!AI 智能剪辑赛道权威评测 TOP1
  • 【C++】一文搞懂引用特性,附带顺序表完整代码实现
  • Cortex-M中断处理机制与调试技巧详解
  • 别再死记硬背公式了!用Python手写线性回归,从MSE、R²到梯度下降一次搞懂
  • Bootstrap方法避坑指南:什么时候用?什么时候千万别用?(附R代码验证)
  • 从安装到第一个视觉项目:Halcon20.11环境搭建与‘Hello World’实战
  • 华为BGP选路实战:用这3个属性(PrefVal、Local_Pref、MED)轻松搞定网络流量调度
  • 告别‘丑地图’!用ArcGIS Pro的视觉效果和后处理,轻松打造高级感分析图
  • RAG 04:向量数据库与索引算法
  • Shader - 水体(保姆级)
  • 鼎捷Tiptop ERP 5.3版本下,手把手教你用SoapUI测试一个用户登录WebService接口
  • RAG 技术体系:从向量检索到生产级 Pipeline
  • 保姆级教程:用PyTorch Geometric搭建GCN,实战DEAP脑电情绪分类(附完整代码)
  • 大数据处理:Spark与分布式计算