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

MoE Router:谁来决定 Token 去哪个 Expert

本文基于昇腾CANN和昇腾NPU围绕 MoE Router 技术展开。MoEMixture of Experts把一个大 FFN 拆成几十到几百个小专家每个 Token 只激活其中 Top-K 个。Router 就是这个分发系统——它看到每个 Token 后决定你去 Expert 15你去 Expert 88。CANN 在昇腾NPU上把 Router 的 Gate 计算和 Token 分发绑在一起用 HCCL 的 AlltoAll 完成跨卡通信。Router 就是一个小型网络Router 本身有多简单一个 Linear(hidden_dim, num_experts) 加 Softmax。参数量 4096 × 256 ≈ 1M——不到整个 MoE 层 2B 参数的 0.05%。但它要做的事是全局性的为每一个 Token 从 256 个 Expert 里选出 Top-8。# MoE Router——一个轻量网络全局决策classMoERouter(torch.nn.Module):def__init__(self,hidden_dim4096,num_experts256,top_k8):super().__init__()self.gatetorch.nn.Linear(hidden_dim,num_experts,biasFalse)self.top_ktop_kdefforward(self,x):# x: [batch * seq_len, hidden_dim]logitsself.gate(x)# [B*S, 256]scoresF.softmax(logits,dim-1)topk_weights,topk_indicestorch.topk(scores,self.top_k,dim-1)# 归一化——选中的 8 个 Expert 权重加起来为 1topk_weightstopk_weights/topk_weights.sum(dim-1,keepdimTrue)returntopk_weights,topk_indices为什么是 Top-8 而不是 Top-1因为单个 Expert 通常只在某个特定子领域很强——Expert 15 专长代码、Expert 88 专长数学。一个问题可能同时涉及代码和数学需要两个 Expert 共同回答。Top-K 让每个 Token 可以用多个 Expert 的组合表示。Router 的训练是通过辅助 Load Balancing Loss 来约束的。没有这个约束Router 会倾向于把大部分 Token 发给同一个 Expert——模型的容量利用率极低。Load Balancing Loss 惩罚 Token 分配的不均匀——让 256 个 Expert 各收到约 1/256 的 Token。Token 分发的通信瓶颈Router 算完后Token 要被实际发送到对应的 Expert 所在的卡上。假设 8 卡每卡存 32 个 Expert。一个 Token 选中的 Expert 可能分布在 8 张不同卡上——Router 的输出是一个 Device 级别的分发计划。// MoE 的 AlltoAll 通信——跨卡分发 TokenvoidTokenDispatch(int*topk_indices,float*hidden_states,intnum_tokens,intnum_devices){// 统计每张卡要发多少 Tokenintsend_counts[8]{0};for(intt0;tnum_tokens;t)for(intk0;ktop_k;k)send_counts[topk_indices[t*top_kk]/experts_per_device];// HCCL AlltoAllV——不等长收发因为每卡负载不同HcclAlltoAllV(hidden_states,send_counts,send_displs,recv_buffer,recv_counts,recv_displs,HCCL_FLOAT,num_devices,hccl_comm);}分发用的是 HCCL 的 AlltoAllV——不等长的 All-to-All。每卡收到的 Token 数量不同——卡 1 可能收到 200 个 Token卡 2 只收到 150 个。AlltoAllV 允许每对 (src, dst) 之间发送不同长度的数据。4096 Token 的 Batch × Top-8 Expert 32768 次 Expert 访问每次发送 8KB 向量总共约 256MB 的 AlltoAll 数据量。8 卡 800GB/s HCCS 互联下通信时间约 0.3ms。昇腾NPU的通信计算重叠CANN 的优化策略是不等 AlltoAll 完全完成就开始计算。收到一部分 Token 后Expert 前向就开始了——边收边算。HCCL 的 AlltoAllV 是异步的——CPU 提交后立刻返回DMA Engine 在后台搬数据。还有一个策略是容量限制——每个 Expert 最多处理 C 个 Token超出的 Token 不计入该 Expert。C (total_tokens / num_experts) × 1.25。超出的 Token 被丢弃——走 Residual 连接跳过 MoE 计算。这个丢弃对精度影响很小——超出容量限制的 Token 本来就是 Expert 的边缘负载。参考仓库MoE Router 等 Transformer 算子HCCL 集合通信库DeepSeek-R1 推理配方
http://www.zskr.cn/news/1373589.html

相关文章:

  • 从入门到精通:SpringBoot开发全攻略
  • 15.纯手写无封装!ADB/Fastboot 底层命令封装,刷机维修神器源码
  • 2026年了,还在为电力负荷预测发愁?基于XGBoost的多变量单步预测全栈实战!
  • 别再让某个用户占满硬盘了!手把手教你给CentOS 7/8的/home目录设置磁盘配额(ext4/xfs双版本)
  • 告别电脑休眠困扰:MouseJiggler鼠标抖动工具完全指南
  • 工业级大模型学习之路024:LangChain零基础入门教程(第七篇):RAG 系统评估、全链路调优
  • CentOS 7.9上EMQX 5.0.9安装踩坑实录:从openssl到端口占用的完整排错指南
  • Agent Harness 系列:为什么你的 Agent 演示很顺、上线就崩?
  • 打印机:解决windows打印任务卡死或者打印纸张喷墨不清晰的问题
  • 如何在Windows上实现macOS级别的三指拖拽体验?
  • 【2026】ISCC 长虹守卫
  • 16.高通 9008 深度救砖实战!EDL 协议解析 + Python 刷机源码直接运行
  • 2026年江苏井下清仓机器人直销厂家的选择逻辑与价值剖析 - 2026年企业推荐榜
  • 别再死记硬背了!用Python+PyTorch手把手复现感知机到LSTM,帮你把深度学习笔记变活
  • CompressO:重新定义本地视频压缩的三大创新维度
  • 保姆级教程:用再生龙Clonezilla Live给Ubuntu 22.04做个全盘‘快照’(含移动硬盘挂载避坑)
  • 长亭洞鉴(X-Ray)软件版本部署
  • 【Gemini SQL生成实战指南】:20年DBA亲授3大避坑法则与5步精准查询生成法
  • ARM SME架构向量点积指令SVDOT与UDOT深度解析
  • 兆赫兹X射线光子相关光谱技术原理与应用
  • 统信UOS 1060的UDOM工具箱,除了开长文件名,还能怎么玩?
  • 快速找回遗忘压缩包密码的终极免费解决方案
  • 联想拯救者R9000P装Ubuntu 20.04开机报ACPI BIOS Error?别慌,试试这个nomodeset参数
  • 大模型Function Calling工程实战:从协议到生产的完整指南
  • 成都型钢今日报价 实时行情走势现货价格查询首选盛世钢联 - 四川盛世钢联营销中心
  • 青岛国资控股的上市公司有哪些? - 品牌2025
  • 别再重启了!Win11开机或使用中卡死的终极排查与修复指南(附免费工具清单)
  • 深度学习入门DAY1
  • 如何预估JVM内存
  • openEuler 22.03 LTS上搭建FTP服务器,三种认证模式(匿名/本地/虚拟用户)保姆级配置与安全对比