GPU 컨테이너 워크로드 배포

이 페이지에서는 Google Distributed Cloud (GDC) Sandbox AI Optimized SKU에서 GPU 컨테이너 워크로드를 배포하는 방법을 설명합니다.

GPU 컨테이너 워크로드 배포

GDC Sandbox AI Optimized SKU에는 org-infra 클러스터 내에 NVIDIA H100 80GB HBM3 GPU가 4개 포함되어 있습니다. 이러한 GPU는 리소스 이름 nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3을 사용하여 액세스할 수 있습니다. 이 섹션에서는 이러한 GPU를 사용하도록 컨테이너 구성을 업데이트하는 방법을 설명합니다.

GDC Sandbox AI Optimized SKU의 GPU는 사전 구성된 프로젝트 "sandbox-gpu-project"와 연결되어 있습니다. GPU를 사용하려면 org-1-infra 클러스터 내에서 이 프로젝트를 사용하여 컨테이너를 배포해야 합니다.

시작하기 전에

  • 조직 인프라 클러스터에 대해 명령어를 실행하려면 클러스터 작업에 설명된 대로 org-1-infra 클러스터의 kubeconfig가 있어야 합니다.

    • gdcloud 명령줄로 구성 및 인증하고
    • 조직 인프라 클러스터의 kubeconfig 파일을 생성하고 경로를 환경 변수 KUBECONFIG에 할당합니다.
  • 워크로드를 실행하려면 sandbox-gpu-admin 역할이 할당되어 있어야 합니다. 기본적으로 역할은 platform-admin 사용자에게 할당됩니다. platform-admin으로 로그인하고 다음 명령어를 실행하여 다른 사용자에게 역할을 할당할 수 있습니다.

    kubectl --kubeconfig ${KUBECONFIG} create rolebinding ${NAME} --role=sandbox-gpu-admin \
    --user=${USER} --namespace=sandbox-gpu-project
    
  • 컨테이너로의 네트워크 트래픽을 허용하려면 프로젝트 네트워크 정책이 있어야 합니다. 자세한 내용은 네트워크 정책 만들기를 참조하세요.

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

  1. 워크로드의 GPU를 요청하려면 컨테이너 사양에 .containers.resources.requests.containers.resources.limits 필드를 추가합니다. sandbox-gpu-project 내의 모든 컨테이너는 전체 프로젝트에서 최대 4개의 GPU를 요청할 수 있습니다. 다음 예에서는 컨테이너 사양의 일부로 GPU 1개를 요청합니다.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: sandbox-gpu-project
      labels:
        app: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:latest
            resources:
              requests:
                nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1
              limits:
                nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1
    
  1. 컨테이너에는 GPU에 액세스하기 위한 추가 권한도 필요합니다. GPU를 요청하는 각 컨테이너에 대해 컨테이너에 unconfined_t 유형의 securityContext.seLinuxOptions를 부여하는 .containers.securityContext를 추가합니다.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: sandbox-gpu-project
      labels:
        app: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:latest
            resources:
              requests:
                nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1
              limits:
                nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1
            securityContext:
              seLinuxOptions:
                type: unconfined_t
    
  2. 컨테이너 매니페스트 파일을 적용합니다.

    kubectl apply -f ${CONTAINER_MANIFEST_FILE_PATH} \
        -n sandbox-gpu-project \
        --kubeconfig ${KUBECONFIG}