開発者が TKGS クラスタに AI/ML ワークロードをデプロイできるようにするには、クラスタ オペレータとして、NVIDIA vGPU の動作をサポートするように Kubernetes 環境を構成します。

TKGS クラスタへの AI/ML ワークロードのデプロイに関するクラスタ オペレータのワークフロー

TKGS クラスタに AI/ML ワークロードをデプロイする大まかな手順は、次のとおりです。
手順 操作 リンク
0

システム要件を確認します。

Operator の手順 0:システム要件を確認するを参照してください。
1 kubectl と kubectl 向け vSphere プラグインをローカル ワークステーションにダウンロードします。 Operator の手順 1:ワークステーションに vSphere 向け Kubernetes CLI Tools をインストールするを参照してください。
2 kubectl を使用してスーパーバイザー クラスタにログインします。これにより、.kube/config に新しいスーパーバイザー クラスタのコンテキストが入力されます。 Operator の手順 2:スーパーバイザー クラスタにログインするを参照してください。
3 kubectl を使用して、コンテキストを vSphere 名前空間に切り替えます。 Operator の手順 3:コンテキストを vSphere 名前空間に切り替えるを参照してください。
4 kubectl を使用して仮想マシン クラスを一覧表示し、NVIDIA vGPU 対応クラスが含まれていることを確認します。 Operator の手順 4:vGPU ワークロード用のカスタム仮想マシン クラスを取得するを参照してください。
5 kubectl を使用して、使用可能な Tanzu Kubernetes リリースを一覧表示し、Ubuntu イメージが含まれていることを確認します。 Operator の手順 5:GPU ノード用の Ubuntu Tanzu Kubernetes リリースを取得するを参照してください。
6 GPU 対応 TKGS クラスタをプロビジョニングするための YAML 仕様を作成し、TKR のバージョンと仮想マシン クラスを指定します。 Operator の手順 6:vGPU 対応 TKGS クラスタをプロビジョニングするための YAML を作成するを参照してください。
7 TKGS クラスタをプロビジョニングします。 Operator の手順 7:TKGS クラスタをプロビジョニングするを参照してください。
8 クラスタにログインして、プロビジョニングを確認します。 Operator の手順 8:TKGS クラスタにログインしてプロビジョニングを確認するを参照してください。
9 名前空間、ロール バインド、イメージ シークレット、ライセンス構成マップなど、前提条件となるオブジェクトを TKGS クラスタにいくつか作成して、NVAIE GPU Operator をインストールする準備を整えます。 Operator の手順 9:NVAIE GPU Operator のインストール準備を行うを参照してください。
10 NVAIE GPU Operator をクラスタにインストールします。 Operator の手順 10:NVIDIA GPU Operator をクラスタにインストールするを参照してください。
11 AI/ML ワークロードを vGPU 対応 TKGS クラスタにデプロイします。 Operator の手順 11:AI/ML ワークロードをデプロイするを参照してください。

Operator の手順 0:システム要件を確認する

次のシステム要件を参照して、TKGS クラスタに AI/ML ワークロードをデプロイできるように環境を設定します。
要件 説明

vSphere 管理者が NVIDIA vGPU の環境を設定している

TKGS クラスタ (vGPU) への AI/ML ワークロードのデプロイに関する vSphere 管理者ワークフローを参照してください

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

Operator の手順 1:ワークステーションに vSphere 向け Kubernetes CLI Tools をインストールする

vSphere 向け Kubernetes CLI Tools をダウンロードしてインストールします。

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 Tools のダウンロードとインストールを参照してください。

Operator の手順 2:スーパーバイザー クラスタにログインする

kubectl 向けの vSphere プラグイン を使用して、 スーパーバイザー クラスタ での認証を行います。
kubectl vsphere login --server=IP-ADDRESS --vsphere-username USERNAME

Operator の手順 3:コンテキストを vSphere 名前空間に切り替える

kubectl を使用して、vSphere 管理者が TKGS GPU クラスタ用に作成した vSphere 名前空間 にコンテキストを切り替えます。
kubectl config get-contexts
kubectl config use-context TKGS-GPU-CLUSTER-NAMESPACE

Operator の手順 4:vGPU ワークロード用のカスタム仮想マシン クラスを取得する

vSphere 管理者が作成した vGPU プロファイルを使用するカスタム仮想マシン クラスがターゲットの vSphere 名前空間 で使用可能なことを確認します。
kubectl get virtualmachineclassbindings
注: 仮想マシン クラスをターゲット vSphere 名前空間 にバインドする必要があります。vGPU ワークロードのカスタム仮想マシン クラスが表示されない場合は、vSphere 管理者に確認してください。

Operator の手順 5:GPU ノード用の Ubuntu Tanzu Kubernetes リリースを取得する

vSphere 管理者がコンテンツ ライブラリから同期した必須の Ubuntu Tanzu Kubernetes リリースvSphere 名前空間 で使用可能なことを確認します。
kubectl get tanzukubernetesreleases
または、次のショートカットを使用します。
kubectl get tkr

Operator の手順 6:vGPU 対応 TKGS クラスタをプロビジョニングするための YAML を作成する

Tanzu Kubernetes クラスタをプロビジョニングするための YAML ファイルを作成します。

次のいずれかの例から開始します。前述のコマンドの出力から収集した情報を使用して、クラスタの仕様をカスタマイズします。Tanzu Kubernetes クラスタをプロビジョニングするための TKGS v1alpha2 APIで構成パラメータの完全なリストを参照してください。

例 1 では、2 つのワーカー ノード プールを指定します。
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 では、ワーカー ノード上にある容量が 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

Operator の手順 7:TKGS クラスタをプロビジョニングする

次の kubectl コマンドを実行して、クラスタをプロビジョニングします。
kubectl apply -f CLUSTER-NAME.yaml
例:
kubectl apply -f tkgs-gpu-cluster-1.yaml
kubectl を使用して、クラスタ ノードのデプロイを監視します。
kubectl get tanzukubernetesclusters -n NAMESPACE

Operator の手順 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

Operator の手順 9:NVAIE GPU Operator のインストール準備を行う

GPU Operator と NVIDIA AI Enterprise をインストールする前に、プロビジョニングした TKGS クラスタに次のタスクを実行します。その他のガイダンスについては、NVAIE ドキュメントの「 Prerequisite Tasks」を参照してください。
注: NVIDIA Delegated Licensing Server (DLS) を使用している場合の手順については、 TKGS クラスタ (DLS) への AI/ML ワークロードのデプロイに関するクラスタ オペレータについての補足のトピックを参照してください。
  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. Docker が NVIDIA GPU Cloud カタログからコンテナ イメージをプルする場合に使用できる NGC 認証情報を使用して、イメージ シークレットを作成します。
    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 ライセンス サーバの構成マップを作成します。
    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>
    

Operator の手順 10:NVIDIA GPU Operator をクラスタにインストールする

NVAIE GPU Operator バージョン 1.8.0 を TKGS クラスタにインストールします。その他のガイダンスについては、GPU Operator の ドキュメントを参照してください。
注: NVIDIA Delegated Licensing Server (DLS) を使用している場合の手順については、 TKGS クラスタ (DLS) への AI/ML ワークロードのデプロイに関するクラスタ オペレータについての補足のトピックを参照してください。
  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

Operator の手順 11:AI/ML ワークロードをデプロイする

NVIDIA GPU Cloud カタログには、vGPU 対応 Tanzu Kubernetes クラスタで AI/ML ワークロードを実行する場合に使用できる既製のコンテナ イメージがいくつかあります。使用可能なイメージの詳細については、NGC のドキュメントを参照してください。