若要使開發人員能夠在 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 叢集中建立一些必要物件 (包括命名空間、角色繫結、映像密碼和授權 configmap),為安裝 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 | Tanzu Kubernetes 版本 Ubuntu
|
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 叢集已啟用網繭安全性原則。
建立 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 說明文件。