管理 GPU 工作负载

本页面介绍了如何管理 Google Distributed Cloud Connected 上的图形处理单元 (GPU) 工作负载。如需利用此功能,您必须拥有包含 GPU 的 Distributed Cloud 连接硬件配置。如需了解详情,请参阅规划硬件配置

分布式云连接的工作负载可以在容器和虚拟机中运行:

  • 在容器中运行的 GPU 工作负载。Distributed Cloud 连接集群上的所有 GPU 资源最初都会分配给在容器中运行的工作负载。Distributed Cloud Connected 中包含用于运行基于 GPU 的容器化工作负载的 GPU 驱动程序。在每个容器中,GPU 库都装载在 /opt/nvidia

  • 在虚拟机上运行的 GPU 工作负载。如需在虚拟机上运行基于 GPU 的工作负载,您必须在目标 Distributed Cloud 连接节点上为虚拟机分配 GPU 资源,如本页稍后所述。这样做会绕过内置 GPU 驱动程序,并将 GPU 直接传递给虚拟机。您必须在每个虚拟机的 guest 操作系统上手动安装兼容的 GPU 驱动程序。您还必须获得在虚拟机上运行专用 GPU 驱动程序所需的所有许可。

如需确认分布式云连接节点上是否存在 GPU,请验证该节点是否具有 vm.cluster.gke.io.gpu=true 标签。如果节点上没有该标签,则表示相应的 Distributed Cloud 连接的物理机上未安装 GPU。

分配 GPU 资源

默认情况下,集群中每个节点上的所有 GPU 资源都会分配给容器化工作负载。如需自定义每个节点上 GPU 资源的分配,请完成本部分中的步骤。

配置 GPU 资源分配

  1. 如需在连接的 Distributed Cloud 节点上分配 GPU 资源,请使用以下命令修改目标节点上的 GPUAllocation 自定义资源:

    kubectl edit gpuallocation NODE_NAME --namespace vm-system

    NODE_NAME 替换为目标 Distributed Cloud 节点的名称。

    在以下示例中,命令的输出显示了出厂默认 GPU 资源分配。默认情况下,所有 GPU 资源都分配给容器化 (pod) 工作负载,而不会分配给虚拟机 (vm) 工作负载:

    ...
    spec:
      pod:   2  # Number of GPUs allocated for container workloads
      vm:    0  # Number of GPUs allocated for VM workloads
    
  2. 按如下方式设置 GPU 资源分配:

    • 如需为容器化工作负载分配 GPU 资源,请增加 pod 字段的值,并以相同的量减少 vm 字段的值。
    • 如需为虚拟机工作负载分配 GPU 资源,请增加 vm 字段的值,并以相同的量减少 pod 字段的值。

    分配的 GPU 资源总数不得超过节点运行所在的已连接的物理分布式云机器上安装的 GPU 数量;否则,节点会拒绝无效的分配。

    在以下示例中,两个 GPU 资源已从容器化 (pod) 工作负载重新分配给虚拟机 (vm) 工作负载:

    ...
    spec:
      pod:   0  # Number of GPUs allocated for container workloads
      vm:    2  # Number of GPUs allocated for VM workloads
    

    完成后,将修改后的 GPUAllocation 资源应用到集群,并等待其状态变为 AllocationFulfilled

检查 GPU 资源分配

  • 如需检查 GPU 资源分配情况,请使用以下命令:

    kubectl describe gpuallocations NODE_NAME --namespace vm-system

    NODE_NAME 替换为目标 Distributed Cloud 连接节点的名称。

    该命令会返回类似于以下示例的输出:

     Name:         mynode1
     ...
     spec:
       node:  mynode1
       pod:   2  # Number of GPUs allocated for container workloads
       vm:    0  # Number of GPUs allocated for VM workloads
     Status:
       Allocated:  true
       Conditions:
         Last Transition Time:  2022-09-23T03:14:10Z
         Message:
         Observed Generation:   1
         Reason:                AllocationFulfilled
         Status:                True
         Type:                  AllocationStatus
         Last Transition Time:  2022-09-23T03:14:16Z
         Message:
         Observed Generation:   1
         Reason:                DeviceStateUpdated
         Status:                True
         Type:                  DeviceStateUpdated
       Consumption:
         pod:         0/2   # Number of GPUs currently consumed by container workloads
         vm:          0/0   # Number of GPUs currently consumed by VM workloads
       Device Model:  Tesla T4
     Events:          <none>
    

配置容器以使用 GPU 资源

如需配置在连接到 Distributed Cloud 的容器上运行的容器以使用 GPU 资源,请按以下示例所示配置其规范,然后将其应用于集群:

  apiVersion: v1
  kind: Pod
  metadata:
    name: my-gpu-pod
  spec:
    containers:
    - name: my-gpu-container
      image: CUDA_TOOLKIT_IMAGE
      command: ["/bin/bash", "-c", "--"]
      args: ["while true; do sleep 600; done;"]
      env:
      resources:
        requests:
        GPU_MODEL: 2
        limits:
        GPU_MODEL: 2
    nodeSelector:
      kubernetes.io/hostname: NODE_NAME

替换以下内容:

  • CUDA_TOOLKIT_IMAGE:NVIDIA CUDA 工具包映像的完整路径和名称。CUDA 工具包的版本必须与在 Distributed Cloud Connected Cluster 上运行的 NVIDIA 驱动程序的版本相匹配。如需确定 NVIDIA 驱动程序版本,请参阅 Distributed Cloud 版本说明。 如需查找匹配的 CUDA 工具包版本,请参阅 CUDA 兼容性
  • NODE_NAME:目标 Distributed Cloud Connected 节点的名称。
  • GPU_MODEL:安装在目标 Distributed Cloud 连接机器中的 NVIDIA GPU 的型号。有效值包括:
    • nvidia.com/gpu-pod-NVIDIA_L4(适用于 NVIDIA L4 GPU)
    • nvidia.com/gpu-pod-TESLA_T4(适用于 NVIDIA Tesla T4 GPU)

配置虚拟机以使用 GPU 资源

如需将在 Distributed Cloud Connected 上运行的虚拟机配置为使用 GPU 资源,请按以下示例所示配置其 VirtualMachine 资源规范,然后将其应用于集群:

apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachine
...
spec:
  ...
  gpu:
    model: GPU_MODEL
    quantity: 2

替换以下内容:

  • GPU_MODEL:安装在目标 Distributed Cloud 连接机器中的 NVIDIA GPU 的型号。有效值包括:
    • nvidia.com/gpu-pod-NVIDIA_L4(适用于 NVIDIA L4 GPU)
    • nvidia.com/gpu-pod-TESLA_T4(适用于 NVIDIA Tesla T4 GPU)

后续步骤