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 培训作业前,您必须配置该作业以使用高速网络接口。
先决条件
- 您可以使用支持的 NVIDIA GPU 访问具有多个 worker 节点的 OpenShift 集群。
集群管理员配置了集群,如下所示:
- 安装了带有所需分布式培训组件的 Red Hat OpenShift AI,如 安装分布式工作负载组件 中所述。
- 配置分布式培训资源,如 管理分布式工作负载 中所述。
- 为 RDMA 配置集群,如 为 RDMA 配置集群 中所述。
流程
- 登录 OpenShift 控制台。
创建
PyTorchJob资源,如下所示:-
在 Administrator 视角中,点击 Home
Search。 - 从 Project 列表中,选择您的项目。
-
单击 Resources 列表,然后在搜索字段中开始输入
PyTorchJob。 选择 PyTorchJob,然后单击 Create PyTorchJob。
Create PyTorchJob 页面将打开,自动添加默认 YAML 代码。
-
在 Administrator 视角中,点击 Home
将高速网络接口附加到
PyTorchJobpod,如下所示:编辑
PyTorchJob资源 YAML 代码,使其包含将 pod 添加到额外网络的注解,如下例所示:将网络接口附加到 pod 的注解示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将示例网络名称
example-net替换为您的配置的适当值。
将作业配置为使用 NVIDIA Collective Communications Library (NCCL)接口,如下所示:
编辑
PyTorchJob资源 YAML 代码,以添加以下环境变量:环境变量示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 example environment-variable 值替换为您的配置的适当值:
-
设置
*NCCL_SOCKET_IFNAME*环境变量,以指定用于通信的 IP 接口。 -
[可选] 要明确指定 NCCL 应使用的 Host Channel Adapter (HCA),请设置
*NCCL_IB_HCA*环境变量。
-
设置
指定基本培训镜像名称,如下所示:
编辑
PyTorchJob资源 YAML 代码,以添加以下文本:基本培训镜像示例
image: quay.io/modh/training:py311-cuda124-torch251
image: quay.io/modh/training:py311-cuda124-torch251Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果要使用其他基本培训镜像,请相应地替换镜像名称。
有关支持的培训镜像列表,请参阅 Red Hat OpenShift AI: 支持的配置。
指定网络接口资源的请求和限值。
资源名称因 NVIDIA Network Operator 配置而异。资源名称可能依赖于部署模式,并在
NicClusterPolicy资源中指定。注意您必须使用与您的配置匹配的资源名称。名称必须与集群节点上 NVIDIA Network Operator 公告的值对应。
以下示例是 RDMA over Converged Ethernet (RoCE),其中以太网 RDMA 设备使用 RDMA 共享设备模式。
查看
NicClusterPolicy资源,以识别resourceName值。NicClusterPolicy 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,
resourceName资源是rdma_shared_device_eth。编辑
PyTorchJob资源 YAML 代码,以添加以下文本:网络接口资源的请求和限值示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
在
limits和requests部分中,将资源名称替换为NicClusterPolicy资源中的资源名称(本例中为rdma_shared_device_eth)。 -
将指定值
1替换为您需要的数字。确保 OpenShift 集群中提供了指定数量。
-
重复上述步骤,在
PyTorchJobYAML 代码的Worker部分中进行相同的编辑。 - 点 Create。
您已创建了一个配置为使用 RDMA 运行的多节点 PyTorch 培训作业。
您可以在 配置为使用 RDMA 运行的示例 Training Operator PyTorchJob 资源中看到此示例 PyTorchJob 资源的 整个 YAML 代码。
验证
- 在 OpenShift 控制台中,打开 Administrator 视角。
- 从 Project 列表中,选择您的项目。
-
点 Home
Search PyTorchJob,并验证作业是否已创建。 -
点 Workloads
Pods,验证请求的 head pod 和 worker pod 是否正在运行。