NVIDIA Dynamo Addresses Multi-Node LLM Inference Challenges
大规模语言模型(LLM)的服务部署非常复杂。现代的LLM参数量已超过单个GPU甚至单个多GPU节点的内存和计算容量。因此,运行700亿+、1200亿+参数模型或具有大上下文窗口的流水线,需要多节点、分布式的GPU部署。
这一挑战正在激发推理技术栈的创新。Dynamo应运而生。Dynamo是一个用于分布式推理的开源框架。它负责管理跨GPU和节点的执行。它将推理过程分解为多个阶段,例如预填充和解码。同时,它将内存密集型任务和计算密集型任务分离开来。此外,它还能动态管理GPU资源,以提高利用率并保持低延迟。
Dynamo允许基础设施团队根据需求灵活扩展推理容量,处理流量高峰,而无需永久性地过度配置昂贵的GPU资源。该框架可与任何推理引擎配合工作。它支持TensorRT-LLM、vLLM、SGLang等。这为组织提供了技术选择上的灵活性。
微软Azure和NVIDIA近期合作,展示了开源的NVIDIA Dynamo框架。这次合作表明,通过解耦、智能缓存和动态资源分配,可以在Kubernetes上良好地运行高性能AI工作负载。最近的报告详述了作者如何在Kubernetes集群(AKS)上使用Dynamo。该集群运行于特殊的机架级VM实例ND GB200-v6之上,该实例配备了72个紧密集成的NVIDIA Blackwell GPU。
他们使用此设置来运行开源的120B参数模型GPT-OSS 120B,并采用了经过测试的’InferenceMAX’配方。该设置实现了每秒120万个令牌的处理速度,表明Dynamo能够在常规集群上处理企业级的推理任务。
该部署使用了标准的云原生工具,如GPU节点池、用于部署Dynamo的Helm以及用于编排的Kubernetes。这表明组织无需定制基础设施即可受益于Dynamo。
Dynamo的核心创新在于将LLM推理的预填充和解码阶段解耦到不同的GPU上。预填充阶段处理输入上下文,是计算密集型的,而解码阶段生成输出令牌,是内存密集型的。通过分离这两个阶段,可以针对不同的GPU数量和并行策略对每个阶段进行独立优化。
这种架构选择解决了一个常见的推理工作负载问题。以一个生成个性化产品推荐的电商应用为例。它可能需要处理成千上万的用户和产品上下文令牌(繁重的预填充),但只生成简短的50个令牌的描述(轻松的解码)。在同一GPU上运行这两类任务会造成资源浪费。通过解耦服务,预填充GPU处理计算密集型任务,而解码GPU则专注于内存带宽和容量。
该框架具有动态GPU调度功能,能够适应不断变化的需求。这使得推理系统可以根据实时流量扩展资源。一个基于SLA的规划器组件,利用时间序列数据预测流量,并调整预填充和解码工作器之间的GPU分配,以满足延迟目标,例如首令牌时间和令牌间延迟。
在流量激增期间,系统可以将GPU资源从解码操作重新分配到预填充操作,或者启动额外的资源。当负载下降时,资源会相应缩减。这种弹性帮助组织在不超额配置硬件的情况下满足服务级别目标。
Dynamo包含一个具备LLM感知功能的路由器,用于跟踪键值(KV)缓存在GPU集群中的位置。当请求到达时,路由器会计算新请求与已缓存的KV块之间的重叠度,将流量导向能够最大化缓存复用率的GPU。这种方法减少了冗余计算,在多个请求共享相同上下文时尤其有价值。
对于内存管理,KV块管理器会将极少访问的缓存块移动到CPU RAM、SSD或对象存储中。这种缓存方法允许将缓存存储扩展到PB级别,并保持高效复用。如果不进行卸载,每个GPU上更多的并发会话会导致缓存被驱逐并进行昂贵的重新计算。通过卸载,GPU可以在保持低延迟的同时服务更多用户。
Dynamo被定位为NVIDIA Triton推理服务器的继任者,它汲取了早期推理服务框架的经验教训。该项目使用Rust以实现高性能,使用Python以增强可扩展性,已在GitHub上完全开源。