4.4. 使用 RDMA 创建多节点首选培训作业


NVIDIA GPUDirect RDMA 使用远程直接内存访问(RDMA)提供直接 GPU 互连,使外设设备能够直接访问远程系统中的 NVIDIA GPU 内存。RDMA 改进了培训作业性能,因为它消除了使用操作系统 CPU 和内存的开销。在使用多个 GPU 的多个节点上运行培训作业可显著减少完成时间。

在 Red Hat OpenShift AI 中,Nvidia GPU 可通过以下类型的网络使用 GPUDirect RDMA 来直接通信:

  • 以太网:通过融合以太网的 RDMA (RoCE)
  • InfiniBand

在为 RDMA 配置的集群中创建 PyTorch 培训作业前,您必须配置该作业以使用高速网络接口。

先决条件

流程

  1. 登录 OpenShift 控制台。
  2. 创建 PyTorchJob 资源,如下所示:

    1. Administrator 视角中,点击 Home Search
    2. Project 列表中,选择您的项目。
    3. 单击 Resources 列表,然后在搜索字段中开始输入 PyTorchJob
    4. 选择 PyTorchJob,然后单击 Create PyTorchJob

      Create PyTorchJob 页面将打开,自动添加默认 YAML 代码。

  3. 将高速网络接口附加到 PyTorchJob pod,如下所示:

    1. 编辑 PyTorchJob 资源 YAML 代码,使其包含将 pod 添加到额外网络的注解,如下例所示:

      将网络接口附加到 pod 的注解示例

      spec:
        pytorchReplicaSpecs:
          Master:
            replicas: 1
            restartPolicy: OnFailure
            template:
              metadata:
                annotations:
                  k8s.v1.cni.cncf.io/networks: "example-net"
      Copy to Clipboard Toggle word wrap

    2. 将示例网络名称 example-net 替换为您的配置的适当值。
  4. 将作业配置为使用 NVIDIA Collective Communications Library (NCCL)接口,如下所示:

    1. 编辑 PyTorchJob 资源 YAML 代码,以添加以下环境变量:

      环境变量示例

              spec:
                containers:
                - command:
                  - /bin/bash
                  - -c
                  - "your container command"
                  env:
                  - name: NCCL_SOCKET_IFNAME
                    value: "net1"
                  - name: NCCL_IB_HCA
                    value: "mlx5_1"
      Copy to Clipboard Toggle word wrap

    2. 将 example environment-variable 值替换为您的配置的适当值:

      1. 设置 *NCCL_SOCKET_IFNAME* 环境变量,以指定用于通信的 IP 接口。
      2. [可选] 要明确指定 NCCL 应使用的 Host Channel Adapter (HCA),请设置 *NCCL_IB_HCA* 环境变量。
  5. 指定基本培训镜像名称,如下所示:

    1. 编辑 PyTorchJob 资源 YAML 代码,以添加以下文本:

      基本培训镜像示例

      image: quay.io/modh/training:py311-cuda124-torch251
      Copy to Clipboard Toggle word wrap

    2. 如果要使用其他基本培训镜像,请相应地替换镜像名称。

      有关支持的培训镜像列表,请参阅 Red Hat OpenShift AI: 支持的配置

  6. 指定网络接口资源的请求和限值。

    资源名称因 NVIDIA Network Operator 配置而异。资源名称可能依赖于部署模式,并在 NicClusterPolicy 资源中指定。

    注意

    您必须使用与您的配置匹配的资源名称。名称必须与集群节点上 NVIDIA Network Operator 公告的值对应。

    以下示例是 RDMA over Converged Ethernet (RoCE),其中以太网 RDMA 设备使用 RDMA 共享设备模式。

    1. 查看 NicClusterPolicy 资源,以识别 resourceName 值。

      NicClusterPolicy 示例

      apiVersion: mellanox.com/v1alpha1
      kind: NicClusterPolicy
      spec:
      rdmaSharedDevicePlugin:
        config: |
          {
            "configList": [
              {
                "resourceName": "rdma_shared_device_eth",
                "rdmaHcaMax": 63,
                "selectors": {
                  "ifNames": ["ens8f0np0"]
                }
              }
            ]
          }
      Copy to Clipboard Toggle word wrap

      在本例中,resourceName 资源是 rdma_shared_device_eth

    2. 编辑 PyTorchJob 资源 YAML 代码,以添加以下文本:

      网络接口资源的请求和限值示例

                  resources:
                    limits:
                      nvidia.com/gpu: "1"
                      rdma/rdma_shared_device_eth: "1"
                    requests:
                      nvidia.com/gpu: "1"
                      rdma/rdma_shared_device_eth: "1"
      Copy to Clipboard Toggle word wrap

    3. limitsrequests 部分中,将资源名称替换为 NicClusterPolicy 资源中的资源名称(本例中为 rdma_shared_device_eth)。
    4. 将指定值 1 替换为您需要的数字。确保 OpenShift 集群中提供了指定数量。
  7. 重复上述步骤,在 PyTorchJob YAML 代码的 Worker 部分中进行相同的编辑。
  8. Create

您已创建了一个配置为使用 RDMA 运行的多节点 PyTorch 培训作业。

您可以在 配置为使用 RDMA 运行的示例 Training Operator PyTorchJob 资源中看到此示例 PyTorchJob 资源的 整个 YAML 代码。

验证

  1. 在 OpenShift 控制台中,打开 Administrator 视角。
  2. Project 列表中,选择您的项目。
  3. Home Search PyTorchJob,并验证作业是否已创建。
  4. Workloads Pods,验证请求的 head pod 和 worker pod 是否正在运行。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部