GPU 컨테이너 워크로드 관리

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

시작하기 전에

이 문서의 작업을 완료하려면 필요한 권한을 요청하고 환경을 준비해야 합니다.

IAM 역할 요청

Kubernetes 클러스터에서 리소스를 만들거나, 삭제하거나, 수정하거나, 보려면 조직 IAM 관리자에게 프로젝트 네임스페이스의 네임스페이스 관리자 (namespace-admin) 역할을 부여해 달라고 요청하세요. 이 역할을 사용하면 프로젝트 네임스페이스에 GPU 워크로드를 배포할 수 있습니다.

개발 환경 준비

  • 로그인하고 생성 베어메탈 Kubernetes 클러스터에 대한 kubeconfig 파일입니다.

  • Kubernetes 클러스터의 kubeconfig 경로를 사용하여 이 안내의 CLUSTER_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