4.2. 使用 training Operator SDK 运行分布式培训工作负载
您可以使用 Training Operator SDK 将分布式培训作业配置为在每个节点有多个加速器的多个节点上运行。
您可以配置 PyTorchJob 资源,以便培训作业在多个带有多个 GPU 的节点上运行。
4.2.1. 使用 Training Operator SDK 配置培训作业 复制链接链接已复制到粘贴板!
在运行作业以培训模型之前,您必须配置培训工作。您必须设置培训参数,定义培训功能,并配置 training Operator SDK。
此流程中的代码指定如何配置一个示例培训作业。如果您有指定的资源,可以在不编辑的情况下运行示例代码。
或者,您可以修改示例代码,以指定适合您的培训工作配置。
先决条件
- 您可以使用支持的加速器访问具有足够 worker 节点的 OpenShift 集群,以运行您的培训或调优作业。
- 您可以访问适合分布式培训的工作台,如 为分布式培训 创建工作台 中所述。
具有数据科学项目的管理员访问权限。
- 如果创建项目,则会自动具有管理员访问权限。
- 如果没有创建项目,您的集群管理员必须授予管理员访问权限。
流程
打开工作台,如下所示:
- 登录到 Red Hat OpenShift AI web 控制台。
- 点 Data Science projects 并点您的项目。
- 单击 Workbenches 选项卡。
- 如果您的工作台还没有运行,请启动工作台。
- 点 Open 链接在新窗口中打开 IDE。
-
点 File
New Notebook。 创建培训功能,如下例所示:
使用以下内容创建单元:
培训功能示例
def train_func(): import os import torch import torch.distributed as dist # Select backend dynamically: nccl for GPU, gloo for CPU backend = "nccl" if torch.cuda.is_available() else "gloo" # Initialize the process group dist.init_process_group(backend) # Get rank and world size rank = dist.get_rank() world_size = dist.get_world_size() # Select device dynamically device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # Log rank initialization print(f"Rank {rank}/{world_size} initialized with backend {backend} on device {device}.") # Initialize tensor on the selected device tensor = torch.zeros(1, device=device) if rank == 0: tensor += 1 for i in range(1, world_size): dist.send(tensor, dst=i) else: dist.recv(tensor, src=0) print(f"Rank {rank}: Tensor value {tensor.item()} on {device}") # Cleanup dist.destroy_process_group()注意在本示例培训工作中,您不需要安装任何其他软件包或设置任何培训参数。
有关如何添加其他软件包并设置培训参数的更多信息,请参阅配置调优作业。
- 可选:编辑内容来为您的环境指定适当的值。
- 运行单元以创建培训功能。
配置 Training Operator SDK 客户端身份验证,如下所示:
使用以下内容创建单元:
培训 Operator SDK 客户端身份验证示例
from kubernetes import client from kubeflow.training import TrainingClient from kubeflow.training.models import V1Volume, V1VolumeMount, V1PersistentVolumeClaimVolumeSource api_server = "<API_SERVER>" token = "<TOKEN>" configuration = client.Configuration() configuration.host = api_server configuration.api_key = {"authorization": f"Bearer {token}"} # Un-comment if your cluster API server uses a self-signed certificate or an un-trusted CA #configuration.verify_ssl = False api_client = client.ApiClient(configuration) client = TrainingClient(client_configuration=api_client.configuration)编辑
api_server和token参数,以输入要向 OpenShift 集群进行身份验证的值。有关如何查找服务器和令牌详情的详情,请参考使用集群服务器和令牌进行身份验证。
- 运行单元来配置 Training Operator SDK 客户端身份验证。
- 点 File > Save Notebook As,输入适当的文件名,然后点 Save。
验证
- 所有单元都成功运行。
4.2.2. 使用 Training Operator SDK 运行培训作业 复制链接链接已复制到粘贴板!
当您运行培训作业来调优模型时,您必须指定所需的资源,并提供所需的任何授权凭证。
此流程中的代码指定如何运行示例培训作业。如果您有指定的资源,可以在不编辑的情况下运行示例代码。
或者,您可以修改示例代码,以指定培训工作的适当详情。
先决条件
- 您可以使用支持的加速器访问具有足够 worker 节点的 OpenShift 集群,以运行您的培训或调优作业。
- 您可以访问适合分布式培训的工作台,如 为分布式培训 创建工作台 中所述。
具有数据科学项目的管理员访问权限。
- 如果创建项目,则会自动具有管理员访问权限。
- 如果没有创建项目,您的集群管理员必须授予管理员访问权限。
-
您已通过将
kueue.openshift.io/managed=true标签应用到项目命名空间,为 Kueue.openshift.io/managed=true 标签启用了您的项目。 - 您已为数据科学项目创建了资源类别、集群队列和本地队列 Kueue 对象。有关创建这些对象的更多信息,请参阅 为分布式工作负载配置配额管理。
- 您可以访问模型。
- 您可以访问可用于培训模型的数据。
- 您已配置了培训工作,如使用 training Operator SDK 配置培训作业 中所述。
流程
打开工作台,如下所示:
- 登录到 Red Hat OpenShift AI web 控制台。
- 点 Data Science projects 并点您的项目。
- 单击 Workbenches 选项卡。如果您的工作台还没有运行,请启动工作台。
- 点 Open 链接在新窗口中打开 IDE。
-
点 File
Open,打开您用来配置培训作业的 Jupyter 笔记本。 创建单元来运行作业,并添加以下内容:
from kubernetes import client # Start PyTorchJob with 2 Workers and 2 GPU per Worker (multi-node, multi-worker job). client.create_job( name="pytorch-ddp", train_func=train_func, base_image="quay.io/modh/training:py311-cuda124-torch251", num_workers=2, resources_per_worker={"nvidia.com/gpu": "2"}, packages_to_install=["torchvision==0.19.0"], env_vars={"NCCL_DEBUG": "INFO", "TORCH_DISTRIBUTED_DEBUG": "DETAIL"}, labels={ "kueue.x-k8s.io/queue-name": "<local-queue-name>", "key": "value" }, annotations={"key": "value"} )编辑内容以指定环境的适当值,如下所示:
-
编辑
num_workers值,以指定 worker 节点的数量。 -
根据作业要求和可用资源更新
resources_per_worker值。 -
编辑
kueue.x-k8s.io/queue-name标签的值,以匹配目标LocalQueue的名称。 提供的示例是 NVIDIA GPU。如果使用 AMD 加速器,请进行以下额外更改:
-
在
resources_per_worker条目中,将nvidia.com/gpu改为amd.com/gpu -
将
base_image值更改为quay.io/modh/ training:py311-rocm62-torch251 -
删除
NCCL_DEBUG条目
-
在
-
编辑
如果没有显式设置 job_kind 值,则 TrainingClient API 会自动将 job_kind 值设置为 PyTorchJob。
- 运行单元以运行该作业。
验证
查看作业的进度,如下所示:
使用以下内容创建单元:
client.get_job_logs( name="pytorch-ddp", job_kind="PyTorchJob", follow=True, )- 运行单元以查看作业进度。