要使开发人员能够在 TKGS 集群上部署 AI/ML 工作负载,作为集群运维人员,您可以将 Kubernetes 环境配置为支持 NVIDIA vGPU 操作。
在 TKGS 集群上部署 AI/ML 工作负载的集群运维人员工作流
步骤 | 操作 | 链接 |
---|---|---|
0 | 查看系统要求。 |
请参见运维人员步骤 0:查看系统要求。 |
1 | 将 kubectl 和适用于 Kubectl 的 vSphere 插件下载到本地 Workstation。 | 请参见运维人员步骤 1:在 Workstation 上安装适用于 vSphere 的 Kubernetes CLI 工具。 |
2 | 使用 kubectl 登录到主管集群,该集群使用新主管集群的上下文填充 .kube/config。 | 请参见运维人员步骤 2:登录到主管集群。 |
3 | 使用 kubectl 将上下文切换到 vSphere 命名空间。 | 请参见运维人员步骤 3:将上下文切换到 vSphere 命名空间。 |
4 | 使用 kubectl 列出虚拟机类,并验证是否存在启用了 NVIDIA vGPU 的类。 | 请参见运维人员步骤 4:获取用于 vGPU 工作负载的自定义虚拟机类。 |
5 | 使用 kubectl 列出可用的 Tanzu Kubernetes 版本,并验证是否存在 Ubuntu 映像。 | 请参见运维人员步骤 5:获取适用于 GPU 节点的 Ubuntu Tanzu Kubernetes 版本。 |
6 | 编写用于置备启用了 GPU 的 TKGS 集群的 YAML 规范;指定 TKR 版本和虚拟机类。 | 请参见运维人员步骤 6:编写用于置备启用了 vGPU 的 TKGS 集群的 YAML。 |
7 | 置备 TKGS 集群。 | 请参见运维人员步骤 7:置备 TKGS 集群。 |
8 | 登录到集群并验证置备。 | 请参见运维人员步骤 8:登录到 TKGS 集群并验证置备。 |
9 | 在 TKGS 集群中创建一些必备对象(包括命名空间、角色绑定、映像密钥和许可证配置),为安装 NVAIE GPU Operator 做准备。 | 请参见运维人员步骤 9:准备安装 NVAIE GPU Operator。 |
10 | 在集群中安装 NVAIE GPU Operator。 | 请参见运维人员步骤 10:在集群中安装 NVIDIA GPU Operator。 |
11 | 将 AI/ML 工作负载部署到启用了 vGPU 的 TKGS 集群。 | 请参见运维人员步骤 11:部署 AI/ML 工作负载。 |
运维人员步骤 0:查看系统要求
要求 | 描述 |
---|---|
vSphere 管理员已设置适合 NVIDIA vGPU 的环境 |
|
TKR Ubuntu OVA | Ubuntu Tanzu Kubernetes 版本
|
TKG 集群置备程序 | Tanzu Kubernetes Grid 服务 API 版本: |
NVIDIA GPU Operator |
GPU Operator v1.8.0 |
NVIDIA GPU 驱动程序容器 |
|
运维人员步骤 1:在 Workstation 上安装适用于 vSphere 的 Kubernetes CLI 工具
下载并安装适用于 vSphere 的 Kubernetes CLI 工具。
如果使用的是 Linux,则可以运行以下命令以下载工具。
curl -LOk https://${SC_IP}/wcp/plugin/linux-amd64/vsphere-plugin.zip unzip vsphere-plugin.zip mv -v bin/* /usr/local/bin/
有关其他指导,请参见下载并安装 适用于 vSphere 的 Kubernetes CLI 工具。
运维人员步骤 2:登录到主管集群
kubectl vsphere login --server=IP-ADDRESS --vsphere-username USERNAME
运维人员步骤 3:将上下文切换到 vSphere 命名空间
kubectl config get-contexts
kubectl config use-context TKGS-GPU-CLUSTER-NAMESPACE
运维人员步骤 4:获取用于 vGPU 工作负载的自定义虚拟机类
kubectl get virtualmachineclassbindings
运维人员步骤 5:获取适用于 GPU 节点的 Ubuntu Tanzu Kubernetes 版本
kubectl get tanzukubernetesreleases
kubectl get tkr
运维人员步骤 6:编写用于置备启用了 vGPU 的 TKGS 集群的 YAML
构建用于置备 Tanzu Kubernetes 集群的 YAML 文件。
从以下示例之一开始。使用从前面命令的输出中收集的信息自定义集群规范。请参阅配置参数的完整列表:用于置备 Tanzu Kubernetes 集群的 TKGS v1alpha2 API。
apiVersion: run.tanzu.vmware.com/v1alpha2 kind: TanzuKubernetesCluster metadata: #cluster name name: tkgs-cluster-gpu-a100 #target vsphere namespace namespace: tkgs-gpu-operator spec: topology: controlPlane: replicas: 3 #storage class for control plane nodes #use `kubectl describe storageclasses` #to get available pvcs storageClass: vwt-storage-policy vmClass: guaranteed-medium #TKR NAME for Ubuntu ova supporting GPU tkr: reference: name: 1.20.8---vmware.1-tkg.1 nodePools: - name: nodepool-a100-primary replicas: 3 storageClass: vwt-storage-policy #custom VM class for vGPU vmClass: class-vgpu-a100 #TKR NAME for Ubuntu ova supporting GPU tkr: reference: name: 1.20.8---vmware.1-tkg.1 - name: nodepool-a100-secondary replicas: 3 vmClass: class-vgpu-a100 storageClass: vwt-storage-policy #TKR NAME for Ubuntu ova supporting GPU tkr: reference: name: 1.20.8---vmware.1-tkg.1 settings: storage: defaultClass: vwt-storage-policy network: cni: name: antrea services: cidrBlocks: ["198.51.100.0/12"] pods: cidrBlocks: ["192.0.2.0/16"] serviceDomain: managedcluster.local
apiVersion: run.tanzu.vmware.com/v1alpha2 kind: TanzuKubernetesCluster metadata: name: tkc namespace: tkg-ns-auto spec: distribution: fullVersion: v1.20.8+vmware.1-tkg.1 topology: controlPlane: replicas: 3 storageClass: vwt-storage-policy tkr: reference: name: v1.20.8---vmware.1-tkg.1 vmClass: best-effort-medium nodePools: - name: workers replicas: 3 storageClass: k8s-storage-policy tkr: reference: name: v1.20.8---vmware.1-tkg.1 vmClass: vmclass-vgpu volumes: - capacity: storage: 50Gi mountPath: /var/lib/containerd name: containerd - capacity: storage: 50Gi mountPath: /var/lib/kubelet name: kubelet - name: nodepool-1 replicas: 1 storageClass: vwt-storage-policy vmClass: best-effort-medium
apiVersion: run.tanzu.vmware.com/v1alpha2 kind: TanzuKubernetesCluster metadata: annotations: labels: run.tanzu.vmware.com/tkr: v1.20.8---vmware.1-tkg.1 name: tkgs-gpu-direct-rdma namespace: tkgs-ns spec: settings: network: cni: name: antrea pods: cidrBlocks: - 192.168.0.0/16 serviceDomain: cluster.local services: cidrBlocks: - 10.96.0.0/12 topology: controlPlane: replicas: 3 storageClass: tkgs-storage-policy vmClass: guaranteed-medium tkr: reference: name: v1.20.8---vmware.1-tkg.1 nodePools: - name: workers replicas: 5 storageClass: tkgs-storage-policy vmClass: claire-gpu-direct-rdma volumes: - capacity: storage: 50Gi mountPath: /var/lib/containerd name: containerd - capacity: storage: 50Gi mountPath: /var/lib/kubelet name: kubelet tkr: reference: name: v1.20.8---vmware.1-tkg.1
运维人员步骤 7:置备 TKGS 集群
kubectl apply -f CLUSTER-NAME.yaml例如:
kubectl apply -f tkgs-gpu-cluster-1.yaml
kubectl get tanzukubernetesclusters -n NAMESPACE
运维人员步骤 8:登录到 TKGS 集群并验证置备
kubectl vsphere login --server=IP-ADDRESS --vsphere-username USERNAME \ --tanzu-kubernetes-cluster-name CLUSTER-NAME --tanzu-kubernetes-cluster-namespace NAMESPACE-NAME
kubectl cluster-info
kubectl get nodes
kubectl get namespaces
kubectl api-resources
运维人员步骤 9:准备安装 NVAIE GPU Operator
- 创建 Kubernetes 命名空间
gpu-operator-resources
。最佳做法是始终将所有内容部署到此命名空间中。kubectl create ns gpu-operator-resources
- 创建角色绑定。
Tanzu Kubernetes 集群已启用 Pod 安全策略。
创建 rolebidings.yaml。apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: psp:vmware-system-privileged:default namespace: default roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: psp:vmware-system-privileged subjects: - apiGroup: rbac.authorization.k8s.io kind: Group name: system:nodes - apiGroup: rbac.authorization.k8s.io kind: Group name: system:serviceaccounts
应用角色绑定。kubectl apply -f rolebindings.yaml
创建 post-rolebindings.yaml。apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: psp:vmware-system-privileged:gpu-operator-resources namespace: gpu-operator-resources roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: psp:vmware-system-privileged subjects: - kind: Group apiGroup: rbac.authorization.k8s.io name: system:serviceaccounts
应用角色绑定:kubectl apply -f post-rolebindings.yaml
- 使用 NGC 凭据创建可供 Docker 用于从 NVIDIA GPU Cloud 目录中提取容器映像的映像密钥。
kubectl create secret docker-registry registry-secret \ --docker-server=server-name --docker-username='$oauthtoken' \ --docker-password=<place_holder> \ --docker-email=email-name -n gpu-operator-resources
- 为 NVIDIA 许可证服务器创建 configmap。
kubectl create configmap licensing-config -n gpu-operator-resources --from-file=gridd.conf
gridd.conf
将引用 NVIDIA 许可证服务器地址,例如:# Description: Set License Server Address # Data type: string # Format: "<address>" ServerAddress=<place_holder>
运维人员步骤 10:在集群中安装 NVIDIA GPU Operator
- 按照 Helm 文档安装 Helm。
- 添加
gpu-operator
Helm 存储库。helm repo add nvidia https://nvidia.github.io/gpu-operator
- 通过运行以下命令,安装 NVAIE GPU Operator。
如有必要,请将环境变量值替换为与环境匹配的值。
export PRIVATE_REGISTRY="private/registry/path" export OS_TAG=ubuntu20.04 export VERSION=460.73.01 export VGPU_DRIVER_VERSION=460.73.01-grid export NGC_API_KEY=ZmJjMHZya...LWExNTRi export REGISTRY_SECRET_NAME=registry-secret helm install nvidia/gpu-operator \ --set driver.repository=$PRIVATE_REGISTRY \ --set driver.version=$VERSION \ --set driver.imagePullSecrets={$REGISTRY_SECRET_NAME} \ --set operator.defaultRuntime=containerd \ --set driver.licensingConfig.configMapName=licensing-config
运维人员步骤 11:部署 AI/ML 工作负载
NVIDIA GPU Cloud 目录提供了几个现成的容器映像,可用于在启用了 vGPU 的 Tanzu Kubernetes 集群上运行 AI/ML 工作负载。有关可用映像的详细信息,请参见 NGC 文档。