【免费下载链接】Ling-3.0-tiny-base项目地址https://ai.gitcode.com/hf_mirrors/inclusionAI/Ling-3.0-tiny-base点击查看免费下载Ling-3.0-tiny-base 是蚂蚁集团 Ling 团队开源的混合线性 MoE 基础模型总参 7.9B、每 token 仅激活 1.3B。本文带你源码阅读它的 MoE 门控路由group-limited TopK 分组选择与 noaux_tc 无辅助损失负载均衡具体是怎么实现的帮助你快速看懂这份模型仓库的路由核心逻辑。 模型速览先看这份仓库里有什么这个仓库是标准的 Hugging Face 格式模型检查点核心文件一目了然文件作用config.json模型超参数路由相关配置都在这里configuration_bailing_moe_v3.py自定义 Config 类定义路由参数默认值modeling_bailing_moe_v3.py完整模型实现路由核心在BailingMoeV3Gatemodel.safetensors.index.json权重分片索引可看到每层的expert_bias关键规格摘自 config.json 与 README.md专家规模128 个路由专家 1 个共享专家num_experts: 128每 token 只激活8 个路由专家num_experts_per_tok: 8层结构24 层每 4 层为一组组内 3 层线性注意力 KDA 1 层 Gated MLA18 KDA 6 MLADense 层first_k_dense_replace: 1表示第 0 层用普通 Dense MLP从第 1 层起才是 MoE路由配置n_group: 8、topk_group: 4、topk_method: noaux_tc、routed_scaling_factor: 2.5一句话概括路由策略128 个专家先分成 8 组先选 4 个组再在组内精选 8 个专家——这就是本文主角 group-limited TopK。 路由全景一个 token 是怎么被分派的入口是 modeling_bailing_moe_v3.py 中的BailingMoeV3Gate类。每个 token 的隐状态会经过下面这条流水线打分隐状态fp32 精度router_dtype: fp32与路由权重矩阵做线性变换得到 128 个 logits激活用sigmoid而不是 softmaxscoring_func: sigmoid得到每个专家的原始得分加偏置原始得分 expert_bias负载均衡用详见下文分组 TopK 选择调用group_limited_topk选出 8 个专家归一化加权选中的 sigmoid 得分做归一化再乘以放大系数 2.5scores torch.sigmoid(logits.float()).type_as(logits) scores_for_routing scores self.expert_bias _, topk_idx self.group_limited_topk(scores_for_routing) 注意一个细节参与选专家的分数是得分 bias而最终加权用的是不带 bias 的纯得分。bias 只影响选谁不影响权重给多少这正是 DeepSeek 风格路由的典型做法。 group-limited TopK三步选出 8 个专家核心实现在 group_limited_topk 方法逻辑分三步非常好懂第一步128 个专家分成 8 组n_group: 8即每组 16 个专家。对每个 token把 128 维得分 reshape 成(8, 16)的形状——相当于专家被排队站好按索引顺序 0~15 是第 0 组16~31 是第 1 组依此类推。第二步组内取前 2 名求和选出最强的 4 组对每组取组内得分最高的 2 个专家把它们的得分相加作为该组的组得分然后从 8 个组里挑出组得分最高的4 个组topk_group: 4group_scores scores.view(num_tokens, self.n_group, -1).topk(2, dim-1)[0].sum(dim-1) group_idx torch.topk(group_scores, kself.topk_group, dim-1, sortedFalse)[1]用组内前 2 名之和而不是组内最高分来衡量组实力可以避免某个组只有一个特别强的专家导致的误判让组间竞争更稳健。第三步在 4 个入围组里精选 8 个专家把未入选组的 96 个专家得分置为-inf掩码屏蔽再对剩下的4 × 16 64个候选专家做全局 TopK取前 8 名masked_scores scores.masked_fill(~score_mask.bool(), float(-inf)) probs, top_indices torch.topk(masked_scores, kself.top_k, dim-1)为什么要先分组再选择直接对 128 个专家做 Top-8容易选中挤在同一个区域的同类专家造成负载不均。分组限制group-limited强制选出的 8 个专家必须分散在至少 4 个组里天然带来专家多样性是 Mixtral 以来业界常用的路由设计。⚖️ noaux_tc 是什么不靠辅助损失也能负载均衡传统 MoE 训练时要额外加一个负载均衡辅助损失aux loss惩罚某些专家被过度使用的现象。而 Ling 采用的是topk_method: noaux_tc配置见 configuration_bailing_moe_v3.py含义是noaux不加辅助损失路由梯度完全来自主任务 loss训练更稳定、超参更少tctoken choice / biased top-k改用可学习的expert_bias偏置做负载均衡——哪个专家最近接的 token 多了就调低它的 bias让它自动退热在源码里对应的就是这行 buffer 注册L360self.register_buffer(expert_bias, torch.zeros((self.num_experts)))打开 model.safetensors.index.json 可以看到每一层 MoE 的 gate 下都保存了一份expert_bias权重全文共出现 24 次正好对应 24 层中参与 MoE 的路由门。这份偏置是训练时学出来的负载均衡记忆推理时直接加载生效——所以这份开源检查点即使不训练也能保持训练时均衡的路由行为。另外 config.json 里的seq_aux: true是训练框架侧的标志位序列级辅助策略在这份只含推理实现的 transformers 代码中不参与前向计算属于保留的训练配置。 关键配置速查表配置项值含义num_experts128路由专家总数num_experts_per_tok8每 token 激活的路由专家数n_group8专家分组数每组 16 个topk_group4先入围的组数topk_methodnoaux_tc无辅助损失 bias 负载均衡routed_scaling_factor2.5路由专家输出整体放大系数moe_router_enable_expert_biastrue启用 expert_bias 偏置router_dtypefp32路由计算精度 专家计算训练与推理两条路径选完专家后BailingMoeV3SparseMoeBlock 负责实际计算这里也做了工程上的双路径设计训练路径用布尔索引逐专家分发 token方便梯度回传推理路径moe_infer先把所有 token 按专家编号排序argsort每个专家一次性批量处理自己名下的 token再按原顺序拼回——避免了逐 token 调用的碎片化开销是典型的 token 重排加速技巧最终输出 8 个路由专家加权求和× 2.5 1 个共享专家shared_experts的输出。共享专家对每个 token 都参与计算承担通用能力底座让路由专家更专注分工。 动手读码路线图如果你是第一次读这份源码建议按这条线走configuration_bailing_moe_v3.py先看 MoE 配置段建立参数概念BailingMoeV3Gate约 60 行本文的主角group_limited_topk三步选择法的核心 20 行BailingMoeV3SparseMoeBlock.forward看路由结果如何驱动专家计算Decoder 层的 Dense/MoE 切换理解first_k_dense_replace的生效位置✅ 小结Ling-3.0-tiny-base 的 MoE 路由可以用三个词总结分组限流group-limited TopK 保证专家多样性、无辅助损失noaux_tc 让训练更简单、偏置负载均衡expert_bias 把均衡信息固化进权重。整套路由逻辑集中在BailingMoeV3Gate约 60 行代码里即使你是 MoE 新手配合本文的三步拆解也能快速读透。这个检查点同时适合继续预训练、微调与 MoE 系统研究读完源码再上手实验效果事半功倍。赞分享【免费下载链接】Ling-3.0-tiny-base项目地址https://ai.gitcode.com/hf_mirrors/inclusionAI/Ling-3.0-tiny-base点击查看免费下载相关推荐如何读懂 Ling-3.0-flash-Fin 的 MoE 路由group-limited top-k 的负载均衡指南如何读懂 Ling 3.0 flash Fin 的 MoE 路由group limited top k 的负载均衡指南 Ling 3.0 flash FinLing-3.0-tiny-base-30T源码深度解析BailingMoeV3的KDA、Gated MLA与MoE核心实现原理Ling 3.0 tiny base 30T源码深度解析BailingMoeV3的KDA、Gated MLA与MoE核心实现原理 Ling 3.0 tinyLing-3.0-flash-Fin-fp4 MoE路由源码解析512专家、分组限制Top-8与Sigmoid门控的完整实现Ling 3.0 flash Fin fp4 MoE路由源码解析512专家、分组限制Top 8与Sigmoid门控的完整实现 Ling 3.0 flash F上一篇10个超实用的git-extras技巧一线开发者的效率提升秘籍下一篇零基础快速搞定3D点云标注我用SUSTechPOINTS完成整个项目的实战记录创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?