推理场景下的计算与数据搬运:MoE 如何重塑服务架构
专家混合现已被广泛应用于前沿模型,改变了服务结构和有用推理的经济性。它不仅增加了参数数量。它改变了每个标记激活的张量、哪些必须保持接近、哪些传输需要强本地带宽、哪些能容忍较弱的网络链路,以及内存移动、存储和调度如何贡献有效吞吐量。
最好的起点是整个服务。推理运行在由编排层(如NVIDIA Dynamo、Mooncake或自定义调度器)协调的集群中。这些服务器与vLLM或SQlang等推理服务器紧密配合,这些服务器也有自己的编排功能。
本文不会详细介绍你如何使用编排软件或应选择哪种。本文旨在概述流程及使用各种功能的原因。
用户(或其代理)会用请求(查询)发起对话,回答后对话可能会继续,并有更多请求。请求-答复是一个“回合”。在现代人工智能系统中,用户通常在客户端应用中运行(无论是图形界面还是命令行),而人工智能返回的一些回答会被该应用截获作为运行指令,比如编辑代码或搜索公司人力资源问题的指南。
AI系统也可以在数据中心自行完成部分操作,例如搜索网页。这些拦截工具操作的结果也会以请求的形式返回给AI,从而创造更多回合。
服务器会保留一个上下文(通常称为KV缓存或简称缓存),这是会话的提炼,允许每个新请求,无论是用户还是工具,都能被正确解读,从而推动整体进展。
当用户启动代理执行一个长期任务时,每小时可能有数千次轮次。对话也可能暂停,数小时甚至几天后恢复。
当请求到达推理服务器时,编排会将其放入队列,同时将输入填充工作器,连同系统提示和之前对话回合中的任何上下文一起输入。查询随后被转换为附加到对话中的新上下文。
该新上下文状态随后被转移到译码工作器。译码反复读取累积状态,生成答案令牌,这些答令牌也被附加到对话状态中。该过程可能循环于工具、代理、用户及后续输入填充工作。
运行在GPU上的模型工作者只是该令牌工厂的一部分;存储、网络和编排连接其阶段。
在工人内部,从一开始就值得区分四个运作模式:
- 预补,其中新代币的初始块被同时处理。
- 中填土,其中延续请求被附加到已有的缓存上下文上。
- 解码注意力,其中上下文用于生成新生成代币的基础。
- 解码专家每个基本新代币都由一大批专家精炼,总数是众多可能的专家。
这些方案对计算、内存和网络的需求不同。预填充和中填充密切相关,预填充是没有任何先验上下文的中填充。然而,预填充是一个常见的特殊情况,对应于经典的“聊天机器人”使用等一次性查询,且可与中填充略有不同地优化。
预填充达到高算术强度(计算与数据移动的比例),无需等待上下文被定位和读取。中填充从现有的KV缓存开始,用于先前状态,并附加新的请求输入序列。
由于新标记较少,每个标记可移动的现有数据更多,预填充的算术强度通常比预填充更为温和。
解码注意力和解码专家工作通常算术强度较低,因为新令牌较少,而之前的上下文或专家权重在译码状态下是需要移动的数据。同时,在所有情况下,注意力和专家的张量无论标记值如何都是相同的,因此与尽可能多的标记共享单次读值是有益的,即使是来自其他用户无关请求的符号,这些符号恰好同时运行且网络连接足够紧密。
将这四种模式视为相同的工作负载,会暴露出MoE模型在不同强度和不同共享模式上提供的许多结构优势。
本文将分别处理这四个阶段,有时假设它们是拆分的。聚合(模型留在一台服务器上,随着请求在各阶段间的推进重新配置)和拆分(编排者可能在另一台已配置好的机器上找到空闲时段)之间存在权衡。
通常我们会将阶段称为拆分的,聚合是前一阶段结束时始终保持当前节点可用的情况。在工作更完整地介绍后,结尾会有一节关于权衡的部分。
变换器模型是一个由重复层组组成的深度堆栈。一个组可能包含一种层,也可以包含一个全注意力层,同时包含多个线性、局部、选择性或其他优化注意力层(这是一种混合层组)。
在每个层中,注意力、共享变换、路由、选定专家和重组依次发生。这些步骤事先已知并持续重复,使同一硬件资源在不同时刻服务于流的不同部分。
这些机器也可以被描述为同样简单的循环单元。节点是一组加速器,通常是机架中的托盘,每个加速器对计算与本地快速内存。节点由CPU协调,并通过网络接口控制器(NIC)与其他节点连接。
节点堆叠成机架。当非常大的张量存在时,机架可以作为一个扩展域,当有几个较小的扩展岛,或一组流水线阶段时。数据中心网络则将受限工作者连接到存储和编排,而不是参与所有内部张量操作。
本文将沿此发展展开。它从全局服务和操作模式开始,然后将模型展开为宽层群片,并将其映射到加速器节点和机架上。由此发展出流水线、张量和专家并行性;KV缓存内存施加的限制;预填充、中填充和解码中批处理的不同值;以及多机架令牌工厂中调度的作用。
1. 编排通过队列将请求传递到工人池中
推理服务是一个集群,闲置时存储先前请求和不可变状态,然后在新请求进入上下文或之前请求重新唤醒继续时排队送达给专业工作者。
入队列尚未是批处理。每个请求携带提示令牌、可重用上下文引用、服务目标,通常还包含已有的对话或代理状态。编排器可以将其放入预填充、中填充或解码批处理中,请求可以独立加入或离开该批次,从而为新工作提供该容量。
连续批处理在调度器知道哪些工人的时隙与请求的上下文长度和服务目标匹配时效果最佳。
预填充工人从大量新令牌块中创建上下文。它们的输出是每个模型层的新KV状态,独立于创建该模型的工人存储。KV状态沿模型层移动,一回合的层K输出在下一回合会变成输入到层K。
在流水线服务器中,这自然形成了来自不同网卡的输出和输入的“种子”。
中填充工作者扩展了先前处理的上下文。缓存前缀可能包含系统和用户提示、内存、早期对话回合、代理步骤或检索的文档。大根节点可能已经缓存,而增量输入可能远小于类似的未缓存请求:一个50万上下文可能只接收几百或几千个新令牌。
解码工作者消耗处理后的积累上下文,每次生成一个或几个令牌(多标记预测已变得相当普遍)。每个生成的令牌都会增加少量新状态。
当用户、工具或代理贡献另一个输入块时,同一上下文可以返回给中填充工作者。使用工具的代理工作创建了上下文扩展和生成的重复序列,而不仅仅是一个预填充和一个译码。
一个工作者可能占据一个节点、一个托盘或机架。通过操作多个有界工作者并在它们之间移动请求和状态,服务规模会变得更大。根据精度和工作状态要求,即使是数万亿参数的模型也能容纳在现代机架级系统的总内存中。
数据中心网络依然至关重要,因为工厂必须将许多此类工作者连接到共享存储,并持续匹配工作者的配置以满足需求。KV传输可能规模达到吉字节,但它们可以通过条带或多条链路和目的地的种子传输;其移动时间可能远低于长时间解码作业的生命周期。
这种分离对性能和操作都有益。一旦缓存前缀大小、新令牌数量和工作者配置已知,预填充和中填充即可预测。解码完成时间是随机的,因为最终输出令牌的到达无法提前预测。
池之间的共享内存和存储使每个阶段以自己的节奏运行。本文后面部分将讨论队列、准备缓冲区和工作者重配置。目前重要的是,该服务是一个由可移动状态连接的阶段环。
AgentX 示例
这可以通过SemiAnalysis对话探索器进行观察。它表明,对话中的上下文增长可以非常快速,但由于压缩和其他模型行为,这些波动可能在公开讨论中难以解释。
推理上下文的编排是AI公司的竞争优势。
我们可以拿同一个数据集,提取缓存、新输入和每次结果长度的值。这个可视化展示了令牌工厂需要服务多种不同的工作负载。原则上,可以同时运行类似于这些追踪中每个点的请求(以及更多来自其他工作负载数据集的点),分配给AI集群中的某个工作者。
本文旨在综述使推理成为可能的一些主要功能,
2. KV态以不可变的斑点形式移动
数据中心级别的可复用上下文变成不可变的blob共享对象存储,而非附加在一台机器上的文件。系统提示符、项目上下文、前用户操作、工具输出和生成的标记可以分别存在于不同的blob中。
新操作读取所需的blob并附加新的blob;现有blob通常保持不变。这种仅前向的结构遵循因果变换器本身。变更可以通过回溯和创建新分支来处理,而非重写公共路径。
这些blob的持久来源是一个快速、并行、可扩展的内存和存储池。它需要足够的总带宽和网络覆盖,以便可以根据适用性和可用性选择预填充、中填充和解码工作者,而不是因为某台机器拥有唯一的上下文副本。
新闲置blob可以先进入共享网络连接的DRAM,包括节点-CPU内存和专用内存设备。随着该层级填充,分类器可以丢弃不太可能重用的blob,或将更长寿命状态提升到SSD上。
底层文本和引用通常比扩展后的KV表示小好几个数量级,因此如果分诊决定重用空间并丢弃扩展后的嵌入状态,也可以从较小的文本重建KV blob。
AI的计算可能有细微变化,因此虽然重建状态是有效的上下文,但服务可能会采取不同的方式来处理丢弃和重建的随意程度,以及在保持重要不可变状态的程度上。
想更深入了解这些斑点是如何管理的,统一基数缓存:混合模型前缀缓存的一棵树 - LMSYS 组织推荐阅读。这不是最终结论,但写得很清楚,如果你想了解更多,会指引你去其他资料来源。
还经常存在与长期运行的主体状态的复合,这些主体会积累到最大上下文,因此通常在压缩后会有许多先前的斑点被放弃,取而代之的是新的上下文。
紧缩前上下文的空间可能会被回收用于新的工作。
你可以看到在这些对话的右半部分,随着上下文接近每个模型的实际上下文极限(Opus 4.8 为 250k 代币,Fable 为 1MT)。两条线中还有“钟乳石”,看起来是短暂的,反映了 Anthropic 模型中的一些专有行为。
加速器 HBM 是“热”工作层。它成本过高且供给受限,不适合作为被动上下文存储的良好默认选项。主动前缀和后缀应在使用前不久进入 HBM,工作者完成后立即退出。
CPU DRAM 是一个有用的分阶段和组装层,尤其适用于出站状态:完成的工作负载可以将新生成的 blob 移入 CPU 内存,存储系统选择位置和冗余,之后 NIC 将它们发送到共享池。
对于输入数据,支持RDMA的系统可能允许网络直接将数据放入加速器内存,避免通过CPU的DRAM进行完整复制。CPU内存仍然对元数据、协调、部分汇编、备份路径、副本和输出预留非常有用。
当工作者使用多个GPU时,输入上下文可以并行地直接划分到目的存储器。
机架级热点缓存也非常有用,无论是作为内存/存储设备实现,还是利用分配给分布式存储池的CPU内存。系统提示等常见对象自然而然地成为候选对象。
这些缓存应保持共享的扩展资源,而非将请求绑定到一台译码机的私有状态。HBM的成本是DDR的数倍,且供给受限更大。HBM的最佳用途是当前有收入的活跃批处理中的数据。
数据输入通常大于输出。中填充通常读取较大的前缀,并附加一个有意义但较小的后缀。译码读取积累的上下文,仅附加一个或少数生成令牌的状态。
读取重复,写入通常只发生一次。系统设计应通过每条数据路径的宽度直接显示这些差异。
3. 预填充、中填充和解码创建了不同的操作模式
全局服务包含多个计算模式。它们的区别比通用标签更有用计算上界以及内存受限,因为每种设备都有不同的重用机会和不同的自然映射到硬件。
3.1 预补
经典预填充从几乎没有可重用的 KV 状态开始,处理大量新令牌。这些令牌共享权重负载,高效使用矩阵操作,并产生足够的路由激活以形成有用的共享专家批。
注意力和密集变换可达到高算术强度,因此预填充通常主要受计算限制。长初始输入上下文会增加内存流量,但这些流量很少达到 100,000 个令牌,而中填充通常超过这个范围。
3.2 中填
中填充将新令牌附加到更长的缓存前缀上。新块仍可提供数百甚至数千次激活,用于共享权重和专家重用,使算术强度提升至每字节数据数千次运算。
注意还必须读取大型现有KV状态,可能达到数十GB。因此,它处于混合状态:更多的算术重用而非解码,但比初始预填充相同新令牌计数的缓存状态流量多得多。
3.3 解码注意力
每查询输入一个或几个令牌时,解码进行推进。每个查询带来其自身的KV状态,其长度与中填充处理的状态相似。虽然预填充与中填充在缓存长度上有所不同,但译码与中填充在输入序列长度上有所不同。
这些一对少数输入标记保持了较低的算术强度,但这项工作显然主要受KV缓存内存移动的主导。
对于较长上下文,注意力读取可能超过与模型权重相关的张量运算大小。因此,注意力是现代解码中最大的操作之一,尽管大多数模型参数存在于专家层。
Delta、top-k 或线性注意力算法层可以减轻负担,但周期性使用全注意力层仍然是主要的内存负载。每个查询都带来独立的上下文,因此批量处理查询不会改变注意力的算术强度。
3.4 解码专家
专家并不局限于解码阶段。模型运行的每个地方专家都运行,且只需一个令牌的嵌入,无需上下文。查询的历史已经压缩到呈现给专家的激活中。
这使得各种设计能够在所有可用GPU上共享专家,减少每个GPU的内存容量,提高内存带宽/内存大小或内存强度比。你可以将GPU读取所有专家所需的间隔视为最佳交互性(每个用户看到的令牌率),因此如果内存带宽保持不变但GPU负责的专家数量较少,交互性可以更高。
问题是网络需求也在增长,而将专家路由所需的全对一模式是一个难以实现的。
在注意力结束时(预填充、中填充或解码),路由计算(一个对未精炼令牌操作的小张量)会为每个新令牌选择几个专家。选择同一专家的令牌即使来自不同请求,只要能及时聚集在一起以利用相同的权重负载,也能共享张量权重负载。
实际上,所有层可能有15,000名专家,因此利用这些巧合需要刻意同步,比如等待批次中所有查询完成注意后再切换到专家工作,而通过在不同邻近机器中同步多个实例来改善这一点。
如果你曾好奇为什么英伟达如此努力地将72块GPU紧密连接,这正是原因的一个重要原因。在大型代币工厂中,72台机器可以同步运行,这样一层的专家可以被分配到最多72种方式。
如果模型的某一层有256名专家,那么每层GPU只需处理3到4名专家,从而实现非常快速的全盘操作。并且实现了大量的全对全流量。
如果所有专家都能保存在SRAM中,会发生一些有趣的事情。你需要大量的加速器和庞大的网络来收集所有专家,同时回传给GPU,但现在几乎没有理由等待一批次形成。
每个专家只要有输入就可以运行。每字节加载的能量比HBM加载高达100倍,因此单个令牌运行的效率可能和之前100个队列相当。作为回报,去中心化注意力FFN(disbreakd attention-FFN,专家就是FFN),你可以释放实例无需同步。
这种优势对预填充或中填充帮助不大,因为它们可以轻松地有一批标记,可以分拣到同一层的共享队列,但它仍然可能卸载这些GPU的所有专家权重,从而优化本地内存用于更长上下文等其他用途。
网络仍然是个陷阱,基于SRAM的加速器可以在不到微秒内完成专家计算,但现在你可能要用数百万代币的全到全流量淹没连接数百个节点的交换机。
网络可能消耗的资金和功耗超过了它们连接的专家。
推理工作者可以通过协调同一模型层上的多个注意力实例来改善共享。它们的路由激活随后从一层的专家银行中提取数据,减少每个目的地需要加载的不同专家数量。
在流水线服务器中,这也意味着专家并行所用的网络连接可以本地化到该阶段,永远不会有路由需要来自其他层的专家。即便如此,每个译码请求只贡献一个新令牌,通常每次传递有8到16个路由专家,一层可能包含数百个专家。
在小批量中,共享仍然有限,内存带宽依然主导KV扫描和活跃专家负载,每字节权重的计算量极低。专家内存每位的功耗都必须非常低,无论使用何种内存。
这些机制解释了为何预填充、中填充和解码可能偏好不同的工作者配置;为何解码注意力和解码专家会偏好节点内的不同位置;以及批处理为何对每个阶段的帮助不同。
随着现代代理工作的预填充迅速扩展到50万令牌区间,内存流动非常大,尤其是在令牌解码阶段——模型生成有用的中间和最终结果的阶段。
快速且大型的3D RAM将在效率上起决定性作用。快速内存也适用于中填充。然而,对于我们现在视为正常的大型上下文,容量需要达到最低水平。
如果内存容量过小,网络损失和大量芯片群会浪费电力,相较于未来内存类型,后者将通过3D扩展而不放弃吞吐量。
虽然Vera Rubin 72能在中填充层(算术密集)上表现突出,但在切换到内存密集型解码时效果不佳,因为Rubin无法充分发挥其计算能力。
由于上下文庞大,必须确保译码工作与中填充在同一节点,避免将上下文通过网络发送到不同节点。这可能有利于一款既具备超内存耗竭又计算高效的全能芯片。
4. 流经MoE预填充层
经典预填充从注意力开始。新查询标记块关注可重复使用的前缀,如系统提示符,以及新块中的较早位置。注意操作为每个新标记产生一次激活,共享变换则为路由专家阶段准备这些激活。
路由器会为每个代币分配多个专家。如果模型选择了八个已路由的专家,每个输入代币大约会在一个包含256名或更多专家的银行中产生大约八条路径。
按代币顺序,这些记录是稀疏且交错的:相邻的代币可以有完全不同的目的地。然而在整个输入块中,每个专家可以积累一份简短的指定代币列表。
工作者按专家标识符排序或排队路由记录。所有分配给专家037的激活都变成一个消息流;分配给142的激活则成为另一个消息流。一个专家权重负载可以服务该桶中的所有激活。
多个请求可以贡献到同一桶,运行同一层的独立注意力实例可以在专家目的地合并其路由工作。将令牌顺序转换为专家顺序是MoE预填充的核心效率之一。
像NVLink这样的扩展网络可以组织为内存映射连接,因此向特定专家发送请求时,可以映射到将消息推送到指定的内存映射位置,该位置配置为硬件队列。
开始和停止时间非常短。专家可以通过类似RDMA CIQ的设备监听,利用硬件加速传递消息流,无需复杂的协议启动和停止。消息上的简单头部内嵌标识发送端和接收端。
也可以为专家返回解码工作者的返回流设置类似连接。
专家输出会返回到令牌顺序,权重后合并,并传递到下一层。同时,注意力为附加的令牌创造新的K和V状态。在模型中,这些值形成一个不可变的KV后缀,用于解码下一个令牌,最终作为上下文中的下一个blob存储,供下一回合对话使用。
因此,预填充结合了两种权重重用形式。注意力和稠密变换在多个令牌间进行重用权重,而路由专家则在其桶中收集的令牌中重复使用每个选定专家。
随着激活流量、KV流量和输出处理的增长,与张量计算相比所需时间更长,这些增益最终趋于平稳。批处理可能会延迟到第一个令牌的时间,但包含数千个新令牌的单个请求已经提供了相当大的算术强度;预填充并不总是需要每批大量请求才能高效运行。
现代单插槽GPU甚至可能在大型模型上为小批量完成预填充,时间约为一秒。
5. 通过MoE译码层的流
解码开始时每次前向传递的新工作量要少得多。当前的标记,或在多标记预测(MTP)中推测的几个标记,就是查询。注意读取之前的KV状态和新标记的KV条目。
新条目附加到结果上,并在下一遍时附加到KV状态。
对于智能上下文,先前的KV状态通常比该单一标记所用的注意力和专家权重的读取负担更重。新查询及其局部投影权重相对紧凑。注意力可以被划分为KV头、上下文范围、内存通道或加速器单元,之后部分结果被简化为一次令牌激活。
该激活足够小,可以低成本移动,尽管下一阶段会触发更大的局部张量操作。
激活过程会经过共享的变换和路由。路由器会从可用银行中选择少数专家,只有这些专家张量才会激活当前令牌。他们的输出会被加权、合并、投影并传递。
在每一层,注意会创建并保留该层的新令牌的K/V条目。激活随后进入下一层的注意,重复相同的序列。当最后一层生成下一个令牌时,每一层都已附加其小的K/V更新。
这些更新可以组合成新的不可变KV后缀,同时令牌被流向客户端或代理。
因此,流程既包含广义操作,也包含稀疏操作。注意力在私有查询状态中广泛读取。专家激活模型总容量中的一小部分。硬件映射应支持两者,而不必强迫整个层采用单一并行策略。
6. 中填充是一种独特的操作体系
中填充将长缓存前缀与一组新标记结合起来,用于准备对话或代理工作中的下一回合。追踪显示缓存输入的数量是增量查询的数倍,尽管增量查询通常在50到5000个新输入标记之间变化。
缓存的系统提示、对话根、记忆、先前代理步骤和检索的文档可以迅速将对话和代理上下文提升到百万个极限。AgentX数据集显示,前沿专家不断压缩上下文以保持在百万个令牌限制以下。
这使得中填充既不是小型预填充,也不是大型解码。与解码一样,它必须读取大量私有KV缓存。与预填充类似,它处理足够的新令牌以重用权重并将路由激活分类为有用的专家批次。
其算术强度可是单一令牌解码的数百倍,但缓存状态流量可是同等规模初始预填充的数十倍。
现代加速器通常能利用数百个令牌块中的算术重用,因此复杂的平衡往往在于大KV读取与路由专家流量的突发之间。这种突发与译码流水线的平滑节奏不符:中填充可能占据一个阶段的时间远长于邻近阶段的译码批次,导致这些阶段使用率较低。
理想的并行性也可以有所不同。本文后面的示例展示了中填充配置,这些配置使用了与译码不同的流水线、张量和专家并行设置。在实时译码流水线中间重新配置GPU可能既昂贵又不切实际。
因此,服务可能受益于专门的中填充优化节点池。硬件可以与译码池相同,但加载的模型阶段、并行性和批处理策略有所不同。
7. 模型是一个高堆叠的重复层群
模型的参数计数量化了总学习状态,但服务取决于该状态的组织和使用方式。模型是一个层叠叠,越来越有用的是将这些层分组为重复的架构单元。
在某些 MoE 模型中,图层组与一个图层相同。在其他模型中,一个图层包含一个全注意力层,以及多个线性、三角、top-k 或其他优化注意力层。
通常初始层中有 1 到 3 个可能较为密集或设计为干净开始。其余模型通常重复一个重复的组模式。
宽而浅的薄饼是层组的有用表示。宽阔的表面为注意力、共享变换、路由、专家容量和残余流量提供了空间。其浅厚将该层作为更高重复模型中的一片。
它也呼应加速器的物理形态:一层非常薄的主动层分布在宽广的包上。薄饼是将宽广的算法流映射到宽广硬件表面的有用直觉。
重复结构简化了函数规划。为一组创建的映射可以重复用于下一组。相应的内存区域可以存储下一组的权重。相同的计算和通信计划可以反复执行。
一致性不仅对运行时效率重要,也对编译器、内核和操作工具有重要意义。
在解码过程中,同一标记一次激活一层。在该层内,多个操作依次进行。相邻层可以被预取,不同的流水线阶段可能同时处理不同的查询,但一个令牌的逻辑路径仍会按顺序在堆栈中攀升。
8. 并行性应划分模型的狭窄数据流
并行性不是单一决策。流水线、张量和专家并行性划分了模型的不同维度,应根据不同的通信模式来判断。
流水线并行性遵循层叠加
层级立即暗示流水线技术。层间传递的激活非常紧凑——通常是一个嵌入的令牌、一个小型多令牌预测块,或之前混合组结果的简短总结——而层内使用的权重和KV状态则大得多。
因此,流水线阶段可以拥有一个或多个完整的层组,并将相对较小的激活传递到下一阶段,而不会过度依赖网络。
管道化干净地划分了模型权重,并使热层内通信保持在本地。 它的主要缺点是多批次占用:完全活动的管道在每个阶段都有不同的查询或批次。 因此,每个阶段都保留所有直播流的 KV 状态份额,并且随着上下文的增长,内存优势最终会停止改善。
张量并行属于一种操作本质上广泛的情况
注意可能需要将权重和 KV 状态划分到多个加速器上。 可以对 KV 头、上下文范围或其他线性维度进行分区,以便每个加速器在压缩令牌结果之前处理其份额。 张量并行性还可以服务于异常大的密集变换。
TP 不应自动传播到该层的每个张量中。 对于广泛的注意力操作来说,一个明智的集体可能比一个小的专家张量的算术花费更多。
专家并行遵循独立专家张量
大多数 MoE 参数记忆可能驻留在专家手中。 专家不保留自己的查询历史;上下文到达激活状态。 因此,专家库可以广泛分布在对等组中,并由多个工作实例共享。
广泛的专家并行性非常有用,因为专家是独立的且数量众多。 路由器将紧凑激活发送到选定的目的地,并且这些目的地返回转换后的激活。 即使流水线级变小,专家并行宽度也可以保持很大,从而允许独立选择开关基数和本地内存布局。
一般规则很简单:对垂直层序列使用管道并行性,对大型不可分割操作使用张量并行性,对上下文无关的路由专家库使用专家并行性。 当一个阶段的可用快速内存安全地超过其本地权重、实时批处理状态和工作缓冲区时,该阶段可以轻松地容纳在扩展域内:
M_{free,node}>\frac{W}{P}+M_{batch}+M_{working}
现代 GPU 节点通常会超出该阈值数倍。 当它们这样做时,苛刻的带宽、功耗和延迟要求可以保留在一个节点内,同时更细的管道激活和 KV 移动使用横向扩展链路。 其余的快速存储器可能不会获得任何收入。 内存中闲置的数据是一种支出,待处理的数据是收入。
9. 逻辑加速器节点
逻辑节点作为排列在环中的对等集比字面上的电路板布局更容易理解。 该环可能包含十六个加速器。 每个加速器将一个计算区域与本地快速内存配对。 这些单元通过强大的扩展结构连接。 CPU 协调工作负载和内存管理,而 NIC 将节点连接到机架和数据中心资源。
环只是一种可视化,它显示加速器是对等的,具有平等的地位。 我并不是暗示节点内部网络应该是一个环。 它可以是轮辐式、铁路式、全对全式、环面式、超立方体式……只要它能够处理机架中包含的最高数据流,并且具有低延迟和低每比特能耗,就可以。 为了简单起见,我将它画成一个环。
这种表示方式避免了过早地致力于封装布局、电路板布线或开关实现。 实际机器可以使用一个中央交换机、多个交换机、直接链路或分层结构。 逻辑要求是具有可预测的快速本地通信的有界对等点集。
加速器的设计可能会有所不同。 一种版本可能使用 SRAM 密集型内存处理单元。 另一种可能使用混合键合 DRAM,或在 BEOL 处理期间放置在顶部的 IGZO 存储单元。 另一种可能使用混合键合高带宽真 3D 存储器。 内存容量和带宽可能会发生变化,但此逻辑模型仍然有用。
节点是保存高频重复工作的自然场所。 注意力分区交换紧凑的部分结果。 路由专家激活前往当地目的地。 专家输出返回进行重组。 共享状态和调度元数据保留在 CPU 附近。 NIC 在节点之外承载管道激活、KV blob 和工作分配。
节点可能比机架小,就像我们在具有 8 个 GPU 的 SGX 节点中看到的那样,或者纵向扩展系统可能跨越整个机架,就像我们在 NVL72 中看到的那样。
无论哪种情况,逻辑符号都保持有效。 如果纵向扩展已经覆盖了机架,则单独的机架骨干级别就会消失,下一个边界直接是横向扩展网络。
10. 节点堆叠形成机架
当戒指倾斜为宽而浅的五金绉纱时,它会变得更具表现力。 多个单元可以垂直堆叠在机架中,就像模型层组堆叠在模型深度中一样。
这种重复的形式使模型与硬件的关系更容易看出。 层组绉纱可以放置在一个硬件绉纱上。 如果内存允许,多个层组可以占用一个节点。 如果注意力或专家能力需要,一层组可以跨越多个紧密连接的节点。映射可以扩展或收缩,而不改变基本的视觉词汇。
机架可以通过多种方式组织:
- 一个机架范围的扩展域;
- 由机架骨干连接的几个节点规模的岛;
- 管道阶段分布在这些岛屿之间;
- 每个阶段都有广泛的专家安置;
- 或者阶段本地扩展和共享扩展链接的混合。
因此,机架主干是可选的中间层。 某些系统将扩展结构扩展到整个机架,不需要单独的节点连接器。 其他人则使用强大的本地节点结构和独特的架顶式或共享轨网络。 在机架上方,横向扩展网络连接存储、预填充池、解码池和其他机架。
重复的机架单元也有助于区分两种规模。 该模型可以容纳一名有限的机架工人,而工厂则可以通过添加许多工人来扩展。 第一个问题是功能布局。 第二个是工人编排。
11.一层组随着时间的推移重用节点
层组不需要算法中的每个操作同时处于峰值强度。 其操作形成一个重复序列,在解码周期内重复使用相同的硬件来完成不同的工作。
使用许多内存通道和多个计算单元,注意力可能会分散到环的大部分区域。 查询和输出转换在更紧凑的操作中使用模型权重。 共享前馈工作可以使用密集区域。 然后,选定的专家激活环周围的本地内存和计算区域。 重组返回紧凑的结果。
相同的物理加速器可以以不同的方式参与每一步。 计算注意力的执行单元可以稍后执行一名或多名专家。 用于流式传输 KV 状态的内存通道可以稍后提供专家权重。 随着令牌的进展,缓冲区和本地链接将被重用。
这种分时是高效设计的核心。 静态图可能会使机器显得未得到充分利用,因为并非每个块都同时处于活动状态。 实际上,硬件正在服务一系列不同的操作,目标是在几乎没有设置或同步开销的情况下保持序列移动。
广泛的层组 crêpe 和加速器对等集是互补的。 绉纱显示了算法流程;环显示了其下方可重复使用的物理资源。映射是将流程的每个阶段与环的合适子集对齐的行为。
12. 将吞吐量边界置于流量最小的地方
一旦将模型和机器绘制为连接流,放置规则就变得清晰:频繁的、延迟敏感的通信应保留在最强的本地结构内,而较弱的链路应承载紧凑或分摊的传输。
注意力分区可以在每一层交换部分结果。 专家路由将激活发送给选定的专家并返回他们的输出。 这种流量并不总是最大的字节数,但它是频繁的、突发的并且对同步敏感。 只要可行,它就属于所选的放大域。
层或层组之间传递的激活要小得多。 因此,管道边界可以跨越较弱的链接,而无需移动该层的完整内部工作集。 KV blob 更大,但它们在工作边界移动,并在许多生成的代币中摊销。 他们的路径可以使用条带或 torrent 横向扩展网络和共享存储,而不是消耗最内部的张量结构。
路由器到专家的边界通常是中等吞吐量的全对全,承载紧凑激活。 它的困难通常来自端点数量、同步和路由效率,而不是原始字节量。 将其保持在节点或机架的扩展域内可以限制延迟和操作复杂性。
与每个环节都同样强大的机器相比,构建这种层次结构更容易、更便宜。 扩展路径围绕着在每一层内交换嵌入和部分结果的操作。 横向扩展链路承载管道激活、KV 移动、调度流量以及有界工作人员之间的流量。
这些层也有不同的延迟要求。 如果吞吐量足够,层组之间的管道传输可能几乎不会注意到几微秒。 相比之下,当专家加载和乘法仅需几微秒时,每个路由跃点额外的 100 ns 就很重要了。 因此,最近的链路应与加速器结构紧密集成,而不太频繁的传输可以容忍横向扩展的网络。
13. 在可行情况下按层组进行管道化
层组是管道放置的自然首选。在经典的 MoE 模型中,该组重复一种类型的层。在更新的结构中,它可能包含一个全注意力层,后跟几个优化或局部注意力层。
保持一个组的完整可以保留内部依赖关系,并允许一个放置和编译计划在各个阶段重复。统一的计划可以降低工具成本并简化部署。当每个阶段运行相同的重复结构时,内核、内存布局、通信计划、监控和故障恢复都变得更容易。
仍然可以在一组的中间切断管道,尽管由此产生的放置会更复杂。如果各层之间没有特殊的跨层依赖关系,紧凑的激活边界仍然是适合网络的低容量连接。
一个阶段可以包含几个完整的组、一个组或一个大组的一部分,这取决于内存和吞吐量的要求。
指导原则并不是对拆分群组的绝对禁止。其目的是更偏向于常规边界,并理解何时使用非均匀拆分是值得的。工具和操作的简便性可能与小的理论布局收益同样重要。
14. 管线深度在 KV 缓存交叉处结束
流水线并行将模型权重清晰地划分。如果一个模型的权重占用为 (W) 并使用 (P) 个阶段,则每个阶段的理想权重占用接近 (W/P)。
KV 缓存的需求表现不同。一个完整的流水线会被每个阶段运行不同的查询或批次占用。在一个八阶段的流水线中,每个阶段拥有每个八个活动流的分层 KV 值的八分之一。
每个阶段的层数减少被同时流的数量抵消,因此该阶段不会像权重那样在活动 KV 需求上获得相同的 (1/P) 减少。
一个有用的阶段记忆估计是:
M_{stage}\approx \frac{W}{P}+M_{KV,stage}+M_{working}+M_{slack}
一旦每个阶段的权重降至与KV和工作状态内存相同的数量级,更深的流水线几乎不会带来额外的容量优势,反而增加了协调和延迟。
交叉很大程度上取决于模型设计。 经典的全注意力方法可能需要跨所有层的每个令牌数百千字节的 KV 状态。 类似 MLA 的设计通常为数十千字节,而最近主要具有线性、循环或局部注意力的混合层组可能更低。 对于一些新的混合代币来说,每个代币接近 25 kB 的工作平均值可能是合理的;每个令牌大约 70 kB 是经过验证的压缩注意力设计的保守参考点。
作为粗略的设计目标,将每个令牌 70 kB 和分配给一个阶段的聚合实时上下文的 200 万个令牌。 这大约是 140 GB 的 KV 状态。 双缓冲允许一个工作集移动,而另一个工作集继续运行,从而将 KV 限额提高到 280 GB。 添加模型权重、激活、瞬态缓冲区、路由表、碎片和运营裕度,大约 400-500 GB 本地快速内存的阶段目标成为 2027 年有用的基准。
其他设计可以通过流式传输、压缩、部分驻留或附加层来降低要求。 该估算并非普遍要求;这是一个实际的边界系统应该能够在没有英雄假设的情况下适应的标准。
如果共享扩展结构,该阶段可以将内存分配到多个加速器插槽上。 大型 MoE 中超过 95% 的权重内存位于路由专家中,它们在套接字之间自然划分。 KV 状态可以按头、上下文或注意实例进行分区,所得集合与相同的本地结构相匹配。
15. 预填充和中间填充将稀疏路线转变为密集的专家批次
预填充和中间填充具有强大的批处理机会,因为许多输入序列标记在专家执行开始之前就已完成关注。 路由器可以对所有令牌进行评分,为每个令牌发出多个目的地,然后按专家对路由记录进行排序。
实际的输入块可以包含足够的作业,基本上每个专家都会收到工作。 如果 128 个新令牌每个选择 8 个专家,则路由器会在 256 个专家库中发出 1,024 个分配。 每个令牌的路由仍然稀疏;排序会更改执行顺序,以便专家 e000 处理所有为其分配的标记,然后是 e001,依此类推。 每个 EA 都会加载一次并重新用于其紧凑的令牌列表,而不是按令牌顺序重复加载。
对于具有(W)权重的专家,权重流量(B)_W)、激活流量(B_A) 每个路由令牌,输出流量 (B_O) 和 (n) 分配的标记,粗略的算术强度表达式是:
AI_{expert}\approx \frac{2nW}{B_{W}+nB_{A}+B_{O}}
当重量流量占主导地位时,增加 (n) 可以快速提高重用率。 最终,激活、输出和路由流量变得重要,并且增益趋于平缓。
排序不是免费的。 必须构建、计数、排列路线记录,将其发送到专家目的地,并恢复为令牌顺序。 专家容量限制可能会导致溢出或重新路由。 即便如此,预填充和中间填充以足够的标记开始,这样优化通常是有意义的。
这是与解码的主要区别。 专家是相同的;变化的是工作线程执行时可用的路由激活数量。
16. 批处理带来的解码增益较少
解码注意力几乎没有直接的跨查询重用。 每个额外的查询都会贡献另一个 KV 缓存和另一个上下文扫描。 共享的查询投影权重可以重用,并且软件开销可以摊销,但占主导地位的长上下文读取仍然是查询私有的。
解码专家提供了潜在的共享,因为专家权重是上下文无关的。 实际的限制是共享概率。 模型的每一层可能包含数百个路由专家,并且整个模型可能包含数千个层专家。 每个查询每次都会贡献一个新令牌,并且仅选择几个目的地。 在小批量情况下,只有少数路由令牌可用,并且大多数活跃专家仅从一个令牌接收工作。 会发生一些共享,但随着通证中代币数量的增加而逐渐增长。
共享转换提供了更传统的权重重用,但它们只是 MoE 模型的一小部分。 因此,与延迟和 KV 内存压力的增加相比,扩大解码批次带来的总体吞吐量增益可能不大。
当上下文长度为 100,000 个令牌或更多时,一批不是一个微不足道的工作负载。 注意力扫描已经占用了大量的内存带宽。 最佳批量大小不一定是 1(软件启动、分配、路由和硬件利用率仍然很重要),但它可能比与面向吞吐量的服务相关的大批量更接近 1 或 5。
这在经济上很重要。 交互式代币比批量延迟代币更有价值。 乘以延迟来获得部分吞吐量改进可能是一个糟糕的交易。 硬件和软件应该消除有用的小批量操作的障碍,而不是使大批量成为效率的先决条件。
17. 调度使分解变得有用
作为云规模的统计系统,分解变得最有效。 大型池可以包含配置为长预填充、短预填充、长上下文解码、短上下文解码或其他有用类的工作线程。 编排器将每个作业分配给合适的可用工作人员,并通过共享存储移动所需的 KV blob。
一旦前缀大小、新令牌计数和工作器配置已知,预填充和中间填充工作就可以预测。 解码是随机的,因为输出长度不确定。 池之间的存储将可预测的生产与不规则的消耗脱钩。 即使各个查询在不同时间完成,已完成的预填充和中间填充工作的就绪缓冲区也可以使解码工作人员保持充足状态。
调度程序应观察客户的工作负载和一天中的时间模式,预测已知的负载增加,并在工作组合变化时重新配置工作节点。重新配置可能意味着加载不同的模型阶段、改变流水线基数、重新分配专家容量,或在预填充、中间填充和解码之间移动机架。
规模很重要。在一个小型固定基准中,一个输入填充阶段可能直接连接到一个解码阶段。一个缓慢的阶段可能会使其他阶段的容量闲置。
在一个大型池中,工作者可以独立完成和开始,因此不需要有任何工作者被闲置。
因此,高交互性和高利用率本质上并不矛盾。调度器可以在保持机器忙碌的同时保持批处理小,只要它有足够的工人、足够的存储带宽、对工作的足够可见性,以及足够快的响应时间以适应当下。
图1中的服务概述提供了相应的系统图:四个资源池,编排器位于它们之下。
18. 反馈可以将小的失衡变为振荡
一个紧密耦合的系统可以放大普通的变化。假设输入填充的接收是直接受解码查询的退休所控制的。一个长时间运行的解码查询会延迟退休。
输入填充的接收下降。随后解码清空它的就绪队列并变得供给不足。然后接收会积极开通,产生一波输入填充作业的激增,以及新一波的拥堵。
这是一个延迟反馈回路。控制信号在系统状态发生变化后才到达。大批量恢复可能会通过增加KV内存压力和响应延迟使回路情况更糟。工厂在满负荷和空闲之间交替,而不是在接近稳定点运行。
没有单一的调度策略可以解决这个问题。一些常用的控制技术有所帮助:
- 在各阶段之间使用准备好的工作缓冲区;
- 根据平滑后的积压和预测的服务率来调节入职,而不是根据个人退休情况;
- 将快速本地控制与较慢容量控制分开;
- 对工作人员重新配置应用滞后;
- 短期互动工作的储备能力;
- 并避免改变批量大小的速度快于系统观察到其效果的速度。
同样的原则也适用于不同的时间尺度。 微秒级工作者调度、毫秒级令牌流、秒级缓冲区、分钟级工作者重新配置和小时级需求规划不应全部响应相同的噪声信号。
19. 聚合与分解的比较
既然我们已经详尽地描述了分类推理,那么是否有必要进行聚合呢?在某种程度上,是的。显然,由于对话可能会暂停几分钟和几小时,因此将整个对话与一个系统绑定是不合理的。 HBM 可以在一轮结束后的几秒钟内得到更好的利用,而现代横向扩展网络可以将千兆字节的 KV 缓存移动到并行存储系统中更便宜的位置,该系统可以在不到一秒的时间内对 DRAM 和 SSD 进行分层。
然而,在一个回合中,我们是否需要安排多个地点来完成工作?拥有太多不同设计的服务器成本高昂,会增加运营成本和设计工作。 如果只有一种设计,并且以中间填充盒为中心怎么办?可以将请求安排给该空工作人员并保留在那里进行预填充、中间填充和解码。 它需要有足够的计算能力来进行预填充和中间填充,以及足够的内存带宽来进行解码。 计算或内存传输总会有一些闲置容量,具体取决于模型运行的阶段,但我们已经可以容忍 GPU 上的低 MFU。 我们试图用聪明的内核来克服这个问题,但实际上集群总是以搁浅的函数运行。
复杂的编排会导致一些搁浅。 如果轮流在单个聚合工作人员上运行,则可以避免其中的一些情况。 前/中填充移交解码时没有时间表间隙。 自然共享广泛并行专家集的一个副本。 将上下文从填充移动到解码无需网络开销。 编排器仍然查看请求的形状——缓存大小、输入序列长度、模型类型、客户交互级别——并做出决定,哪个可用的工作人员应该在轮次的所有阶段处理它。 然后它就不管它,直到停止令牌出现,并将轮次传递给用户并缓存到快速并行文件系统。 一个工作人员在完成回合的所有阶段时使用适应给定请求形状的内核和数据流。
聚合的工人有其吸引力和拥护者。
所有系统总会在现实世界的使用中限制加速器的某些功能。 在分解系统中,可以有两种(或更多)类型的机器,其投资集中于实际使用的计算、内存和网络,可以说是该投资的最佳利用。 预填充机器可能投资于计算,而解码机器可能投资于内存。 如果工人聚集在一起,那么所有阶段都将使用一台机器,因此需要投资最强的计算和最强的内存吞吐量。 也许还有强大的网络。 如果不是一个全面的佼佼者,那么它将受到其较弱部分的阻碍,并成为整体“meh”。因此,聚合有其优势,但在提供最佳的全面性能方面也无处可藏。 如果你能在明星周围建立这种魔力,那么将整个回合聚集在一个工人身上可能是最好的。
20.内存带宽和内存容量是不同的目标
内存通常被讨论为两个独立的标量来最大化。 在实践中,容量和带宽是相互矛盾的,必须同时考虑它们的经济价值。
数据移动即可赚取收入;闲置时会产生成本。 具有非常高内存吞吐量的加速器可以以较低带宽内存无法匹配的速率生成令牌,即使较低带宽配置具有更多容量。 在主动重量、KV 状态、激活和操作松弛完全配合之前,容量是有价值的。 超过这一点,额外的本地容量可能会增加成本,但不会增加收入。
容量曲线不是垂直的悬崖。 低于有用限制,添加加速器可提供更多内存和带宽。 当其他限制出现时,优势就结束了:最大扩展宽度、较差的模型剪切、延迟的主导、额外的同步或网络争用。
安全容量设计点必须高于这些限制。 它包括实际上下文分布、双缓冲、碎片、故障和瞬态峰值的余量。 收入-容量曲线在该点之前急剧上升,平滑舍入,然后达到主要由带宽和计算决定的平坦上限。 如果过剩的产能成为沉没成本,运营部门试图通过大量缓慢的高吞吐量但价值较低的批次来证明其合理性,那么收入甚至可能会下降。
加速器 HBM 成本太高,无法在不立即使用的情况下保存空闲数据。 完成的 KV blob 应移入 CPU DRAM 进行传出暂存,然后移入横向扩展存储。 经常重用的公共 blob 可能会在共享 CPU 内存或附近的缓存设备中保持复制状态。 只有活动工作集才能支付最昂贵的内存。
高容量存储器的堆叠可能会增加功耗、信号质量、封装和频率方面的成本。 具有足够容量和出色带宽的设计可以比通过空闲过剩最大化每个加速器容量的设计以更高的裕度提供交互式推理服务。
21.一种实用的绘图方法
前面的部分可以压缩为一种可重复的方法,用于将模型映射到机器上。
- 分离操作模式。独立地测量预填充、中间填充、解码注意力和解码专家。每个可能根据上下文长度或工作负载类别进一步拆分——例如代理、编码、媒体或内容创作。这些成为准备好的配置,协调器可以在生产中混合使用。
- 描述重复层组。识别完整且优化的注意力、共享变换、路由专家以及任何跨层依赖。
- 衡量活动状态,而不仅仅是总参数。分离阶段权重、活跃专家、实时激活、KV 状态和临时缓冲区。
- 为每个操作选择自然的平行维度。对层堆栈进行流水线处理,将宽而不可分的工作进行张量并行,并广泛分配独立的专家。
- 首先绘制最广泛的操作。长上下文注意力通常决定记忆分条和最小有用的扩展参与度。
- 在本地常见的目的地放置专家称重。让路由在已知的对等位置中选择,而不是为每个令牌创建一个全局事件。一个大型模型可能包含大约15,000个层专家,每个层可以相对于其层内的其他专家和预期的路由分布进行配置。目标甚至是利用内存容量和带宽。
- 将高通量的合作保持在最坚固的结构中。让更细的激活和摊销的KV移动跨越较弱的边界。尊重延迟和功耗悬崖以及吞吐量悬崖。
- 停止在KV内存分频点增加流水线深度。一旦模型和目标上下文在安全裕内匹配,额外的阶段带来的内存收益有限,并增加了阶段转换延迟。
- 输入填充和解码方式不同。将预填充和中填充路径分类为专家批次;保持小批量解码的交互性。
- 与员工一起设计存储和排班。KV移动、准入控制、准备缓冲区和工作者重新配置决定物理映射是否能实现稳定吞吐量。短批次和持续批次更新使编排器无需等待整个批次退休即可替换单个请求。
该方法并不选择单一的通用拓扑。它使权衡变得可见。一个对等集可以是一个包、一块板子,或一个机架范围的扩展域。层组可丽饼可以映射到一个或多个节点。
重要的是通信层级遵循模型的实际流程。
22. 下一个视角是时间
到目前为止,这些图表描述了结构和流动。下一步是把时间放在上面。
交互式解码的端到端预算非常紧张。一层的执行通常需要在大约50微秒到1毫秒之间完成,这在典型的60层模型中相当于每秒约15到300个生成的令牌。
每一层包含多个连续阶段,因此单个算术运算和交接的时间通常在几十微秒、微秒,有时甚至是微秒的分之一秒内完成。
在该规模下,张量算术只是结果的一部分。内核启动、队列、同步、内存设置、路由、减少和链路延迟都必须相较于它们支持的操作保持较小。
如果专家乘法耗时微秒数,则其价值被稀释,如果调度和数据移动各耗时数微秒。
时序视图还能让网络层级更加清晰。如果高带宽路径的建立延迟过大,仍然可能不适用。对于亚微秒级切换,一个小型本地缓冲区可能比大型远端内存层更有价值。
产生毫秒变异的调度器可能会压倒工作者内部的细致微秒工程。
工厂涵盖多个控制时间尺度:
- 局部算术和链路切换(以微秒到微秒为数分之一);
- 分层执行时间大约为50微秒到1毫秒;
- 代币生成以毫秒计;
- 准备缓冲和进出控制大约在0.1到10秒内完成;
- 编排器在几秒到几分钟内重新配置工作者;
- 快速并行文件系统中KV-blob的保留和生命周期,时间跨度为几分钟到数天;
- 以及客户需求规划,持续数小时甚至数天。
这些环路应分别设计并谨慎连接。快速控制不应追逐慢速需求噪声,慢控制不应对每一次瞬态队列波动做出反应。
23. 示例示例:Blackwell系统上的Kimi K3预测性能
前文描述了一种推理模型放置的方法。一个有用的检查是将其应用于特定的前沿模型,并共同探讨由此产生的权衡。以下图表展示了在机架中配置16至64块GPU时,在B200、B300和GB200系统上建模的Kimi K3性能。
这些是工作负载和硬件的预测,而非测量的基准测试结果。连通线表示预测的帕累托前沿:即在牺牲吞吐量或其他指定目标的情况下,无法提升交互性。
22.1 交互性与吞吐量
第一张图表比较了解码时每个输出令牌的时间,或预填充和中填充到第一个令牌的时间,与每个GPU每秒令牌数。规范化每个GPU的吞吐量使不同大小的配置可以直接比较。
左下组包含8k和32k输入上下文的译码前沿。三种GPU类型都有可行配置。GB200在前沿大部分地区表现强劲,B200和B300也提供竞争优势。
最低延迟的译码配置通常结合流水线和张量并行。在吞吐量导向端,每显卡每秒最高令牌通常来自每个GPU的1个注意力实例,不支持张量或流水线并行,而专家并行则保持系统允许的范围。
中上层组为中间填充:127k缓存输入令牌,随后1k令牌附加后再解码。GB200在低TTFT部分领先,采用TP=4或TP=2,采用流水线并行。B300则在吞吐量导向端追赶。
B200和B300通常使用PP=4,专家并行性在各阶段内有界,使专家全能保持在节点内。
右上角的两组分别是8k和32k令牌预填充。这三种GPU类型在类似配置下趋同:PP=4,TP=4或TP=2更倾向于较低的TTFT,但吞吐量会有所代价。
它们的预测性能反映了共享Blackwell计算架构以及这些预填充工作负载的计算受限性质。
22.2 每次查询的能量
第二张图使用相同的模拟配置,但垂直轴改为每完成查询的能量。解码是最大的能量负载,因为建模输出长度为1000个令牌,每次查询大约需要1000次通过模型。
中填充耗能最低:它在通过现有长上下文一次后附加相对较短的序列。完整的8k和32k预填充则需要依次增加的能量。
该模型包含Kimi K3的局部注意力层,因此保留状态和计算都反映了注意力结构带来的预期节省,而非将每一层都视为全注意。
22.3 快速内存需求
第三张图表显示了每个GPU的峰值HBM驻留时间。它排除了KV状态进出工作器时使用的额外缓冲区,这可能会为GPU增加数GB内存。在会话或代理轮次之间,非活跃的KV块可以并行传输到网络连接的DDR系统,包括连接到节点CPU的DRAM系统。
这些内存更便宜、更易获得,且不受HBM供应链限制。
预计前沿集中在可行内存范围的下限附近。对于预填充和中填充,向下的步骤是通过添加流水线并行性和增加张量或数据并行性,包括数据并行环批实例。
解码先通过张量或数据并行性减少每GPU驻留,后期使用流水线并行。
即使允许实际的KV传输缓冲区,大多数前沿配置仍低于每GPU约80 GB。这支持了之前的结论:只要更广泛的存储和编排系统能够及时进入空闲状态,带宽可能比最大化每个加速器的HBM容量更有价值。
22.4 网络峰值与扩展边界
第四张图显示了每GPU预计的峰值网络流量。预填充和中填充在专家并行方面占用网络,因为许多路由激活同时处于运行中。因此,流水线并行在B200和B300系统中尤为有用:将一阶段置于节点内,其专家全对全流量保持在本地NVLink结构中。
GB200 NVL72 扩展了整个机架的扩展带宽。因此,更多 GPU 可以并行参与同一层,所有实例同步通过该层,从而提升延迟和吞吐量,同时避免越过较弱的网络边界。
解码显示的区间平均峰值较低,因为小批量同时咨询的专家相对较少。单个传输仍以物理NVLink速率突发;较低的绘制值反映的测量间隔比传输本身更长。
瞬时链路速率与持续流量之间的区别在结构规模和利用率解释时非常重要。
这四个视图讲述了一个一致的故事。最佳配置会随着运行模式和延迟吞吐量边界的选定点而变化。预填充和中填充奖励有组织的并行性和阶段本地专家流量。
解码在低延迟端受益于并行性,但每GPU最高的吞吐量来自于更简单的注意力实例和广泛的专家配置。在预测的前沿中,快速内存容量似乎比网络布置、内存带宽和编排限制更宽松。
结尾视角
用于推断的有用分析单位不仅仅是总参数数。它是与机器内存、通信和时序层级结合的模型的主动流。
MoE提供结构。层组重复。专家众多,但可单独管理。注意力广泛且越来越受KV状态影响。操作按顺序进行,且可重复使用硬件。流水线、张量和专家并行性均可遵循最自然的维度。
预填充和中填充可将路径分类为高效的专家批次,译码可保持短批次和高交互性。
硬件可以反映这种结构。逻辑加速器对等集提供了有界的扩展域。节点堆叠成机架。一个机架可以是一个扩展工作者,也可以是多个流水线阶段。
共享存储使 KV 块块可移动。数据中心网络连接有界工作者,而非承载所有内部张量操作。调度保持可预测和随机阶段的稳定流动。
以这种方式处理问题并不会消除其规模。它使规模更容易被划分。模型、工作器、机架、存储系统和调度器成为一个连贯设计的一部分,可以被测量、展示和改进。