LLM System: SGLang 01 - 共享专家融合

这篇笔记把 SGLang 共享专家融合的计算语义、权重布局和执行路径压缩成六张结构图。图中的实现判断以 2026-07-29 的 SGLang main 分支为准;正文只补充图中容易误读的部分。 从双路径到一次 MoE GEMM 融合不是让 Router 在 Shared Expert 与 Routed Expert 之间做选择。Shared Expert 仍然是必经计算,只是被追加为一个额外的 Expert Slot,并随路由结果一起交给 MoE Kernel。这样 Routed Expert 与 Shared Expert 可以在一次 MoE GEMM 中完成,省去独立的 Shared Expert GEMM 与 Kernel Launch。 Layout、Top-K 与权重重映射 普通布局是在 N 个 Routed Expert 后追加一个 Shared Expert,得到 N + 1 个 Slot,并把实际执行的 Expert 数增加一。当前 DeepEP / Mega 系列后端还需要为各个 EP Rank 保留本地 Shared Expert Slot,因此布局会扩展为 N + EP_size。Checkpoint Loader 随后把 mlp.shared_experts 的权重重映射到追加的 Slot;只改 Expert ID 而不改加载布局,并不能得到正确结果。 ...

July 28, 2026 · 2 min

LLM System: DeepEP v2 弹性通信架构图解

这篇笔记把 DeepEP v2 的对象、内存、同步和数据路径压缩成五张结构图。正文只补充图中不适合展开的语义边界。 架构总览 ElasticBuffer 管理 Dispatch / Combine 所需的通信与 Buffer 资源;EPHandle 保存一次 EP 数据传输的元数据,包括确定性模式、Dispatch 缓存和 GroupGEMM 的 Token Padding 信息。 ElasticBuffer:物理分段,虚拟连续 CPU 与 GPU 内存物理上分段,但通过 CUDA VMM 映射为连续虚拟地址,再注册为 NCCL Window。这里的 Window 提供跨 Rank 访问语义;它本身不等同于 NVSHMEM 原生的对称内存抽象。 Barrier 与通信计算重叠 图中展示的是全局 Barrier 的基本心智模型。Hybrid 分层 Barrier 的并行模式还存在一个容易误判的弱同步边界:A0 分别看到 B0 的 Scale-out 到达和 A1 的 Scale-up 到达,并不能推出 B1 已经到达。局部可见的两条同步事实不能自动合成为全局强 Barrier。 async_with_compute_stream 允许 Barrier 延迟返回 Event,在真正消费通信结果之前继续执行独立计算;prefer_overlap_with_compute 则通过减少通信占用的 SM,为计算留下资源。 ...

July 28, 2026 · 1 min

LLM System: 基础知识速查 01 - MoE

moe f&b 计算流程 Router Router 计算每个 token 应该路由到哪些 expert。 Dispatch Dispatch 根据 router 结果,把 token 分发到对应 expert 的输入 buffer。 FFN 每个 expert 内部执行自己的 FFN / MLP 计算。 Combine Combine 把各 expert 的输出按路由权重聚合,并还原到 token 维度。 MoE softmax MoE做router的意义是什么? MoE 做softmax的意义和一般softmax意义类似,都是让logits能被解释为概率。 被解释为概率/加权的几个要求:正数,和为1,尺度一致, ...

June 16, 2026 · 1 min

LLM Theory: MuP 03 - 为什么MoE模型训练起来有难度?MuP视角

众所周知MoE有一个Router,也就是门控单元,基于topk选择路由到的专家。训练稳定的基本思想是希望随着宽度d增大,模型的activation、grad、delta loss、delta weight变化都比较小。 \[ \operatorname{RMS}(h_l)=\Theta(1),\quad \operatorname{RMS}(\Delta h_l)=\Theta(1),\quad \Delta L=\Theta(1). \] 不好分析的根源是因为topk不光滑,所以找不到一个有界的全局利普希茨常数。 也就是假设两个输入的x很接近,但是在router这里发生了跳变,导致L也就是$\lVert f(x_2)-f(x_1)\rVert/(x_2-x_1)$趋近于无穷大。 所以说topk没有全局的LipschitzBound。那么为什么lipschitz常数对mup会有影响,原因是对于某个token的一次backward里面参数更新,如果weight更新后导致路由切换,delta y的计算就不只是简单的$\Delta y\approx J_\theta y\Delta\theta$,而是两个expert相减。$\Delta y=F_j(h)-F_i(h)$. 这样可能会导致,$\lVert\Delta x\rVert\to0,\lVert\Delta y\rVert=\Theta(1)$.这个导致的最直接问题就是我们没有办法再去用一阶泰勒近似delta y了,也就是用dense的方式,没有办法用局部梯度去正确描述某个token的路由表随参数更新导致变化的这个事件,也就不能囊括所有的梯度更新类型。 从另一个角度,如果强行进行泰勒展开(当然肯定有各种不严谨,我是工程民科,凑合看看算了),就有$y(\theta+\Delta\theta)-y(\theta)=J_\theta y\Delta\theta+o(\lVert\Delta\theta\rVert)$. 但最大的问题是$\lVert y(\theta+\Delta\theta)-y(\theta)\rVert=\Theta(1)$,$\frac{\lVert y(\theta+\Delta\theta)-y(\theta)\rVert}{\lVert\Delta\theta\rVert}$所以分子分母不同阶。taylor余项也不是无穷小的。 要是想做MoE的mup,就得想办法去控制它由于router切换导致的跳变大小,也就是说必须要建模触发router跳变的条件,以及给跳变以后专家输出的diff加上一个bound。路由跳变对均方特征的贡献可以如下描述: \[ \mathbb{E}\left[\lVert\Delta y_{\mathrm{switch}}\rVert^2\right] \lesssim \int_0^{2\varepsilon}q(u)f_\gamma(u)\,\mathrm{d}u. \] f描述有多少token距离路由边界为u,q表征输出跳变的距离,2sigma代表参数更新能跨越多宽的边界。那么这件事容易吗? 我们之前只是假设了输入不变,在mup前面的系列里面,mup的目标之一是要让中间的特征发生一些非退化的显著变化,$\Delta h=\Theta(1)$。所以即使router参数冻结了,h的变化也会导致路由切换。这个问题会让特征更新的尺度推导变得困难。 总而言之,传统 Dense μP 能闭环,是因为给定每层的: \[ \operatorname{RMS}(h),\quad \operatorname{RMS}(\delta),\quad \operatorname{RMS}(\Delta W), \] 就能递推出下一步的特征更新: \[ \Delta h\approx J_W h\Delta W, \] 而这个更新尺度仍只由矩阵维度、初始化尺度和学习率决定。 MoE 不闭环,是因为即使这些 RMS 都已知,仍然无法确定输出更新: \[ \Delta y = \Delta y_{\mathrm{smooth}} + \Delta y_{\mathrm{switch}}. \] 第二项还取决于两个额外变量: ...

July 26, 2026 · 1 min