4.2. 使用 training Operator SDK 运行分布式培训工作负载


您可以使用 Training Operator SDK 将分布式培训作业配置为在每个节点有多个加速器的多个节点上运行。

您可以配置 PyTorchJob 资源,以便培训作业在多个带有多个 GPU 的节点上运行。

4.2.1. 使用 Training Operator SDK 配置培训作业

在运行作业以培训模型之前,您必须配置培训工作。您必须设置培训参数,定义培训功能,并配置 training Operator SDK。

注意

此流程中的代码指定如何配置一个示例培训作业。如果您有指定的资源,可以在不编辑的情况下运行示例代码。

或者,您可以修改示例代码,以指定适合您的培训工作配置。

先决条件

  • 您可以使用支持的加速器访问具有足够 worker 节点的 OpenShift 集群,以运行您的培训或调优作业。
  • 您可以访问适合分布式培训的工作台,如 为分布式培训 创建工作台 中所述。
  • 具有数据科学项目的管理员访问权限。

    • 如果创建项目,则会自动具有管理员访问权限。
    • 如果没有创建项目,您的集群管理员必须授予管理员访问权限。

流程

  1. 打开工作台,如下所示:

    1. 登录到 Red Hat OpenShift AI web 控制台。
    2. Data Science projects 并点您的项目。
    3. 单击 Workbenches 选项卡。
    4. 如果您的工作台还没有运行,请启动工作台。
    5. Open 链接在新窗口中打开 IDE。
  2. File New Notebook
  3. 创建培训功能,如下例所示:

    1. 使用以下内容创建单元:

      培训功能示例

      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()

      注意

      在本示例培训工作中,您不需要安装任何其他软件包或设置任何培训参数。

      有关如何添加其他软件包并设置培训参数的更多信息,请参阅配置调优作业

    2. 可选:编辑内容来为您的环境指定适当的值。
    3. 运行单元以创建培训功能。
  4. 配置 Training Operator SDK 客户端身份验证,如下所示:

    1. 使用以下内容创建单元:

      培训 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)

    2. 编辑 api_servertoken 参数,以输入要向 OpenShift 集群进行身份验证的值。

      有关如何查找服务器和令牌详情的详情,请参考使用集群服务器和令牌进行身份验证

    3. 运行单元来配置 Training Operator SDK 客户端身份验证。
  5. File > Save Notebook As,输入适当的文件名,然后点 Save

验证

  1. 所有单元都成功运行。

4.2.2. 使用 Training Operator SDK 运行培训作业

当您运行培训作业来调优模型时,您必须指定所需的资源,并提供所需的任何授权凭证。

注意

此流程中的代码指定如何运行示例培训作业。如果您有指定的资源,可以在不编辑的情况下运行示例代码。

或者,您可以修改示例代码,以指定培训工作的适当详情。

先决条件

  • 您可以使用支持的加速器访问具有足够 worker 节点的 OpenShift 集群,以运行您的培训或调优作业。
  • 您可以访问适合分布式培训的工作台,如 为分布式培训 创建工作台 中所述。
  • 具有数据科学项目的管理员访问权限。

    • 如果创建项目,则会自动具有管理员访问权限。
    • 如果没有创建项目,您的集群管理员必须授予管理员访问权限。
  • 您已通过将 kueue.openshift.io/managed=true 标签应用到项目命名空间,为 Kueue.openshift.io/managed=true 标签启用了您的项目。
  • 您已为数据科学项目创建了资源类别、集群队列和本地队列 Kueue 对象。有关创建这些对象的更多信息,请参阅 为分布式工作负载配置配额管理
  • 您可以访问模型。
  • 您可以访问可用于培训模型的数据。
  • 您已配置了培训工作,如使用 training Operator SDK 配置培训作业 中所述。

流程

  1. 打开工作台,如下所示:

    1. 登录到 Red Hat OpenShift AI web 控制台。
    2. Data Science projects 并点您的项目。
    3. 单击 Workbenches 选项卡。如果您的工作台还没有运行,请启动工作台。
    4. Open 链接在新窗口中打开 IDE。
  2. File Open,打开您用来配置培训作业的 Jupyter 笔记本。
  3. 创建单元来运行作业,并添加以下内容:

    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"}
    )
  4. 编辑内容以指定环境的适当值,如下所示:

    1. 编辑 num_workers 值,以指定 worker 节点的数量。
    2. 根据作业要求和可用资源更新 resources_per_worker 值。
    3. 编辑 kueue.x-k8s.io/queue-name 标签的值,以匹配目标 LocalQueue 的名称。
    4. 提供的示例是 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

  1. 运行单元以运行该作业。

验证

查看作业的进度,如下所示:

  1. 使用以下内容创建单元:

    client.get_job_logs(
        name="pytorch-ddp",
        job_kind="PyTorchJob",
        follow=True,
    )
  2. 运行单元以查看作业进度。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部