您可以在容器中启用和管理图形处理单元 (GPU) 资源。例如,您可能更喜欢在 GPU 环境中运行人工智能 (AI) 和机器学习 (ML) Notebook。如需运行 GPU 容器工作负载,您必须拥有支持 GPU 设备的 Kubernetes 集群。对于已预配 GPU 机器的 Kubernetes 集群,默认启用 GPU 支持。
本文档适用于应用运维人员群组中的应用开发者,他们负责为组织创建应用工作负载。如需了解详情,请参阅 GDC 气隙环境受众群体文档。
准备工作
如需将 GPU 部署到容器,您必须满足以下条件:
具有 GPU 机器类的 Kubernetes 集群。如需了解可为集群机器配置的选项,请参阅支持的 GPU 卡部分。
用户集群管理员角色 (
user-cluster-admin) 用于检查共享集群中的 GPU,项目命名空间中的命名空间管理员角色 (namespace-admin) 用于将 GPU 工作负载部署到共享集群。Standard 集群管理员角色 (
standard-cluster-admin) 用于检查标准集群中的 GPU,以及标准集群中的集群开发者角色 (cluster-developer) 用于将 GPU 工作负载部署到标准集群。如需针对 Kubernetes 集群运行命令,请确保您拥有以下资源:
找到 Kubernetes 集群名称,或向平台管理员群组的成员询问集群名称。
登录并生成 Kubernetes 集群的 kubeconfig 文件(如果您还没有)。
使用 Kubernetes 集群的 kubeconfig 路径替换这些说明中的
KUBERNETES_CLUSTER_KUBECONFIG。
托管 Kubernetes 集群的区域管理 API 服务器的 kubeconfig 路径。登录并生成 kubeconfig 文件(如果您还没有)。
旨在托管 GPU 的可用区中组织基础架构集群的 kubeconfig 路径。 登录并生成 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 的三个分区:... 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 ...容器还需要额外的权限才能访问 GPU。对于每个请求 GPU 的容器,请将以下权限添加到容器规范中:
... securityContext: seLinuxOptions: type: unconfined_t ...应用容器清单文件:
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 资源时,您必须指定这些名称。