管理 GPU 容器工作负载

您可以在容器中启用和管理图形处理单元 (GPU) 资源。例如,您可能更喜欢在 GPU 环境中运行人工智能 (AI) 和机器学习 (ML) Notebook。在 Google Distributed Cloud (GDC) 经过网闸隔离的设备中,GPU 支持默认处于启用状态。

准备工作

如需将 GPU 部署到容器,您必须具备以下条件:

  • 在项目命名空间中部署 GPU 工作负载所需的命名空间管理员角色 (namespace-admin)。

  • 裸机 Kubernetes 集群的 kubeconfig 路径。 登录并生成 kubeconfig 文件(如果您还没有)。

配置容器以使用 GPU 资源

如需在容器中使用 GPU,请完成以下步骤:

  1. 确认您的 Kubernetes 集群节点支持 GPU 资源分配:

    kubectl describe nodes NODE_NAME
    

    NODE_NAME 替换为管理您要检查的 GPU 的节点。

    相关输出类似于以下代码段:

    Capacity:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
    Allocatable:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
    
  2. .containers.resources.requests.containers.resources.limits 字段添加到容器规范中。由于 Kubernetes 集群已预先配置了 GPU 机器,因此所有工作负载的配置都相同:

     ...
     containers:
     - name: CONTAINER_NAME
       image: CONTAINER_IMAGE
       resources:
         requests:
           nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
         limits:
           nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
     ...
    

    替换以下内容:

    • CONTAINER_NAME:容器的名称。
    • CONTAINER_IMAGE:用于访问 GPU 机器的容器映像。您必须添加映像的容器注册表路径和版本,例如 REGISTRY_PATH/hello-app:1.0
  3. 容器还需要额外的权限才能访问 GPU。对于每个请求 GPU 的容器,请将以下权限添加到容器规范中:

    ...
    securityContext:
     seLinuxOptions:
       type: unconfined_t
    ...
    
  4. 应用容器清单文件:

    kubectl apply -f CONTAINER_MANIFEST_FILE \
        -n NAMESPACE \
        --kubeconfig CLUSTER_KUBECONFIG
    

    替换以下内容:

    • CONTAINER_MANIFEST_FILE:容器工作负载自定义资源的 YAML 文件。
    • NAMESPACE:用于部署容器工作负载的项目命名空间。
    • CLUSTER_KUBECONFIG:您要将容器工作负载部署到的裸金属 Kubernetes 集群的 kubeconfig 文件。
  5. 验证您的 pod 是否正在运行并使用 GPU:

    kubectl get pods -A | grep CONTAINER_NAME \
        -n NAMESPACE \
        --kubeconfig CLUSTER_KUBECONFIG
    

    相关输出类似于以下代码段:

    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
    Ready:          True
    Restart Count:  0
    Limits:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE:  1
    Requests:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE:  1