<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>混合专家 on Chico's Tech Blog</title><link>https://realtime-ai.chat/tags/%E6%B7%B7%E5%90%88%E4%B8%93%E5%AE%B6/</link><description>Recent content in 混合专家 on Chico's Tech Blog</description><image><title>Chico's Tech Blog</title><url>https://github.com/chicogong.png</url><link>https://github.com/chicogong.png</link></image><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 11:00:00 +0800</lastBuildDate><atom:link href="https://realtime-ai.chat/tags/%E6%B7%B7%E5%90%88%E4%B8%93%E5%AE%B6/index.xml" rel="self" type="application/rss+xml"/><item><title>MoE 为什么成了大模型标配</title><link>https://realtime-ai.chat/posts/moe-architecture/</link><pubDate>Thu, 07 May 2026 11:00:00 +0800</pubDate><guid>https://realtime-ai.chat/posts/moe-architecture/</guid><description>DeepSeek V3 一共 6710 亿参数,推理时每个 token 只用 370 亿。这篇讲清 MoE 怎么做到「参数量大但推理便宜」,以及它换来的工程代价。</description><content:encoded><![CDATA[<p>DeepSeek V3 一共有 6710 亿参数。但你每问它一句话,真正参与计算的只有 370 亿——剩下的 95% 在显存里待命,一个 token 都不碰。</p>
<p>这听起来像偷工减料,其实是过去三年大模型架构最重要的一次转向。到 2026 年,你叫得出名字的开源旗舰里,几乎没有一个还是&quot;老老实实每个参数都算&quot;的稠密模型:DeepSeek V4-Pro(1.6 万亿总参 / 490 亿激活)、Qwen 3.5(3970 亿 / 170 亿)、Llama 4 Maverick(4000 亿 / 170 亿)、Kimi K2(1 万亿 / 约 320 亿)、Mistral Large 3(6750 亿 / 410 亿)。这个架构叫 Mixture-of-Experts,混合专家。</p>
<p>它解决的是一个很具体的矛盾:模型想变聪明,最直接的办法是堆参数;但参数一多,推理就慢、就贵。MoE 的本质,是<strong>把&quot;模型有多少知识&quot;和&quot;算一次要花多少钱&quot;这两件事拆开</strong>。这篇讲清楚它怎么做到的,以及它换来了什么样的工程代价。</p>
<h2 id="先讲清楚稠密模型贵在哪">先讲清楚:稠密模型贵在哪</h2>
<p>传统的大模型——也就是 GPT-3、早期 Llama 那种&quot;稠密&quot;(dense)模型——有一个朴素的规则:<strong>每个 token 经过每一层时,所有参数都要参与计算</strong>。</p>
<p>一个 700 亿参数的稠密模型,处理一个 token 就要做大约 700 亿次乘加。处理一句 100 字的话,乘以 100。参数翻倍到 1400 亿,这个账单也跟着翻倍。算力、显存带宽、电费,全是线性涨上去的。</p>
<p>问题是,模型里真的每个参数对每个 token 都有用吗?</p>
<p>直觉上不是。你问它&quot;今天北京天气&quot;,和你让它&quot;写一段 Rust 的并发代码&quot;,用到的知识完全不同。稠密模型的浪费就在这:不管你问什么,它都把&quot;写代码的脑区&quot;和&quot;聊天气的脑区&quot;全部点亮算一遍。</p>
<p>MoE 想做的事很朴素——<strong>该用哪块脑子,就只用哪块</strong>。</p>
<h2 id="用一个类比把它讲透">用一个类比把它讲透</h2>
<p>把稠密模型想象成一家公司,每来一个问题,全公司 200 个人都得开会、都得发言,然后把意见汇总。问题再小也这么干。开会效率极低,但好处是没人会漏掉。</p>
<p>MoE 是另一种公司。同样养着 200 个员工(这叫<strong>专家</strong>,expert),但每来一个问题,门口坐着一个<strong>调度员</strong>(这叫<strong>路由器</strong>,router 或 gating network),它扫一眼问题,只挑最对口的 8 个人进会议室,其余 192 人继续待岗。</p>
<p>关键点来了:</p>
<ul>
<li><strong>这家公司&quot;知识总量&quot;还是 200 人份的</strong>——养着这么多专业各异的人,什么问题都有人能接。</li>
<li><strong>但&quot;开一次会的成本&quot;只有 8 人份</strong>——大部分人这次根本没参与。</li>
</ul>
<p>这就是 MoE 那句听起来矛盾的话——&ldquo;参数量大,但推理便宜&rdquo;——的全部秘密。<strong>总参数</strong>(200 人)决定模型的知识容量;<strong>激活参数</strong>(8 人)决定你每跑一次推理的算力账单。MoE 把这两个数字解耦了。</p>
<p>DeepSeek V3 就是个标准样本:总参 6710 亿,但每个 token 只激活 370 亿。它每个 token 的计算量,大约相当于一个 370 亿的稠密模型,但它肚子里装的知识,是 6710 亿那个量级的。官方的说法是,它每 token 的有效计算成本,大致是同等总参稠密模型的二十分之一。</p>
<h2 id="路由器整个架构的开关">路由器:整个架构的开关</h2>
<p>MoE 里最精巧、也最容易出问题的零件,是路由器。</p>
<p>它的工作具体发生在模型的每一个 MoE 层里。一个 token 进来,路由器算一个打分,给当前层的每个专家打个分,然后选出得分最高的几个(术语叫 top-K,DeepSeek V3 是 top-8),只把这个 token 送进这几个专家。专家各自算完,按打分加权汇总,再往下一层走。下一层又是一次全新的挑选。</p>
<pre class="mermaid">flowchart TD
  T[输入 token] --> R{路由器<br/>给每个专家打分}
  R -->|得分 0.41| E1[专家 1 ✓]
  R -->|得分 0.27| E2[专家 2 ✓]
  R -->|得分 0.02| E3[专家 3 跳过]
  R -->|得分 0.18| E4[专家 4 ✓]
  R -->|得分 0.01| E5[专家 ... 跳过]
  E1 --> M[加权汇总]
  E2 --> M
  E4 --> M
  M --> O[进入下一层]
  style E3 fill:#eee,stroke:#bbb,color:#999
  style E5 fill:#eee,stroke:#bbb,color:#999
  style R fill:#fde7c2,stroke:#e8b23c
</pre><p>这里有几个反常识的点,值得单独说:</p>
<p><strong>专家不是&quot;按学科分工&quot;的。</strong> 你不会找到一个&quot;数学专家&quot;或者一个&quot;法语专家&quot;。训练完之后去看,专家学到的分工往往很碎、很说不清——可能某个专家专门处理标点和换行,某个专门管代码缩进。分工是训练里自己涌现出来的,人没法预先指派。</p>
<p><strong>路由是逐层、逐 token 的。</strong> 不是一句话进来挑一次专家就定了。一个 token 在 60 层里,可能经过 60 组完全不同的专家组合。所以&quot;激活了哪些专家&quot;是个非常动态的东西。</p>
<p><strong>2026 年的主流是&quot;细粒度专家 + 共享专家&quot;。</strong> DeepSeek 带火的这套设计有两个改动。一是<strong>把专家切小切多</strong>——与其养 8 个大专家,不如养 256 个小专家,每次激活 8 个。专家越细,组合越多,分工越能专精。二是留一两个<strong>共享专家</strong>(shared expert)常驻,不参与路由,每个 token 都过——专门负责&quot;标点、语法、常识&quot;这类谁都要用的通用能力,这样路由的那些专家就能腾出来专攻各自的细分领域。</p>
<h2 id="激活参数-vs-总参数一张表说清楚">激活参数 vs 总参数:一张表说清楚</h2>
<p>这两个数字,是 2026 年看模型参数表时唯一真正要分清的事。它们决定了完全不同的东西:</p>
<table>
  <thead>
      <tr>
          <th>维度</th>
          <th>总参数</th>
          <th>激活参数</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>它代表</td>
          <td>模型的知识容量</td>
          <td>单 token 的计算量</td>
      </tr>
      <tr>
          <td>决定</td>
          <td><strong>显存</strong>够不够装得下</td>
          <td><strong>推理速度</strong> / 单次成本</td>
      </tr>
      <tr>
          <td>DeepSeek V3</td>
          <td>6710 亿</td>
          <td>370 亿</td>
      </tr>
      <tr>
          <td>Qwen 3.5</td>
          <td>3970 亿</td>
          <td>170 亿</td>
      </tr>
      <tr>
          <td>Llama 4 Maverick</td>
          <td>4000 亿</td>
          <td>170 亿</td>
      </tr>
      <tr>
          <td>Kimi K2</td>
          <td>1 万亿</td>
          <td>约 320 亿</td>
      </tr>
  </tbody>
</table>
<p>看这张表,你能立刻得到一条很实用的判断:一个标成 &ldquo;397B-A17B&rdquo; 的模型,<strong>前面那个数(397B)是你买显存时要看的,后面那个数(17B)是你估推理速度时要看的</strong>。两者别搞混——这是 MoE 部署里最常见的认知错误。</p>
<p>它带来的实际效果是反直觉的:Qwen3.5 那个 35B-A3B 的 MoE 版本,占的显存远比 9B 的稠密版大(光权重就 21GB 对 5.8GB),但在同一张卡上,它的吞吐和首 token 延迟反而更好。<strong>显存占得多,但跑得快</strong>——因为速度只跟那 3B 激活参数有关。</p>
<h2 id="天下没有白吃的午餐moe-的工程代价">天下没有白吃的午餐:MoE 的工程代价</h2>
<p>讲到这你可能觉得 MoE 是纯赚的——同样的算力,能装下大得多的模型。但它把成本从&quot;算力&quot;转移到了别的地方,而且这些地方往往更难搞。</p>
<p><strong>第一笔账:显存。</strong> 推理时虽然只算 8 个专家,但你不知道下一个 token 会路由到哪 8 个,所以<strong>全部 256 个专家的权重都得待在显存里</strong>。MoE 省的是算力,不是显存。Kimi K2 这种 1 万亿参数的模型,FP16 精度下光权重就要 2TB 量级的显存,只能靠多卡集群伺候。&ldquo;激活参数小&quot;绝不意味着&quot;能在小显卡上跑&rdquo;。</p>
<p><strong>第二笔账:负载均衡。</strong> 路由器是学出来的,它会&quot;偏心&quot;。如果不管,训练到后面会出现&quot;马太效应&quot;——几个专家因为早期表现好,被路由器越选越多,练得越来越强;另一批专家几乎没 token 光顾,等于白养。极端情况下,你那个 256 专家的模型,实际只有几十个在干活,知识容量大打折扣。</p>
<p>早期的解法是加一个<strong>辅助损失</strong>(auxiliary loss),硬性惩罚&quot;分配不均&quot;,逼路由器雨露均沾。但这个惩罚项会和&quot;把 token 送给最对的专家&quot;这个主目标打架,损害模型质量。DeepSeek V3 改用了一个<strong>无辅助损失</strong>的方案:给每个专家的路由打分加一个可调的偏置项,某个专家最近太忙就把它的偏置调低、太闲就调高——只动路由、不进损失函数。这个细节,正是 DeepSeek 那一代模型训练能又稳又便宜的关键之一。</p>
<p><strong>第三笔账:部署复杂度。</strong> 专家太多,一张 GPU 装不下,得<strong>专家并行</strong>(expert parallelism)——把 256 个专家摊到几十张卡上。这下问题来了:一个 token 路由到的 8 个专家,可能散在 8 张不同的卡上,token 得先被发过去、算完再收回来。这种跨卡通信(all-to-all)是 MoE 推理的头号瓶颈,而且负载是<strong>动态</strong>的——这一批 token 可能全挤向某几张卡,那几张卡就成了堵点。稠密模型完全没有这套烦恼。</p>
<p>所以 MoE 不是&quot;免费午餐&quot;,而是一笔<strong>用工程复杂度换计算效率的交易</strong>。它假设你有能力搞定多卡集群、搞定专家并行、搞定负载均衡。对个人开发者和小团队,在本地跑一个大 MoE,门槛其实比同等&quot;能力档位&quot;的稠密模型更高——因为卡在显存上。</p>
<h2 id="为什么-2026-年几乎全是-moe">为什么 2026 年几乎全是 MoE</h2>
<p>把上面的账合起来算,结论就很清楚了。</p>
<p>到 2026 年,纯靠堆稠密参数这条路已经走到头:再大的稠密模型,推理成本高到没法规模化服务。而模型厂商面对的需求又是确定的——既要在榜单上有竞争力(要知识容量、要总参数),又要能用可接受的成本服务上亿用户(要推理便宜、要激活参数小)。</p>
<p>MoE 是目前唯一能同时满足这两头的架构。它让厂商可以理直气壮地把总参数推到万亿级,同时把激活参数压在二三十亿到五十亿这个&quot;服务得起&quot;的区间。DeepSeek、Qwen、Llama、Kimi、Mistral——这些团队各自独立地收敛到同一个设计,不是跟风,是因为约束条件相同,最优解也就相同。</p>
<p>但要泼一点冷水:MoE 不是没有代价的银弹。它把模型能力做大了,却把工程门槛也抬高了——显存、通信、负载均衡,每一样都需要专门的基础设施。<strong>它真正改变的,不是&quot;模型能多强&quot;,而是&quot;多强的模型能被服务得起&quot;。</strong> 对 2026 年要做规模化部署的团队来说,这恰恰是最重要的那个问题。</p>
<hr>
<p>参考来源:</p>
<ul>
<li><a href="https://arxiv.org/html/2412.19437v1">DeepSeek-V3 Technical Report (arXiv)</a></li>
<li><a href="https://arxiv.org/pdf/2401.06066">DeepSeekMoE: Towards Ultimate Expert Specialization (arXiv)</a></li>
<li><a href="https://www.spheron.network/blog/moe-inference-optimization-gpu-cloud/">MoE Model Inference on GPU Cloud: Expert Parallelism, Memory, and Cost (2026) — Spheron</a></li>
<li><a href="https://qubittool.com/blog/llm-landscape-may-2026-deepseek-qwen-llama-comparison">LLM Landscape May 2026: DeepSeek V4 vs Qwen 3.5 vs Llama 4 — QubitTool</a></li>
<li><a href="https://huggingface.co/blog/NormalUhr/moe-balance">A Review on Load Balancing Strategy in MoE LLMs — Hugging Face</a></li>
</ul>
]]></content:encoded></item></channel></rss>