小红书开源了个库,干的是 MoE 最脏的活
几百张 GPU 跑一个大模型,最魔幻的画面不是机房冒热浪,是一批卡还在满负荷嘶吼,另一批已经算完了,闲着,等。
等到什么程度呢,理想吞吐和真实吞吐能差出一倍。你按小时付钱租的卡,可能有接近一半的时间在围观别的卡干活。
今天早上把这层窗户纸捅破、还顺手把方案开源了的,不是英伟达,不是 DeepSeek,是小红书。对,就是你拿来搜菜谱和装修避坑的那个 App。他们和北大一起发了个叫 UltraEP 的库,论文挂在 arXiv,代码在 GitHub,技术报告的标题里直接写了「最优」两个字。
好家伙,这口气不小。我把技术报告翻完,想跟你唠唠这件事,因为它解的其实是一个后端工程师听着耳朵起茧的老问题,只是这次的版本,难伺候得多。
先把背景铺平。现在的主流开源大模型,DeepSeek-V3、Qwen3、GLM,基本都是 MoE 架构(混合专家,模型里养几百个「小专家」,每个 token 进来只叫醒其中几个干活,用零头的算力撬动巨大的总参数量)。专家多到一张卡根本装不下,就得把它们摊到几十张卡上去,这叫专家并行,圈里简称 EP。token 要去找分给自己的专家,就得在卡和卡之间来回传数据,术语叫 all-to-all 通信,人话就是所有卡跟所有卡互相寄快递。
麻烦在于,每个 token 叫醒哪几个专家,是模型内部一个叫路由器的小网络当场拍板的,每个 token、每一层,都现场分。而 token 们的口味出奇地一致,总有几个专家红得发紫,门口排长队,另一些门可罗雀。落到硬件上就是,热门专家所在的卡忙到显存告急,动不动 OOM(内存爆了,程序直接躺板板),冷门专家所在的卡提前下班。论文里给的数字是,卡间负载最多能差四倍。然后木桶效应登场,一步计算里所有卡都得等最忙的那张收工,才能一起进下一步。

你如果做过后端,此刻应该已经闻到熟悉的味道了。这不就是负载均衡吗。nginx 加权轮询,分库分表躲热点 key,消息队列的分区倾斜,二十年前的运维手册就在讲这些。怎么说呢,这个上古问题在 MoE 时代换了个壳又回来了,而且这次更难缠。难在三点,决定权不在你手里,路由器临场决定谁干活。变化快,每层、每个 microbatch(一小批训练数据)冷热格局都在变。最要命的是搬家成本,以前搬的是一条连接、一个分片,现在要搬的是好几个 GB 的专家权重矩阵。
业界之前的代表方案,是 DeepSeek 去年开源的 EPLB,思路是预测,看上一个时间窗口里谁热,周期性地重新摆放专家。这套逻辑有个隐含前提,负载得相对稳定,历史才有参考价值。可现在流行的细粒度 MoE 是几百个小专家,冷热切换飞快,历史信息转眼就过时,预测频频失准,搬完了发现热点已经溜到别处去了,均衡操作甚至变成负优化。按上周的天气决定今天带不带伞,大概就是这种感觉。
UltraEP 选了一条看起来最笨、也最直接的路。不猜了。等路由器分完工,拿着真实的分工清单,当场搬。每个 microbatch、每一层,实时复制热点专家,多个副本分摊排队的 token。
这个思路谁都能想到,真正的问题是代价。预测式方法可以提前干活,把搬家开销藏在别的计算后面。实时方案不行,每一微秒都赤裸裸躺在关键路径上(就是那条决定整体快慢的必经之路),而且发生在 microbatch 这个最细的粒度上,一秒钟要来很多次。搬慢了,均衡省下的时间还不够搬家花的,纯属白忙。
所以这篇工作真正的看点,不是「实时均衡」这四个字,是他们把一整套动作压进了 300 微秒。我挑几个细节讲讲,越往后越狠。
第一步,不跨机搬。专家副本只在高带宽的 scale-up 域内复制(同一个 NVLink 互联域,卡间带宽比跨机网络高一个量级),这是百微秒级搬运的物理前提。快递只在同城调拨,跨省就别想了。
第二步,方案要算得快。给哪个专家开副本、每个副本分多少活,这本身是个不小的优化问题。以前的方法把「专家放哪」和「token 往哪送」拆成两步各算各的,结果互相拖后腿。UltraEP 直接求解每个专家实例最终接多少活,把两件事耦在一起算,再借助 warp 级并行(GPU 上非常细粒度的并行单位)把 64 卡规模下的求解时间压到 100 微秒以内。
第三步,显存不能炸。每张卡预留固定的坑位放副本,运行时零动态分配,副本也不用维护优化器状态。最狠的一手是权重和梯度的 buffer 跨层复用,以 Qwen3-235B 为例,单个副本坑位的显存开销从 9.9 GB 压到 108 MB,差了将近一百倍。有点子牛逼。
第四步,通信别添新堵。你想想看,热点专家的副本多,它所在的卡要往外群发权重,自己反而成了新瓶颈,这属于按下葫芦浮起瓢。UltraEP 设计了个叫分片流式中继的策略,按实时流量搭一棵两层中继树,让闲的卡帮忙转发热的流量,数据切成小块流式传,不搞全局同步等待。爆仓的快递网点把包裹分给隔壁网点帮着发,就这个意思。
还有收尾的活,训练反向传播时,副本上算出的梯度要归约回原专家,这一步跟其他反向计算重叠着做,还做了保序累加,保证结果确定、数学上跟不搬完全等价。搬了专家,但模型训出来一个数都不差。
效果呢。训练侧,平均达到理想吞吐的 94.6%,比 Megatron-LM(英伟达的主流训练框架)提升 42%。推理侧,prefill 阶段(处理你输入的 prompt 那一段)达到理想的 90% 到 97%,比 SGLang 提升 1.56 倍。卡间不均衡度从最高 4.01 压到 1.01 到 1.04 之间,基本焊死在完美均衡线上。而且这不是实验室摆拍,他们已经拿它跑完了一个 288B 参数模型的完整预训练,长周期全程保持在理想性能的 92% 以上。

坦率讲,单看百分比可能没什么体感,我们算一笔粗账。42% 的吞吐提升,反过来讲就是同样的训练任务少用三成卡时。一次大规模预训练烧掉的 GPU 时间,是以百万美元为单位计价的,三成就是实打实的几十上百万美元,或者同样的预算多训三成的数据。推理侧更直接,prefill 快 1.56 倍,同样一批机器能扛更多并发,单位 token 的成本跟着往下掉。这些钱不靠新模型、不靠新卡,靠把「等待」两个字从集群里抠出去。
你可能不训 235B 的模型。我也不训,说实话我连几百张卡长什么样都只在照片里见过。但这事跟你我都有关系。开源模型 API 的价格这一年砍到了脚踝,很多人觉得是补贴大战,有补贴的成分,但相当一部分降价空间,就是这种 infra 工作一微秒一微秒抠出来的。厂商每把吞吐抠高几十个百分点,报价单上就多一分降价的底气。DeepSeek 当初能把价格打下来,靠的从来不只是模型架构,是从算子到通信到调度一层层抠出来的工程。这次 UltraEP 直接开源,独立的 Python/CUDA 运行时,跟具体训练框架解耦,搞 infra 的兄弟可以直接拿去集成,还附赠一套可视化 profiler,能看到每个 microbatch 里哪个专家在偷懒。
最后聊聊小红书这个反差。很多朋友的第一反应大概是,种草 App 凑什么大模型基建的热闹。但人家自研的 dots 系列模型已经悄悄迭代了好几轮,背后这个 dots infra 团队,招聘页上挂的关键词是系统顶会、OI 选手、ICPC world final。更妙的是,这篇论文的第一作者是团队里的实习生,北大在读博士。厉害了,实习生的活干成这样,转正答辩应该不用准备了。
AI 这个行业,聚光灯永远打在模型身上,跑分、参数、发布会,热闹都是它们的。但真把成本降下来、把服务撑住的,往往是这些在微秒里刨时间的系统工程师。模型决定了船能开多远,这帮人决定了船漏不漏水。
下次你看到哪家开源模型 API 又降价了,或者首字响应又快了半拍,别急着归功于发布会上的新名词。大概率是某个机房里,那几百张互相等来等去的卡,被人一微秒一微秒地,安排明白了。