本文主要介绍使用 RDMA 拓扑感知调度的方法以及使用限制等。
说明
【邀测·申请试用】:该功能目前处于邀测阶段,如需使用,请提交申请。
在大模型训练等 AI 场景中,经常会出现一个 Job 中的多个 Pod 并行执行训练任务的情况,这些 Pod 在运行过程中需要频繁地相互交换参数、梯度值等数据。为了保障网络通讯开销不成为训练任务的性能瓶颈,通常使用 RDMA 网络在 GPU 之间直接传输数据。而在数据中心当中,一台交换机可以连接的 RDMA 网络设备有限,通常需要 S0 S1 两级交换机连接一个 miniPod 中的所有服务器。这样的网络拓扑结构,会导致不同 RDMA 网卡之间的通讯距离不一样,因此不同的 GPU 设备之间的通讯性能也会有差异。
针对上述情况,火山引擎容器服务提供 RDMA 拓扑感知调度能力,通过对 GPU 卡和 RDMA 设备的网络拓扑信息的感知,调度器能够将同一个 Job 中的所有 Pod 调度到 RDMA 网络中拓扑距离尽可能接近的节点和 RDMA 网卡上,进而帮助用户充分发挥 RDMA 网络的通信能力,提升 AI 大模型训练性能。
项目 | 要求 | 补充说明 |
---|---|---|
集群版本 |
|
|
集群网络 | VPC-CNI 网络模型 | 若无 VPC-CNI 网络模型的集群,请先创建集群。详细操作,请参见 创建集群。 |
组件依赖 |
| |
功能依赖 | kubelet 自定义配置参数 | 功能相关介绍,请参见 配置节点池 kubelet 参数。 |
已创建满足使用限制的集群。详细操作,请参见 创建集群。
在集群中需要准备支持 RDMA 设备的节点(例如:高性能计算 GPU 型),可新建或使用存量符合要求的节点。同时需要手动添加 Key 为vke.node.rdma.mode
、Value 为shared
的节点标签(Label),为节点配置 RDMA 使用模式。详细操作,请参见 VKE 集群中使用 RDMA 资源。
注意
RDMA 拓扑感知调度依赖集群中的 scheduler-plugin、rdma-device-plugin、katalyst 三个组件,须确保已安装该三个组件。详细操作,请参见 安装组件。
在需要感知 RDMA 拓扑的节点 kubelet 参数中添加参数,以开启对应的特性门控(Feature Gate)。
容器服务支持通过控制台配置节点所在节点池的 kubelet 参数,在节点池的 高级配置 中添加 kubelet 自定义参数:feature-gates: QoSResourceManager=true
。
说明
创建集群时新增的节点、创建节点池时新增的节点、已有节点池新增的节点、已有节点池存量的节点均可以配置 kubelet 参数。详细的操作说明,请参见 配置节点池 kubelet 参数。
为节点配置启用 RDMA 拓扑感知的 Label,其中 Key 为vke.node.katalyst.deploy
,Value 为true
。
完成上述三个步骤后,RDMA 拓扑信息都记录在 Kubernetes 自定义资源 CustomNodeResource 中(简称 KCNR)。
<node-name>
替换为您的节点名称。kubectl get kcnr <node-name> -oyaml
apiVersion: node.katalyst.kubewharf.io/v1alpha1 kind: CustomNodeResource metadata: name: 10.27.0.4 # Node Name # spec 中描述了节点中所有的 RDMA 网卡 ID 和对应连接的 S0 交换机信息。 spec: nodeResourceProperties: # nodeResourceProperties 中包含本节点的所有 RDMA 网卡信息,包括网卡的 ID 和连接的交换机 Hash。 - propertyName: RDMATOR/0000:1a:00.0 # RDMA 的 ID。 propertyValues: - b6f73fb8fb523a512a30edf3c73b7ab******** # RDMA 所连接的 S0 交换机的 Hash,可以唯一标识一个 S0。 - propertyName: RDMATOR/0000:3f:00.0 propertyValues: - b6f73fb8fb523a512a30edf3c73b7ab******** - propertyName: RDMATOR/0000:d1:00.0 propertyValues: - 985abf31e6b7bd2aef8dfe551406912******** - propertyName: RDMATOR/0000:e7:00.0 propertyValues: - 985abf31e6b7bd2aef8dfe551406912******** # status 中描述了节点各个 RDMA 网卡对应的可分配资源信息,用于判断该网卡是否已经被 Pod 占用。 # 节点资源通过树状结构描述,最上层为 socket zone,socket zone 中包含多个 numa zone,numa zone 中包含多块 RDMA 网卡。 status: topologyPolicy: SingleNUMANodeContainerLevel topologyZone: # socket zone - name: "0" type: Socket resources: {} children: # numa zone - name: "0" type: Numa resources: allocatable: cpu: "61" nvidia.com/gpu: "4" vke.volcengine.com/rdma: "2" capacity: cpu: "64" nvidia.com/gpu: "4" vke.volcengine.com/rdma: "2" allocations: - consumer: test-rdma-metrics/test-rdma-host-57bezr9pt-76b4cbf99c-bm7k8/667e2f44-e5ec-496f-81c0-0794******** requests: vke.volcengine.com/rdma: "1" children: # 该 numa zone 中的 RDMA 网卡信息。 # 每个 name 对应一块 RDMA 网卡,其中 allocatable 表示可分配的 RDMA 资源,capacity 表示总共的 RDMA 资源。 - name: 0000:1a:00.0 type: NIC resources: allocatable: vke.volcengine.com/rdma: "1" capacity: vke.volcengine.com/rdma: "1" # 分配在该 RDMA 网卡上的 Pod 信息。 allocations: # 格式为:Pod 所属命名空间/Pod 名称/Pod uid - consumer: test-rdma-metrics/test-rdma-host-57bezr9pt-76b4cbf99c-bm7k8/667e2f44-e5ec-496f-81c0-0794******** # 该 Pod 在该 RDMA 网卡上分配的资源量。 requests: vke.volcengine.com/rdma: "1" - name: 0000:3f:00.0 type: NIC resources: allocatable: vke.volcengine.com/rdma: "1" capacity: vke.volcengine.com/rdma: "1" - name: "1" type: Socket resources: {} children: - name: "1" type: Numa resources: allocatable: cpu: "64" nvidia.com/gpu: "4" vke.volcengine.com/rdma: "2" capacity: cpu: "64" nvidia.com/gpu: "4" vke.volcengine.com/rdma: "2" allocations: - consumer: default/test-rdma-fc69fc8b-qv6s8/d981a1f8-ea64-440c-9155-3bab******** requests: vke.volcengine.com/rdma: "2" children: - name: 0000:d1:00.0 type: NIC resources: allocatable: vke.volcengine.com/rdma: "1" capacity: vke.volcengine.com/rdma: "1" allocations: - consumer: default/test-rdma-fc69fc8b-qv6s8/d981a1f8-ea64-440c-9155-3bab******** requests: vke.volcengine.com/rdma: "1" - name: 0000:e7:00.0 type: NIC resources: allocatable: vke.volcengine.com/rdma: "1" capacity: vke.volcengine.com/rdma: "1" allocations: - consumer: default/test-rdma-fc69fc8b-qv6s8/d981a1f8-ea64-440c-9155-3bab******** requests: vke.volcengine.com/rdma: "1"