GPU 컨테이너 워크로드 관리

컨테이너에서 그래픽 처리 장치 (GPU) 리소스를 사용 설정하고 관리할 수 있습니다. 예를 들어 GPU 환경에서 인공지능 (AI) 및 머신러닝 (ML) 노트북을 실행하는 것이 좋습니다. GPU 컨테이너 워크로드를 실행하려면 GPU 기기를 지원하는 Kubernetes 클러스터가 있어야 합니다. GPU 지원은 GPU 머신이 프로비저닝된 Kubernetes 클러스터에 기본적으로 사용 설정됩니다.

이 문서는 조직의 애플리케이션 워크로드를 만드는 애플리케이션 운영자 그룹 내 애플리케이션 개발자를 대상으로 합니다. 자세한 내용은 GDC 오프라인 문서의 대상을 참고하세요.

시작하기 전에

컨테이너에 GPU를 배포하려면 다음이 필요합니다.

  • GPU 머신 클래스가 있는 Kubernetes 클러스터 지원되는 GPU 카드 섹션에서 클러스터 머신에 구성할 수 있는 옵션을 확인하세요.

  • 공유 클러스터의 GPU를 확인하는 사용자 클러스터 관리자 역할 (user-cluster-admin)과 공유 클러스터에 GPU 워크로드를 배포하는 프로젝트 네임스페이스의 네임스페이스 관리자 역할 (namespace-admin)

  • Standard 클러스터에서 GPU를 확인하는 Standard 클러스터 관리자 역할 (standard-cluster-admin)과 Standard 클러스터에 GPU 워크로드를 배포하는 Standard 클러스터의 클러스터 개발자 역할 (cluster-developer)

  • Kubernetes 클러스터에 대해 명령어를 실행하려면 다음 리소스가 있어야 합니다.

    • Kubernetes 클러스터 이름을 찾거나 플랫폼 관리자 그룹의 구성원에게 클러스터 이름을 묻습니다.

    • Kubernetes 클러스터의 kubeconfig 파일이 없는 경우 로그인하여 생성합니다.

    • Kubernetes 클러스터의 kubeconfig 경로를 사용하여 이 안내의 KUBERNETES_CLUSTER_KUBECONFIG를 바꿉니다.

  • Kubernetes 클러스터를 호스팅하는 영역 관리 API 서버의 kubeconfig 경로입니다. kubeconfig 파일이 없는 경우 로그인하여 생성합니다.

  • GPU를 호스팅할 영역의 조직 인프라 클러스터에 대한 kubeconfig 경로입니다. kubeconfig 파일이 없는 경우 로그인하여 생성합니다.

GPU 리소스를 사용하도록 컨테이너 구성

컨테이너에서 이러한 GPU를 사용하려면 다음 단계를 완료하세요.

  1. Kubernetes 클러스터에 GPU를 지원하는 노드 풀이 있는지 확인합니다.

    kubectl describe clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \
        -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig MANAGEMENT_API_SERVER
    

    다음을 바꿉니다.

    • KUBERNETES_CLUSTER_NAME: 클러스터의 이름입니다.
    • KUBERNETES_CLUSTER_NAMESPACE: 클러스터의 네임스페이스입니다. 공유 클러스터의 경우 platform 네임스페이스를 사용합니다. 표준 클러스터의 경우 클러스터의 프로젝트 네임스페이스를 사용합니다.
    • MANAGEMENT_API_SERVER: Kubernetes 클러스터가 호스팅되는 영역 API 서버의 kubeconfig 경로입니다. 타겟 영역의 API 서버에 대한 kubeconfig 파일을 아직 생성하지 않은 경우 로그인을 참고하세요.

    관련 출력은 다음 스니펫과 유사합니다.

    # Several lines of code are omitted here.
    spec:
      nodePools:
      - machineTypeName: a2-ultragpu-1g-gdc
        nodeCount: 2
    # Several lines of code are omitted here.
    

    지원되는 GPU 머신 유형 및 다중 인스턴스 GPU (MIG) 프로필의 전체 목록은 클러스터 노드 머신 유형을 참고하세요.

  2. 컨테이너 사양에 .containers.resources.requests.containers.resources.limits 필드를 추가합니다. 각 리소스 이름은 머신 클래스에 따라 다릅니다. GPU 리소스 할당을 확인하여 GPU 리소스 이름을 찾습니다.

    예를 들어 다음 컨테이너 사양은 a2-ultragpu-1g-gdc 노드에서 GPU의 파티션 3개를 요청합니다.

     ...
     containers:
     - name: my-container
       image: "my-image"
       resources:
         requests:
           nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3
         limits:
           nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3
     ...
    
  3. 컨테이너가 GPU에 액세스하려면 추가 권한도 필요합니다. GPU를 요청하는 각 컨테이너에 컨테이너 사양에 다음 권한을 추가합니다.

    ...
    securityContext:
     seLinuxOptions:
       type: unconfined_t
    ...
    
  4. 컨테이너 매니페스트 파일을 적용합니다.

    kubectl apply -f CONTAINER_MANIFEST_FILE \
        -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    다음을 바꿉니다.

    • CONTAINER_MANIFEST_FILE: 컨테이너 워크로드의 YAML 매니페스트 파일입니다.
    • KUBERNETES_CLUSTER_NAMESPACE: 클러스터의 네임스페이스입니다. 공유 클러스터의 경우 platform 네임스페이스를 사용합니다. 표준 클러스터의 경우 클러스터의 프로젝트 네임스페이스를 사용합니다.
    • KUBERNETES_CLUSTER_KUBECONFIG: 클러스터의 kubeconfig 경로입니다.

GPU 리소스 할당 확인

  • GPU 리소스 할당을 확인하려면 다음 명령어를 사용하세요.

    kubectl describe nodes NODE_NAME --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    다음을 바꿉니다.

    • NODE_NAME: 검사할 GPU를 관리하는 노드입니다.
    • KUBERNETES_CLUSTER_KUBECONFIG: 클러스터의 kubeconfig 경로입니다.

    관련 출력은 다음 스니펫과 유사합니다.

    # Several lines of code are omitted here.
    Capacity:
      nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7
    Allocatable:
      nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7
    # Several lines of code are omitted here.
    

GPU의 리소스 이름을 기록해 둡니다. GPU 리소스를 사용하도록 컨테이너를 구성할 때 이를 지정해야 합니다.