部署 GPU 容器工作负载

借助 Google Distributed Cloud (GDC) Sandbox AI Optimized SKU,您可以在支持 GPU 的容器中运行加速 AI 和计算密集型应用。在本文档中,您将配置容器资源请求和安全设置,以便在专用 NVIDIA H100 GPU 上部署工作负载。

部署 GPU 容器工作负载

GDC Sandbox AI 优化型 SKU 在 org-infra 集群中包含四个 NVIDIA H100 80GB HBM3 GPU。您可以使用资源名称 nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3 访问这些 GPU。本部分介绍了如何更新容器配置以使用这些 GPU。

GDC Sandbox AI 优化型 SKU 中的 GPU 与预配置的项目“sandbox-gpu-project”(仅存在于 GDC Sandbox AI 优化型 SKU 实例中)相关联。您必须在 org-1-infra 集群中使用此项目部署容器,才能使用 GPU。

准备工作

  • 如需针对组织基础设施集群运行命令,请确保您拥有 org-1-infra 集群的 kubeconfig,如使用集群中所述:

    • 使用 gdcloud 命令行进行配置和身份验证,以及
    • 为组织基础设施集群生成 kubeconfig 文件,并将其路径分配给环境变量 KUBECONFIG。
  • 如需运行工作负载,您必须拥有 sandbox-gpu-admin 角色。 默认情况下,该角色会分配给 platform-admin 用户。您可以通过以 platform-admin 身份登录并运行以下命令,将该角色分配给其他用户:

    kubectl --kubeconfig ${KUBECONFIG} create rolebinding ${NAME} --role=sandbox-gpu-admin \
    --user=${USER} --namespace=sandbox-gpu-project
    
  • 如需允许网络流量进入容器,您必须制定项目网络政策。如需了解详情,请参阅创建网络政策。

配置容器以使用 GPU 资源

  1. 将 .containers.resources.requests 和 .containers.resources.limits 字段添加到容器规范中,以便为工作负载请求 GPU。sandbox-gpu-project 中的所有容器在整个项目中最多可以请求 4 个 GPU。以下示例在容器规范中请求一个 GPU。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: sandbox-gpu-project
      labels:
        app: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:latest
            resources:
              requests:
                nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1
              limits:
                nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1
    
  1. 容器还需要额外的权限才能访问 GPU。对于请求 GPU 的每个容器,请向该容器添加一个 .containers.securityContext,以授予 unconfined_t 类型的 securityContext.seLinuxOptions。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: sandbox-gpu-project
      labels:
        app: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:latest
            resources:
              requests:
                nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1
              limits:
                nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1
            securityContext:
              seLinuxOptions:
                type: unconfined_t
    
  2. 应用容器清单文件:

    kubectl apply -f ${CONTAINER_MANIFEST_FILE_PATH} \
        -n sandbox-gpu-project \
        --kubeconfig ${KUBECONFIG}