本页介绍了如何在 Google Distributed Cloud 上启用和管理图形处理单元 (GPU) 工作负载。如需利用此功能,您必须拥有包含 GPU 的 Distributed Cloud 硬件配置。GPU 支持默认处于停用状态。您必须在 Distributed Cloud 集群上明确启用 GPU 支持。请注意,Distributed Cloud Servers 不支持 GPU 工作负载。
如需规划和订购此类配置,请在以下文档中选择配置 2:
如果您的 Distributed Cloud 机架包含 GPU,您可以配置 Distributed Cloud 工作负载以使用 GPU 资源。
Distributed Cloud 工作负载可以在容器中和虚拟机上运行:
在容器中运行的 GPU 工作负载。启用 GPU 支持后,Distributed Cloud 集群上的所有 GPU 资源最初都会分配给在容器中运行的工作负载。用于运行基于 GPU 的容器化工作负载的 GPU 驱动程序包含在 Distributed Cloud 中。在每个容器中,GPU 库都装载在
/opt/nvidia。在虚拟机上运行的 GPU 工作负载。如需在虚拟机上运行基于 GPU 的工作负载,您必须在目标 Distributed Cloud 节点上为虚拟机分配 GPU 资源,如本页稍后所述。这样做会绕过内置 GPU 驱动程序,并将 GPU 直接传递给虚拟机。您必须在每个虚拟机的 guest 操作系统上手动安装兼容的 GPU 驱动程序。您还必须获得在虚拟机上运行专用 GPU 驱动程序所需的所有许可。
如需确认 Distributed Cloud 节点上是否存在 GPU,请验证该节点是否具有 vm.cluster.gke.io.gpu=true 标签。如果节点上没有该标签,则表示相应的 Distributed Cloud 物理机上未安装 GPU。
启用 GPU 支持
如需为工作负载启用 GPU 支持,您必须创建或修改 VMRuntime 自定义资源,该资源包含 enableGPU 参数,且该参数的值设置为 true,然后将其应用于 Distributed Cloud 集群。例如:
apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime spec: # Enable GPU support enableGPU: true
根据您要在哪个类型的集群上启用 GDC 虚拟机子系统上的虚拟机运行时,执行以下操作之一:
- 对于尚未启用 VM Runtime on GDC 虚拟机子系统的云控制平面集群,您必须手动创建
VMRuntime资源。 - 对于您已在其中启用 VM Runtime on GDC 虚拟机子系统的云控制平面集群,您必须修改现有的
VMRuntime资源 - 对于本地控制平面集群,您必须修改现有的
VMRuntime资源。
同一 VMRuntime 资源还可通过使用 enable 参数在集群上配置 VM Runtime on GDC 支持。请务必根据工作负载需求配置这两个参数。您不必启用 VM Runtime on GDC 支持,即可在 Distributed Cloud 集群上启用 GPU 支持。
下表介绍了可用的配置。
enable 值 |
enableGPU 值 |
生成的配置 |
|---|---|---|
false |
false |
工作负载仅在容器中运行,无法使用 GPU 资源。 |
false |
true |
工作负载仅在容器中运行,并且可以使用 GPU 资源。 |
true |
true |
工作负载可以在虚拟机上运行,也可以在容器中运行。 这两种类型的工作负载都可以使用 GPU 资源。 |
true |
false |
工作负载可以在虚拟机上运行,也可以在容器中运行。 这两种类型的工作负载都无法使用 GPU 资源。 |
验证是否已启用 GPU 支持
如需验证集群是否已启用 GPU 支持,请使用以下命令:
kubectl get pods --namespace vm-system
该命令会返回类似于以下示例的输出:
NAME READY STATUS RESTARTS AGE
...
gpu-controller-controller-manager-vbv4w 2/2 Running 0 31h
kubevirt-gpu-dp-daemonset-gxj7g 1/1 Running 0 31h
nvidia-gpu-dp-daemonset-bq2vj 1/1 Running 0 31h
...
在输出中,您可以验证 GPU 控制器 Pod 是否已部署并正在 vm-system 命名空间中运行。
分配 GPU 资源
默认情况下,在分布式云集群上启用 GPU 支持后,集群中每个节点上的所有 GPU 资源都会分配给容器化工作负载。如需自定义每个节点上 GPU 资源的分配,请完成本部分中的步骤。
配置 GPU 资源分配
如需在 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按如下方式设置 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 资源分配
如需检查 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: nvidia.com/gpu-pod-TESLA_T4: 2 limits: nvidia.com/gpu-pod-TESLA_T4: 2 nodeSelector: kubernetes.io/hostname: NODE_NAME
替换以下内容:
CUDA_TOOLKIT_IMAGE:NVIDIA CUDA 工具包映像的完整路径和名称。CUDA 工具包的版本必须与在 Distributed Cloud 集群上运行的 NVIDIA 驱动程序的版本一致。 如需确定 NVIDIA 驱动程序版本,请参阅 Distributed Cloud 版本说明。 如需查找匹配的 CUDA 工具包版本,请参阅 CUDA 兼容性。NODE_NAME:目标 Distributed Cloud 节点的名称。
配置虚拟机以使用 GPU 资源
如需将在 Distributed Cloud 上运行的虚拟机配置为使用 GPU 资源,请按以下示例所示配置其 VirtualMachine 资源规范,然后将其应用于集群:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine ... spec: ... gpu: model: nvidia.com/gpu-vm-TESLA_T4 quantity: 2