開発者が TKGS クラスタに AI/ML ワークロードをデプロイできるようにするには、クラスタ オペレータとして、NVIDIA vGPU の動作をサポートするように Kubernetes 環境を構成します。
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:システム要件を確認する
要件 | 説明 |
---|---|
vSphere 管理者が NVIDIA vGPU の環境を設定している |
TKGS クラスタ (vGPU) への AI/ML ワークロードのデプロイに関する vSphere 管理者ワークフローを参照してください |
TKR Ubuntu OVA | Tanzu Kubernetes リリース Ubuntu
|
TKG クラスタ プロビジョナ | Tanzu Kubernetes Grid サービス API のバージョン: |
NVIDIA GPU Operator |
GPU Operator v1.8.0 |
NVIDIA GPU ドライバ コンテナ |
|
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 login --server=IP-ADDRESS --vsphere-username USERNAME
Operator の手順 3:コンテキストを vSphere 名前空間に切り替える
kubectl config get-contexts
kubectl config use-context TKGS-GPU-CLUSTER-NAMESPACE
Operator の手順 4:vGPU ワークロード用のカスタム仮想マシン クラスを取得する
kubectl get virtualmachineclassbindings
Operator の手順 5:GPU ノード用の Ubuntu Tanzu Kubernetes リリースを取得する
kubectl get tanzukubernetesreleases
kubectl get tkr
Operator の手順 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
Operator の手順 7:TKGS クラスタをプロビジョニングする
kubectl apply -f CLUSTER-NAME.yaml例:
kubectl apply -f tkgs-gpu-cluster-1.yaml
kubectl get tanzukubernetesclusters -n NAMESPACE
Operator の手順 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
Operator の手順 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
- 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
- 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 をクラスタにインストールする
- 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
Operator の手順 11:AI/ML ワークロードをデプロイする
NVIDIA GPU Cloud カタログには、vGPU 対応 Tanzu Kubernetes クラスタで AI/ML ワークロードを実行する場合に使用できる既製のコンテナ イメージがいくつかあります。使用可能なイメージの詳細については、NGC のドキュメントを参照してください。