您可以为容器启用和管理图形处理单元 (GPU) 资源。例如,您可能更喜欢在 GPU 环境中运行人工智能 (AI) 和机器学习 (ML) 笔记本。如需运行 GPU 容器工作负载,您必须拥有支持 GPU 设备的 Kubernetes 集群。对于已为其预配 GPU 机器的 Kubernetes 集群,默认启用 GPU 支持。
本文档适用于应用运算符组中的应用开发者,他们负责为其组织创建应用工作负载。如需了解详情,请参阅 GDC 气隙文档的受众。
准备工作
如需完成本文档中的任务,您必须请求必要的权限并准备环境。
请求 IAM 角色
您必须拥有特定角色,才能获得将 GPU 部署到容器所需的权限。您需要的角色取决于您是在组织范围内的共享集群还是项目范围内的标准集群中工作。如需了解详情,请参阅 Kubernetes 集群 配置。
共享集群角色
如需验证支持 GPU 的节点池并在共享集群中部署 GPU 工作负载,请根据要执行的任务请求以下角色:
- 用户集群管理员 (
user-cluster-admin):创建、删除、修改或查看管理 API 服务器上托管的共享集群的资源。借助此角色,您可以检查共享集群中的 GPU,并且此角色不绑定到您的项目命名空间。 - 命名空间管理员 (
namespace-admin):创建、删除、修改或查看项目中托管的共享集群的资源。借助此角色,您可以将 GPU 工作负载部署到标准集群,并且此角色绑定到您的项目命名空间。
标准集群角色
如需验证支持 GPU 的节点池并将 GPU 工作负载部署到标准集群,请让您的项目 IAM 管理员为您授予以下角色:
- 标准集群管理员 (
standard-cluster-admin):创建、删除、修改或查看管理 API 服务器上托管的标准集群的资源。借助此角色,您可以检查共享集群中的 GPU,并且此角色绑定到您的项目命名空间。 - 集群开发者 (
cluster-developer):创建、删除、修改或查看标准集群。借助此角色,您可以通过访问标准集群中托管的数据平面 API,将 GPU 工作负载部署到标准集群。此角色绑定到您的项目命名空间。
准备环境
如需将容器配置为使用 GPU 资源,请确保您拥有以下资源:
具有 GPU 机器类的 Kubernetes 集群。如需了解详情,请参阅 支持的 GPU 卡 部分。
找到 Kubernetes 集群名称,或向平台管理员组的成员询问集群名称。
登录并生成 Kubernetes 集群的 kubeconfig 文件。
使用 Kubernetes 集群的 kubeconfig 路径替换这些说明中的
KUBERNETES_CLUSTER_KUBECONFIG。登录并生成 托管 Kubernetes 集群的可用区管理 API 服务器的 kubeconfig 文件。使用此路径替换这些说明中的
MANAGEMENT_API_SERVER。登录并生成旨在 托管 GPU 的可用区中的组织基础架构集群的 kubeconfig 文件。
将容器配置为使用 GPU 资源
如需在容器中使用这些 GPU,请完成以下步骤:
验证 Kubernetes 集群是否具有支持 GPU 的节点池:
kubectl describe clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \ -n KUBERNETES_CLUSTER_NAMESPACE \ --kubeconfig MANAGEMENT_API_SERVER替换以下内容:
KUBERNETES_CLUSTER_NAME:集群的名称。KUBERNETES_CLUSTER_NAMESPACE:集群的命名空间。对于共享集群,请使用platform命名空间。对于标准集群,请使用集群的项目命名空间。MANAGEMENT_API_SERVER:托管 Kubernetes 集群的可用区 API 服务器的 kubeconfig 路径。如果您尚未为目标可用区中的 API 服务器生成 kubeconfig 文件,请参阅登录。
相关输出类似于以下代码段:
# Several lines of code are omitted here. spec: nodePools: - machineTypeName: a2-ultragpu-1g-gdc nodeCount: 2 # Several lines of code are omitted here.如需查看支持的 GPU 机器类型和多实例 GPU (MIG) 配置文件的完整列表,请参阅 集群节点机器类型。
将
.containers.resources.requests和.containers.resources.limits字段添加到容器规范中。每个资源名称都不同,具体取决于您的机器类。 检查 GPU 资源分配情况以查找 您的 GPU 资源名称。例如,以下容器规范从
a2-ultragpu-1g-gdc节点请求 GPU 的三个分区:# Several lines of code are omitted here. 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 # Several lines of code are omitted here.容器还需要额外的权限才能访问 GPU。对于请求 GPU 的每个容器,请将以下权限添加到容器规范中:
# Several lines of code are omitted here. securityContext: seLinuxOptions: type: unconfined_t # Several lines of code are omitted here.应用容器清单文件:
kubectl apply -f CONTAINER_MANIFEST_FILE \ -n KUBERNETES_CLUSTER_NAMESPACE \ --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG替换以下内容:
CONTAINER_MANIFEST_FILE:容器工作负载的 YAML 清单文件。KUBERNETES_CLUSTER_NAMESPACE:集群的命名空间。对于共享集群,请使用platform命名空间。对于标准集群,请使用集群的项目命名空间。KUBERNETES_CLUSTER_KUBECONFIG:集群的 kubeconfig 路径。
检查 GPU 资源分配情况
如需检查 GPU 资源分配情况,请使用以下命令:
kubectl describe nodes NODE_NAME --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG替换以下内容:
NODE_NAME:管理您要检查的 GPU 的节点。KUBERNETES_CLUSTER_KUBECONFIG:集群的 kubeconfig 路径。
相关输出类似于以下代码段:
# Several lines of code are omitted here. Capacity: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7 Allocatable: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7 # Several lines of code are omitted here.
请记下 GPU 的资源名称;在将容器配置为使用 GPU 资源时,您必须指定这些名称。