개발자가 TKGS 클러스터에 AI/ML 워크로드를 배포할 수 있도록 하려면 클러스터 운영자가 NVIDIA vGPU 작업을 지원하도록 Kubernetes 환경을 구성해야 합니다.

TKGS 클러스터에 AI/ML 워크로드를 배포하기 위한 클러스터 운영자 워크플로

TKGS 클러스터에 AI/ML 워크로드를 배포하는 개략적인 단계는 다음과 같습니다.
단계 작업 연결
0

시스템 요구 사항을 검토합니다.

운영자 0단계: 시스템 요구 사항 검토의 내용을 참조하십시오.
1 kubectl 및 kubectl용 vSphere 플러그인을 로컬 워크스테이션에 다운로드합니다. 운영자 1단계: 워크스테이션에 vSphere에 대한 Kubernetes CLI 도구 설치의 내용을 참조하십시오.
2 kubectl을 사용하여 감독자 클러스터에 로그인합니다. 그러면 .kube/config가 새 감독자 클러스터의 컨텍스트로 채워집니다. 운영자 2단계: 감독자 클러스터에 로그인의 내용을 참조하십시오.
3 kubectl을 사용하여 컨텍스트를 vSphere 네임스페이스로 전환합니다. 운영자 3단계: vSphere 네임스페이스로 컨텍스트 전환의 내용을 참조하십시오.
4 kubectl을 사용하여 VM 클래스를 나열하고 NVIDIA vGPU 지원 클래스가 있는지 확인합니다. 운영자 4단계: vGPU 워크로드에 대한 사용자 지정 VM 클래스 가져오기의 내용을 참조하십시오.
5 kubectl을 사용하여 사용 가능한 Tanzu Kubernetes 릴리스를 나열하고 Ubuntu 이미지가 있는지 확인합니다. 운영자 5단계: GPU 노드용 Ubuntu Tanzu Kubernetes 릴리스 가져오기의 내용을 참조하십시오.
6 GPU 지원 TKGS 클러스터를 프로비저닝하기 위한 YAML 규격을 만듭니다. TKR 버전 및 VM 클래스를 지정합니다. 운영자 6단계: vGPU 지원 TKGS 클러스터 프로비저닝을 위한 YAML 만들기의 내용을 참조하십시오.
7 TKGS 클러스터를 프로비저닝합니다. 운영자 7단계: TKGS 클러스터 프로비저닝의 내용을 참조하십시오.
8 클러스터에 로그인하고 프로비저닝을 확인합니다. 운영자 8단계: TKGS 클러스터에 로그인하고 프로비저닝 확인의 내용을 참조하십시오.
9 네임스페이스, 역할 바인딩, 이미지 암호, 라이센스 configmap을 비롯한 몇 가지 사전 요구 사항 개체를 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단계: 시스템 요구 사항 검토

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

운영자 1단계: 워크스테이션에 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 워크로드에 대한 사용자 지정 VM 클래스 가져오기

vSphere 관리자가 생성한 vGPU 프로파일과 함께 사용자 지정 VM 클래스를 대상 vSphere 네임스페이스에서 사용할 수 있는지 확인합니다.
kubectl get virtualmachineclassbindings
참고: VM 클래스는 대상 vSphere 네임스페이스에 바인딩되어야 합니다. vGPU 워크로드에 대한 사용자 지정 VM 클래스가 표시되지 않으면 vSphere 관리자에게 확인하십시오.

운영자 5단계: GPU 노드용 Ubuntu Tanzu Kubernetes 릴리스 가져오기

vSphere 관리자가 컨텐츠 라이브러리에서 동기화한 필수 Ubuntu Tanzu Kubernetes 릴리스vSphere 네임스페이스에서 사용할 수 있는지 확인합니다.
kubectl get tanzukubernetesreleases
또는 바로 가기를 사용합니다.
kubectl get tkr

운영자 6단계: vGPU 지원 TKGS 클러스터 프로비저닝을 위한 YAML 만들기

Tanzu Kubernetes 클러스터 프로비저닝을 위한 YAML 파일을 생성합니다.

아래 예제 중 하나로 시작합니다. 이전 명령의 출력에서 수집한 정보를 사용하여 클러스터 규격을 사용자 지정합니다. 구성 매개 변수의 전체 목록을 참조하십시오. Tanzu Kubernetes 클러스터 프로비저닝을 위한 TKGS v1alpha2 API.

예제 1은 두 개의 작업자 노드 풀을 지정합니다.
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는 용량이 50GiB인 컨테이너화된 런타임에 대해 작업자 노드에 별도 볼륨을 지정합니다. 이 설정은 구성이 가능합니다. 컨테이너 기반 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(Delegated Licensing Server)를 사용하는 경우에는 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 라이센스 서버에 대한 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(Delegated Licensing Server)를 사용하는 경우에는 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

운영자 11단계: AI/ML 워크로드 배포

NVIDIA GPU Cloud 카탈로그는 vGPU 지원 Tanzu Kubernetes 클러스터에서 AI/ML 워크로드를 실행하는 데 사용할 수 있는 몇 가지 기본 제공 컨테이너 이미지를 제공합니다. 사용 가능한 이미지에 대한 자세한 내용은 NGC 설명서를 참조하십시오.