大语言模型的复杂性呈指数级增长,带来了诸多挑战,例如模型规模超出单个 GPU 的承载能力、对高吞吐量与低延迟工作负载的需求,以及基础设施层面需无缝协调数千个互联组件。 NVIDIA Run:ai v2.23 通过集成 NVIDIA Dynamo,有效应对了这些挑战。
在本篇博客中,我们将为您详细介绍:
- 当前,多节点推理工作负载在扩展过程中面临诸多挑战,涉及多个组件的协同运作以及复杂的协调问题。
- Dynamo 通过优化推理过程加速模型执行,而高效的调度策略与编排机制在提升大规模工作负载效率方面发挥着关键作用。
- NVIDIA Run:ai v2.23 与 Dynamo 的集成,进一步增强了在可预测低延迟场景下的调度能力,并支持拓扑感知的资源放置,从而优化性能表现。
- 本文将介绍如何在 NVIDIA Run:ai 上启用并使用 Dynamo 功能,并提供详细的分步指南,涵盖网络拓扑配置、Dynamo 部署以及相关功能启用的完整流程。
缩放问题
随着模型参数以及分布式组件数量(例如预填充和解码工作线程、路由器等)的增加,内存和计算需求都会显著上升。这使得我们必须将模型层和KV缓存分布在多个GPU上,并且越来越多地扩展到多个节点之间。尽管张量并行等技术能够缓解显存容量的压力,但也带来了新的协调难题:如何让数十个分布式组件像单一加速器那样高效、无缝地协同工作?解决这一问题的关键在于具备强大能力的高级推理框架,能够透明地管理这种复杂性。
Dynamo 如何提升推理速度
NVIDIA Dynamo 专为应对分布式推理中的各种挑战而设计,具备以下功能:
- 分解预填充与解码阶段的推理过程,有助于更充分地提升 GPU 吞吐量,并在延迟与吞吐量之间实现灵活权衡。
- 支持动态 GPU 调度,能够适应不断变化的负载需求。
- 采用面向大语言模型的请求路由机制,避免不必要的 KV 缓存重复计算。
- 通过 NVIDIA 推理数据传输库(NIXL) 加速数据传输,有效缩短推理响应时间。
- 利用多级内存层次结构实现高效的 KV 缓存卸载,进一步提升系统吞吐能力。
这些功能可确保大型模型在分布式 GPU 集群中高效运行,前提是底层编排不构成瓶颈。
调度的重要性:实现大规模 Dynamo 工作负载的高效运行
在集群中执行多节点推理面临诸多挑战。Dynamo 工作负载包含路由器、预填充和解码等高度耦合的组件。若对这些操作进行独立调度,可能导致部署不一致,例如解码任务的 Pod 已运行,而预填充任务的 Pod 仍处于待处理状态,从而造成 GPU 资源闲置。
即使所有组件均处于活动状态,不当的布局仍可能影响系统性能。当领导者与工作节点分散在不同远程机架上时,跨机架通信和带宽瓶颈将导致延迟增加并降低吞吐量。解决此类编排问题对于提升 Dynamo 在集群内的运行效率至关重要。在此背景下,NVIDIA Run:ai 提供的高级调度功能发挥着关键作用。
NVIDIA Run:ai 与 Dynamo 相遇
解决编排挑战不仅需要启动 Pod,更关键的是要将合适的 Pod 组合协同启动,并将其部署在合适的位置。NVIDIA Run:ai 为 Dynamo 带来了两项核心能力,正是为此而设计:通过分组调度实现组件的原子化启动,以及通过拓扑感知的放置策略,确保组件间的协同定位,从而实现低延迟通信。
分组调度:全部部署或完全不部署
Dynamo 工作负载现已集成 NVIDIA Run:ai 的协同调度功能,可将具有相互依赖关系的不同组 Pod 视为一个统一的部署单元。该原子调度机制能够确保所有必要组件(如预填充 worker 与 leader、解码 worker 与 leader)被同时部署,或在资源不足时等待直至具备足够资源再进行统一调度。
通过消除部分部署场景,资源碎片化问题得以解决,集群利用率随之自然提升。以往因缺少组件而无限期等待的部分部署工作负载,将不再占用集群资源。同时,当资源就绪时,整个工作负载将以原子方式一次性启动,而非逐步启动,从而加快服务启动速度,有效降低冷启动延迟。
因此,无需额外配置,即可实现多节点推理工作负载的高效、可预测的布局,调度程序将自动完成相关协调工作。
拓扑感知调度:有效降低延迟
该集成包含拓扑感知调度功能,对多节点部署尤为关键。管理员可定义集群的拓扑结构,使调度器能够战略性地安排组件的部署位置。通过将相互依赖的组件(如预填充和解码角色)进行合理布局,有效降低跨节点延迟,并提升高速互连资源的利用效率。
这种拓扑感知在多节点部署中至关重要,因为在这些环境中,网络通信容易成为性能瓶颈。通过利用拓扑信息,可以提升组件间的通信吞吐量,降低网络开销,从而有效减少大规模分布式工作负载的延迟,增强整体性能。
如何开始使用 NVIDIA Run:ai v2.23 与 Dynamo
请先完成以下操作,再继续后续步骤。
- 已安装 NVIDIA Run:ai v2.23,并已完成名为 runai-project-a 的项目的 Kubernetes 集群初始化(详见相关文档)。 已配置并可访问 kubeconfig 文件,Helm 也已安装。
- 同时,已配置用于拉取模型的 Hugging Face 访问 token,并将个人 token 以 Kubernetes Secret 的形式进行存储。
kubectl create secret generic hf-token-secret \
--from-literal=HF_TOKEN='<huggingface_token>' \
-n runai-project-a
注意:请将 <huggingface_token>
替换为您自己的 Hugging Face 令牌,并妥善保管该令牌,切勿将其提交至源代码管理系统。
配置网络拓扑
为托管紧密耦合的 Dynamo 组件并降低跨节点延迟,建议在 NVIDIA Run:ai 中配置反映集群物理布局的网络拓扑。首先,确保 Kubernetes 节点已使用邻近性标签进行标记,例如 topology.kubernetes.io/region: us-west, topology.kubernetes.io/zone: us-west-1a, 等。
接下来,在 NVIDIA Run:ai 中指定用于定义距离的标签键。在 NVIDIA Run:ai 用户界面中,打开集群设置,并添加您所使用的标签键(例如 topology.kubernetes.io/zone、topology.kubernetes.io/region)。
根据这些键的距离由近及远排序以构建拓扑。请确保在网络拓扑设置中使用的标签值(例如 us-west-1a)与节点上实际应用的值完全一致。

然后,将该网络拓扑从节点池视图关联到相应的节点池中。若不同节点池的硬件或网络结构存在差异,则可为各池配置相应的拓扑结构。
从此时起,调度将自动执行。NVIDIA Run:ai 会优先在邻近层级应用“首选”软约束,仅当集群无法在初始层级容纳整个作业组时,才会扩展至更广的层级进行调度。结合组调度机制,该策略可确保您的 Dynamo Pod 被统一调度至当前最优的可用节点(例如同一机架内的节点),或等待合适节点就绪后再进行部署,从而避免部分低效的分散部署。更多详情,请参考官方文档页面。

Dynamo 的实际应用
在 NVIDIA Run:ai 用户界面中配置网络拓扑后,Dynamo 工作负载将自动启用分组调度与拓扑感知调度功能。该机制可确保紧密耦合的组件(如解码器、路由器)被统一调度,即同时启动或整体等待,并由调度器将其部署在地理位置相近的节点上(例如同一区域或机架),以降低通信延迟。用户可通过为工作负载添加标签,自定义首选或必需的部署策略。<!–
第一步:配置环境变量
# Define the required environment variables
export DYNAMO_IMAGE=nvcr.io/nvidia/ai-dynamo/vllm-runtime:0.4.1
export NAMESPACE=dynamo-cloud
export RELEASE_VERSION=0.4.1
第 2 步:创建 Kubernetes 命名空间
# Create a dedicated namespace for the deployment
kubectl create namespace $NAMESPACE
第 3 步:安装自定义资源定义(CRD)及平台组件
# CRDs
helm fetch https://helm.ngc.nvidia.com/nvidia/ai-dynamo/charts/dynamo-crds-$RELEASE_VERSION.tgz
helm install dynamo-crds dynamo-crds-${RELEASE_VERSION}.tgz --namespace dynamo-cloud
# Platform Components
helm fetch https://helm.ngc.nvidia.com/nvidia/ai-dynamo/charts/dynamo-platform-$RELEASE_VERSION.tgz
helm install dynamo-platform dynamo-platform-${RELEASE_VERSION}.tgz --namespace ${NAMESPACE} --set dynamo-operator.namespaceRestriction.enabled=false
第 4 步:检查 Pod 状态
# Ensure that all components are running
kubectl -n $NAMESPACE get pods
第 5 步:部署 vLLM 聚合器
从 Dynamo 存储库下载示例 YAML 文件,将 metadata.namespace 设置为 runai-project-a,并添加以下标注:
metadata:
namespace: runai-project-a
annotations:
kai.scheduler/topology-preferred-placement: "topology.kubernetes.io/zone"
kai.scheduler/topology: "topology-1"
# kai.scheduler/topology-required-placement: "topology.kubernetes.io/zone" -> if the pods have to be in the same zone, users can choose to use topology required placement label instead of the preferred placement
#Apply the YAML:
kubectl apply -f disagg.yaml
当 Pod 启动后,您会看到操作员、控制平面以及所有组件均已正常运行,同时解码和预填充 Pod 将根据拓扑结构被调度至同一区域。
NAME READY STATUS RESTARTS AGE
vllm-disagg-frontend-79f459c95-57fm6 1/1 Running 0 30m
vllm-disagg-vllmdecodeworker-6c8d64f569-56phf 1/1 Running 0 30m
vllm-disagg-vllmprefillworker-755cb88fcf-pflb5 1/1 Running 0 30m
第 6 步:向已部署的模型发送请求
要在本地测试部署,请先配置前端端口转发。
kubectl -n runai-project-a port-forward pod/vllm-disagg-frontend-79f459c95-57fm6
8000:8000
使用 curl 发送示例请求:
curl localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen3-0.6B",
"messages": [
{
"role": "user",
"content": "In the heart of Eldoria, an ancient land of boundless magic and mysterious creatures, lies the long-forgotten city of Aeloria. Once a beacon of knowledge and power, Aeloria was buried beneath the shifting sands of time, lost to the world for centuries. You are an intrepid explorer, known for your unparalleled curiosity and courage, who has stumbled upon an ancient map hinting at ests that Aeloria holds a secret so profound that it has the potential to reshape the very fabric of reality. Your journey will take you through treacherous deserts, enchanted forests, and across perilous mountain ranges. Your Task: Character Background: Develop a detailed background for your character. Describe their motivations for seeking out Aeloria, their skills and weaknesses, and any personal connections to the ancient city or its legends. Are they driven by a quest for knowledge, a search for lost familt clue is hidden."
}
],
"stream": false,
"max_tokens": 30
}'
成功响应将返回包含已生成补全内容的 JSON。
{"id":"chatcmpl-559682f7-8845-4014-b670-47a5f32f07c6","choices":[{"index":0,"message":{"content":"<think>\nOkay, I need to develop a detailed character background for the explorer in Eldoria. Let me start by understanding the user's query.","role":"assistant","reasoning_content":null},"finish_reason":"stop"}],"created":1758043876,"model":"Qwen/Qwen3-0.6B","object":"chat.completion","usage":{"prompt_tokens":196,"completion_tokens":29,"total_tokens":225}}%
该部署利用 NVIDIA Run:ai 实现作业调度与拓扑感知的 Pod 放置,协同启动计算任务,有效降低通信延迟,同时通过避免资源闲置,显著提升 GPU 利用率。
总结
大规模 LLM 推理的成功,依赖于高性能推理框架与能够精准部署和启动该框架的调度程序的协同配合。NVIDIA Dynamo 提供了预填充与解码分离、面向大语言模型的智能路由以及高效的 KV 缓存管理能力。而 NVIDIA Run:ai 2.23 版本则通过分组调度和拓扑感知的资源布局,进一步强化了调度层面的支持。
它们共同确保多节点推理具备可预测性和高性能:Pod 以原子方式启动,组件通过高速链路紧密连接,GPU 资源保持高效利用。由此实现了跨 Kubernetes 集群的更高吞吐量、更低延迟和更优的资源利用率,支持稳定扩展并显著提升基础设施的回报。
正在寻找有效应对AI工作负载扩展挑战的方法吗?加入我们即将举办的在线研讨会,获取专家见解与实用解决方案。
使用以下资源开始体验 NVIDIA Run:ai 和 Dynamo: