管理 GPU 容器工作负载

您可以在容器中启用和管理图形处理单元 (GPU) 资源。例如,您可能更喜欢在 GPU 环境中运行人工智能 (AI) 和机器学习 (ML) Notebook。如需运行 GPU 容器工作负载,您必须拥有支持 GPU 设备的 Kubernetes 集群。对于已预配 GPU 机器的 Kubernetes 集群,默认启用 GPU 支持。

准备工作

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

  • 具有 GPU 机器类的 Kubernetes 集群。如需了解可为集群机器配置的选项,请参阅支持的 GPU 卡部分。

  • User Cluster Node Viewer 角色 (user-cluster-node-viewer) 用于检查 GPU,Namespace Admin 角色 (namespace-admin) 用于在项目命名空间中部署 GPU 工作负载。

  • 托管 Kubernetes 集群的区域管理 API 服务器的 kubeconfig 路径。登录并生成 kubeconfig 文件(如果您还没有)。

  • 组织基础架构集群在旨在托管 GPU 的可用区中的 kubeconfig 路径。 登录并生成 kubeconfig 文件(如果您还没有)。

  • Kubernetes 集群名称。如果您没有此信息,请向平台管理员索取。

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

配置容器以使用 GPU 资源

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

  1. 验证您的 Kubernetes 集群是否具有支持 GPU 的节点池:

    kubectl describe nodepoolclaims -n KUBERNETES_CLUSTER_NAME \
        --kubeconfig ORG_INFRASTRUCTURE_CLUSTER
    

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

    Spec:
      Machine Class Name:  a2-ultragpu-1g-gdc
      Node Count:          2
    

    如需查看受支持的 GPU 机器类型和多实例 GPU (MIG) 配置文件的完整列表,请参阅集群节点机器类型

  2. .containers.resources.requests.containers.resources.limits 字段添加到容器规范中。每个资源名称因机器类而异。 检查 GPU 资源分配,找到 GPU 资源名称。

    例如,以下容器规范从 a2-ultragpu-1g-gdc 节点请求了 GPU 的三个分区:

     ...
     containers:
     - name: my-container
       image: "my-image"
       resources:
         requests:
           nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3
         limits:
           nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3
     ...
    
  3. 容器还需要额外的权限才能访问 GPU。对于每个请求 GPU 的容器,请将以下权限添加到容器规范中:

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

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

检查 GPU 资源分配

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

    kubectl describe nodes NODE_NAME
    

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

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

    Capacity:
      nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7
    Allocatable:
      nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7
    

记下 GPU 的资源名称;在配置容器以使用 GPU 资源时,您必须指定这些名称。