若要使開發人員能夠在 TKGS 叢集上部署 AI/ML 工作負載,作為叢集營運人員,您可以將 Kubernetes 環境設定為支援 NVIDIA vGPU 操作。

在 TKGS 叢集上部署 AI/ML 工作負載的叢集營運人員工作流程

下面概述了在 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:檢閱系統需求

根據以下系統需求設定環境,以便能夠在 TKGS 叢集上部署 AI/ML 工作負載。
需求 說明

vSphere 管理員已設定適合 NVIDIA vGPU 的環境

請參閱 在 TKGS 叢集上部署 AI/ML 工作負載的 vSphere 管理員工作流程 (vGPU)

TKR Ubuntu OVA

Tanzu Kubernetes 版本 Ubuntu

ob-18691651-tkgs-ova-ubuntu-2004-v1.20.8---vmware.1-tkg.2

TKG 叢集佈建程式

Tanzu Kubernetes Grid 服務

API 版本: run.tanzu.vmware.com/v1alpha2

NVIDIA GPU Operator

GPU Operator v1.8.0

NVIDIA GPU 驅動程式容器

nvcr.io/nvstating/cnt-ea/driver:470.51-ubuntu20.04

營運人員步驟 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 外掛程式主管叢集 進行驗證。
kubectl vsphere login --server=IP-ADDRESS --vsphere-username USERNAME

營運人員步驟 3:將內容切換到 vSphere 命名空間

使用 kubectl,將內容切換到 vSphere 管理員為 TKGS GPU 叢集建立的 vSphere 命名空間
kubectl config get-contexts
kubectl config use-context TKGS-GPU-CLUSTER-NAMESPACE

營運人員步驟 4:獲取用於 vGPU 工作負載的自訂虛擬機器類別

確認 vSphere 管理員建立的包含 vGPU 設定檔的自訂虛擬機器類別在目標 vSphere 命名空間中可用。
kubectl get virtualmachineclassbindings
備註: 虛擬機器類別必須繫結到目標 vSphere 命名空間。如果沒有看到用於 vGPU 工作負載的自訂虛擬機器類別,請聯繫 vSphere 管理員。

營運人員步驟 5:獲取適用於 GPU 節點的 Ubuntu Tanzu Kubernetes 版本

確認 vSphere 命名空間中提供了 vSphere 管理員從內容程式庫同步的所需 Ubuntu Tanzu Kubernetes 版本
kubectl get tanzukubernetesreleases
或使用捷徑:
kubectl get tkr

營運人員步驟 6:編寫用於佈建啟用了 vGPU 的 TKGS 叢集的 YAML

建構用於佈建 Tanzu Kubernetes 叢集的 YAML 檔案。

從以下範例之一開始。使用從前述命令的輸出中收集的資訊自訂叢集規格。請參閱組態參數的完整清單:用於佈建 Tanzu Kubernetes 叢集的 TKGS v1alpha2 API

範例 1 指定了兩個 worker 節點集區。
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
範例 2 在 worker 節點上為容器執行階段指定了一個容量為 50 GiB 的單獨磁碟區。此設定是可配置的。建議為基於容器的 AI/ML 工作負載提供大小合適的單獨磁碟區。
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
範例 3 包括叢集附加中繼資料,如標籤。
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 命令來佈建叢集。
kubectl apply -f CLUSTER-NAME.yaml
例如:
kubectl apply -f tkgs-gpu-cluster-1.yaml
使用 kubectl 監控叢集節點部署。
kubectl get tanzukubernetesclusters -n NAMESPACE

營運人員步驟 8:登入 TKGS 叢集並驗證佈建

使用 kubectl 適用的 vSphere 外掛程式登入 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

在使用 NVIDIA AI Enterprise 安裝 GPU Operator 之前,請針對您佈建的 TKGS 叢集完成以下工作。如需其他指導,請參閱 NVAIE 說明文件中的 必要工作
備註: 如果要使用 NVIDIA 委派授權伺服器 (DLS),請參閱以下主題中的說明: 在 TKGS 叢集上部署 AI/ML 工作負載的叢集營運人員附錄 (DLS)
  1. 建立 Kubernetes 命名空間 gpu-operator-resources。最佳做法是始終將所有內容部署到此命名空間中。
    kubectl create ns gpu-operator-resources
  2. 建立角色繫結。

    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
  3. 使用 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
  4. 為 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

在 TKGS 叢集中安裝 NVAIE GPU Operator 版本 1.8.0。如需其他指導,請參閱 GPU Operator 說明文件
備註: 如果要使用 NVIDIA 委派授權伺服器 (DLS),請參閱以下主題中的說明: 在 TKGS 叢集上部署 AI/ML 工作負載的叢集營運人員附錄 (DLS)
  1. 透過參考 Helm 說明文件安裝 Helm。
  2. 新增 gpu-operator Helm 存放庫。
    helm repo add nvidia https://nvidia.github.io/gpu-operator
  3. 透過執行以下命令,安裝 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 說明文件