다음을 통해 공유


AKS(Azure Kubernetes Service)를 위한 GPU 모범 사례

AKS 클러스터에서 GPU 워크로드를 실행하려면 컴퓨팅 리소스에 대한 접근성, 보안, 최적으로 활용을 보장하기 위해 적절한 설정과 지속적인 유효성 검사가 필요합니다. 이 문서에서는 공급업체별 진단 명령을 사용하여 GPU 지원 노드를 관리하고, 구성의 유효성을 검사하고, 워크로드 중단을 줄이는 모범 사례를 설명합니다.

AI 모델 학습, 실시간 유추, 시뮬레이션, 동영상 처리와 같은 GPU 워크로드는 다음 구성에 따라 달라지는 경우가 많습니다.

  • 올바른 GPU 드라이버 및 런타임 호환성.
  • GPU 리소스의 정확한 스케줄링.
  • 컨테이너 내부의 GPU 하드웨어 디바이스에 액세스합니다.

잘못된 구성으로 인해 비용이 많이 들거나, 예기치 못한 작업이 실패하거나, GPU 미달 사용이 낮아질 수 있습니다.

GPU 워크로드 배치 적용

기본적으로 AKS 스케줄러는 충분한 CPU와 메모리가 있는 모든 사용 가능한 노드에 Pod를 배치합니다. 지침이 없으면 두 가지 주요 문제가 발생할 수 있습니다.

  1. GPU 워크로드는 GPU가 없는 노드에서 예약될 수 있으며 시작에 실패할 수 있습니다.
  2. 일반적인 워크로드가 GPU 노드를 차지하여 비용이 많이 드는 리소스를 낭비할 수 있습니다.

올바른 배치를 적용하려면:

  • [gpu-vendor].com/gpu: NoSchedule과 같은 키를 사용하여 GPU 노드에 테인트를 만듭니다(예: nvidia.com/gpu: NoSchedule). 이렇게 하면 GPU가 아닌 워크로드가 예약되는 것이 차단됩니다.
  • 테인트가 만들어진 GPU 노드에서 예약할 수 있도록 GPU 워크로드 Pod 사양에 일치하는 톨러레이션을 추가합니다.
  • 스케줄러가 GPU 용량을 예약하도록 하려면 Pod에서 GPU 리소스 요청과 제한을 정의합니다.예:
resources:
  limits:
    [gpu-vendor].com/gpu: 1
  • 유효성 검사 정책이나 허용 컨트롤러를 사용하여 GPU 워크로드에 필요한 톨러레이션과 리소스 제한이 포함되도록 합니다.

이 방식은 GPU 지원 워크로드만 GPU 노드에 할당되고 필요한 특수 컴퓨팅 리소스에 액세스할 수 있도록 보장합니다.

프로덕션 GPU 워크로드를 배포하기 전에 항상 GPU 노드 풀이 다음과 같은지 유효성을 검사합니다.

  • 호환되는 GPU 드라이버가 장착되어 있습니다.
  • 정상 Kubernetes 디바이스 플러그 인 DaemonSet을 호스팅합니다.
  • [gpu-vendor].com/gpu를 예약 가능한 리소스로 노출합니다.

GPU 공급업체와 연결된 SMI(시스템 관리 인터페이스)를 통해 GPU 노드 풀에서 실행 중인 현재 드라이버 버전을 확인할 수 있습니다.

다음 명령은 GPU 디바이스 플러그 인 배포 Pod 내부에서 nvidia-smi를 실행하여 NVIDIA GPU 지원 노드 풀에서 드라이버 설치 및 런타임 준비 상태를 확인합니다.

kubectl exec -it $"{GPU_DEVICE_PLUGIN_POD}" -n {GPU_NAMESPACE} -- nvidia-smi

다음 예와 유사하게 출력됩니다.

+-----------------------------------------------------------------------------+
|NVIDIA-SMI 570.xx.xx    Driver Version: 570.xx.xx    CUDA Version: 12.x|
...
...

각 GPU 노드 풀에 대해 위의 단계를 반복하여 노드에 설치된 드라이버 버전을 확인합니다.

AMD GPU 지원 노드 풀에서 또는 AMD GPU 구성 요소를 배포하고 ROCm 디바이스 플러그 인 Pod에서 amd-smi 명령을 실행하여 설치된 드라이버 버전을 확인합니다.

GPU 지원 노드를 최신 노드 OS 이미지로 업데이트 유지

AKS에서 GPU 워크로드의 성능, 보안 및 호환성을 보장하려면 최신 권장 노드 OS 이미지로 GPU 노드 풀을 최신 상태로 유지하는 것이 필수적입니다. 이러한 업데이트는 다음과 같은 이유로 중요합니다.

  • 더 이상 사용되지 않는 버전 또는 EOL(수명 종료) 버전을 바꿔 최신 프로덕션 등급 GPU 드라이버를 포함합니다.
  • 현재 Kubernetes 버전과의 호환성을 위해 완전히 테스트되었습니다.
  • GPU 공급업체가 발견한 알려진 취약성을 해결합니다.
  • 개선된 안정성과 효율성을 위해 최신 OS 및 컨테이너 런타임 개선 사항을 통합했습니다.

자동 업그레이드 채널을 설정하거나 수동 업그레이드를 통해 GPU 노드 풀을 AKS에서 릴리스한 최신 권장 노드 OS 이미지로 업그레이드합니다. AKS 릴리스 추적기를 사용하여 최신 노드 이미지 릴리스를 모니터링하고 추적할 수 있습니다.

공유 클러스터를 사용할 때 GPU 워크로드 분리

GPU 노드 풀이 있는 단일 AKS 클러스터에서 모델 학습, 실시간 유추, 일괄 처리 등 여러 형식의 GPU 워크로드를 실행하는 경우 이러한 워크로드를 다음과 같이 분리해야 합니다.

  • 서로 다른 워크로드 유형 간의 우발적인 방해나 리소스 경합을 방지합니다.
  • 보안을 강화하고 준수 경계를 유지합니다.
  • 워크로드 범주별로 GPU 리소스 사용량의 관리와 모니터링을 간소화합니다.

네임스페이스와 네트워크 정책을 사용하여 단일 AKS 클러스터 내에서 GPU 워크로드를 격리할 수 있습니다. 이를 통해 워크로드별 할당량, 한도 및 로깅 구성을 통해 보다 명확한 거버넌스가 가능해집니다.

예제 시나리오

서로 통신할 필요가 없는 두 가지 서로 다른 GPU 워크로드 유형을 호스팅하는 AKS 클러스터를 고려합니다.

  • 학습 워크로드: 리소스를 많이 사용하는 AI 모델 학습 작업입니다.
  • 유추 워크로드: 대기 시간에 중요한 실시간 유추 서비스입니다.

다음 단계에 따라 두 가지 워크로드를 분리할 수 있습니다.

  1. kubectl create namespace 명령을 사용하여 워크로드 유형별로 전용 네임스페이스를 만듭니다.

    kubectl create namespace gpu-training
    kubectl create namespace gpu-inference
    
  2. 다음 예와 같이 GPU 워크로드 Pod를 형식별로 레이블을 지정합니다.

    metadata:
      namespace: gpu-training
      labels:
        workload: training
    
  3. 네트워크 정책을 적용하여 워크로드 유형 간 트래픽을 격리합니다. 다음 매니페스트는 gpu-training 네임스페이스에 대한 모든 수신 및 송신을 차단합니다(명시적으로 허용된 경우 제외).

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: deny-cross-namespace
      namespace: gpu-training
    spec:
      podSelector: {}
      policyTypes:
      - Ingress
      - Egress
      ingress: []
      egress: []
    

이 정책은 다음과 같습니다.

  • gpu-training 네임스페이스의 모든 Pod에 적용됩니다.
  • 기본적으로 모든 수신 및 발신 트래픽을 거부하여 강력한 격리를 지원합니다.

이 모델은 공유 GPU 환경에서 명확성, 제어 및 안전성을 향상시키며, 특히 워크로드 유형에 서로 다른 런타임 프로필, 위험 수준 또는 운영 요구 사항이 있는 경우에 유용합니다.

MIG(다중 인스턴스 GPU)를 사용하여 GPU 노드의 리소스 사용 최적화

GPU 워크로드에 따라 메모리 요구 사항이 다르고, 규모가 작은 배포(예: NVIDIA A100 40GB)에는 전체 GPU가 필요하지 않을 수 있습니다. 그러나 기본적으로 단일 워크로드가 충분히 활용되지 않더라도 GPU 리소스를 독점하게 됩니다.

AKS는 MIG(다중 인스턴스 GPU)를 사용하여 GPU 노드를 더 작은 조각으로 분할하여 리소스 최적화를 지원하므로 팀이 더 작은 작업을 더 효율적으로 예약할 수 있습니다. 지원되는 GPU 크기와 AKS에서 다중 인스턴스 GPU를 시작하는 방법에 대해 자세히 알아봅니다.

임시 NVMe 데이터 디스크를 고성능 캐시로 사용

AKS의 GPU VM에서 실행되는 AI 워크로드의 경우 학습 및 유추 성능을 극대화하기 위해 임시 스토리지에 빠르고 안정적으로 액세스하는 것이 중요합니다. 임시 NVMe 데이터 디스크는 VM 호스트에 직접 연결된 처리량이 높고 대기 시간이 짧은 스토리지를 제공하므로 데이터 세트 캐싱, 중간 검사점 및 모델 가중치 저장 또는 데이터 전처리 및 분석을 위한 스크래치 공간 제공과 같은 시나리오에 이상적입니다.

AI 워크로드용 GPU 지원 노드 풀을 배포할 때 고성능 캐시 또는 스크래치 공간으로 사용되도록 임시 NVMe 데이터 디스크를 구성합니다. 이 방법은 I/O 병목 상태를 제거하고, 데이터 집약적 작업을 가속화하며, 데이터를 기다리는 동안 GPU 리소스가 유휴 상태가 되지 않도록 합니다.

임시 NVMe 데이터 디스크는 광범위한 Azure GPU VM 제품군에서 지원됩니다. GPU VM 크기에 따라 최대 28TiB의 결합된 용량을 가진 최대 8개의 임시 NVMe 데이터 디스크가 있습니다. VM 크기에 대한 자세한 구성은 선택한 GPU 제품군에 대한 ND H100 v5 시리즈 설명서 또는 VM 크기 설명서를 참조하세요.

프로비전 및 관리를 간소화하려면 Kubernetes 워크로드에 대한 임시 NVMe 디스크를 자동으로 검색하고 오케스트레이션할 수 있는 Azure Container Storage를 사용합니다.

권장되는 시나리오는 다음과 같습니다.

  • AI 학습 및 유추를 위한 대용량 데이터 세트 및 모델 검사점 캐싱
  • AI 추론을 위한 모델 가중치 캐싱. 예를 들어 KAITO 호스팅 모델은 로컬 NVMe에서 OCI 아티팩트로 사용됩니다.
  • 일괄 작업과 데이터 파이프라인을 위한 빠른 스크래치 공간을 제공합니다.

중요합니다

임시 NVMe 디스크의 데이터는 일시적이므로 VM의 할당을 취소하거나 다시 배포하면 손실됩니다. 이러한 디스크는 중요하지 않은 일시적인 데이터에만 사용하고 영구 Azure Storage 솔루션에 중요한 정보를 저장합니다.

임시 NVMe 데이터 디스크에 대한 자세한 지침은 AKS의 임시 NVMe 데이터 디스크에 대한 모범 사례를 참조하세요.

다음 단계

AKS에서 GPU 워크로드 배포 및 관리에 대해 자세히 알아보려면 다음 문서를 참조하세요.