GPU 컨테이너 워크로드 관리

컨테이너에서 그래픽 처리 장치 (GPU) 리소스를 사용 설정하고 관리할 수 있습니다. 예를 들어 GPU 환경에서 인공지능 (AI) 및 머신러닝 (ML) 노트북을 실행하는 것이 좋습니다. GPU 지원은 Google Distributed Cloud (GDC) 에어 갭 적용 어플라이언스에서 기본적으로 사용 설정됩니다.

시작하기 전에

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

  • 프로젝트 네임스페이스에 GPU 워크로드를 배포할 네임스페이스 관리자 역할 (namespace-admin)

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

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

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

  1. Kubernetes 클러스터 노드가 GPU 리소스 할당을 지원하는지 확인합니다.

    kubectl describe nodes NODE_NAME
    

    NODE_NAME을 검사하려는 GPU를 관리하는 노드로 바꿉니다.

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

    Capacity:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
    Allocatable:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
    
  2. 컨테이너 사양에 .containers.resources.requests.containers.resources.limits 필드를 추가합니다. Kubernetes 클러스터가 GPU 머신으로 사전 구성되어 있으므로 모든 워크로드의 구성이 동일합니다.

     ...
     containers:
     - name: CONTAINER_NAME
       image: CONTAINER_IMAGE
       resources:
         requests:
           nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
         limits:
           nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
     ...
    

    다음을 바꿉니다.

    • CONTAINER_NAME: 컨테이너의 이름입니다.
    • CONTAINER_IMAGE: GPU 머신에 액세스할 컨테이너 이미지입니다. REGISTRY_PATH/hello-app:1.0와 같은 이미지의 컨테이너 레지스트리 경로와 버전을 포함해야 합니다.
  3. 컨테이너가 GPU에 액세스하려면 추가 권한도 필요합니다. GPU를 요청하는 각 컨테이너에 컨테이너 사양에 다음 권한을 추가합니다.

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

    kubectl apply -f CONTAINER_MANIFEST_FILE \
        -n NAMESPACE \
        --kubeconfig CLUSTER_KUBECONFIG
    

    다음을 바꿉니다.

    • CONTAINER_MANIFEST_FILE: 컨테이너 워크로드 커스텀 리소스의 YAML 파일입니다.
    • NAMESPACE: 컨테이너 워크로드를 배포할 프로젝트 네임스페이스입니다.
    • CLUSTER_KUBECONFIG: 컨테이너 워크로드를 배포할 베어 메탈 Kubernetes 클러스터의 kubeconfig 파일입니다.
  5. 포드가 실행 중이고 GPU를 사용하고 있는지 확인합니다.

    kubectl get pods -A | grep CONTAINER_NAME \
        -n NAMESPACE \
        --kubeconfig CLUSTER_KUBECONFIG
    

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

    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
    Ready:          True
    Restart Count:  0
    Limits:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE:  1
    Requests:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE:  1