1. 개요
- Azure에서 GPU를 활용하기 위해서는 기본적으로 VM 1대에 GPU 1개를 매칭하여 사용하며, 하나의 GPU를 여러대의 VM이 사용할 수 없다.
- 다만, 컨테이너 환경에서는 GPU 자원을 쉐어링 할 수 있는데, AKS에서 GPU 사용 요건과 사용 방식에 대해 알아 보자.
2. AKS에서 GPU 활용 조건
- GPU 지원 VM 노드풀 사용
- NVIDIA Device Plugin for Kubernetes
- 쿠버네티스에서 GPU 리소스를 스케줄링하려면 반드시 nvidia-device-plugin DaemonSet을 배포해야 함.
- 이 플러그인이 GPU 리소스를 nvidia.com/gpu라는 형태로 노출시켜, Pod이 요청할 수 있도록 해줌 - NVIDIA 드라이버 및 CUDA 라이브러리
- GPU 노드풀에는 NVIDIA 드라이버가 설치되어야 하며, CUDA/cuDNN 버전은 컨테이너 이미지 내부와 호환되어야 함.
- 즉, 컨테이너 내부 CUDA 버전과 VM에 설치된 드라이버 버전이 호환되어야 여러 컨테이너에서 GPU 활용이 가능
- AKS는 NVIDIA GPU Operator 또는 VM 확장 기능을 통해 자동 설치 가능. - QoS 설정은 반드시 Guaranteed(requests == limits).
3. 하드웨어적 Sharing 기법 - Multi Instance GPU(MIG)
- NVIDIA Multi-Instance GPU(MIG)는 최신 NVIDIA GPU(A100, H100 등)에서 제공하는 하드웨어 기반 가상화 기술입니다. MIG는 단일 물리 GPU를 최대 7개의 완전 격리된 독립 GPU 인스턴스로 분할할 수 있습니다. 각 인스턴스는 자체 메모리, 컴퓨팅 코어, 캐시를 포함하며, 서로 간의 작업 간섭 없이 독립적으로 동작합니다. 이를 통해 여러 워크로드를 동시에 운영하면서도 예측 가능한 서비스 품질(QoS)을 보장할 수 있습니다. 또한, GPU 인스턴스 단위의 성능 모니터링과 관리가 가능해 GPU 자원의 효율적 배분과 안정성 확보에 탁월합니다.
- MIG는 Ampere 이상(A100, A30)과 Hopper 이상(H100/H200 등)에서 지원됩니다. 드라이버 요구사항은 대략 A100/A30 = CUDA 11 / R450+, H100 = CUDA 12 / R525+
- MIG는 한 개의 물리 GPU를 여러 개의 독립 인스턴스(MIG slice) 로 하드웨어 분할하는 기술임 따라서 같은 노드 안의 단일 GPU를 여러 Pod/컨테이너가 나눠 쓰게 해주지만, 여러 노드가 한 GPU를 공유하는 건 아님. NVIDIA 공식 가이드도 “단일 물리 GPU에서 여러 GPU 인스턴스가 병렬 실행”이라고 명시
- MIG 자원을 쿠버네티스에 노출하는 방식은 두 가지 전략 중 하나를 선택
- single: 모든 MIG 인스턴스를 nvidia.com/gpu 로 노출
- mixed: 프로파일별 자원명으로 노출(예: nvidia.com/mig-1g.5gb) - AKS는 MIG 호환 VM 사이즈(예: A100 계열 NDv4, H100 Standard_NC40ads_H100_v5 등)로 MIG 노드풀을 만들 수 있고, 만들 때 GPU instance profile(예: MIG1g, MIG2g 등)을 지정합니다. 단, 적용한 profile은 노드풀 생성 후 변경 불가이고, Azure Linux 노드이미지에선 현재 미지원
- GPU는 limits에만 지정해도 되고, 그러면 request = limit 으로 간주되며 requests를 지정하려면 limits와 반드시 동일해야 함
- QOS 관점에서 GPU만 limits를 걸어도 CPU/메모리를 지정하지 않으면 BestEffort가 됩니다. 안정적인 스케줄/축출 회피가 필요하면 CPU/메모리도 requests=limits로 맞춰 Guaranteed를 권장
- GPU Operator를 쓰면 드라이버/디바이스 플러그인/GFD 등을 자동 배포하며 MIG Manager가 노드의 MIG 구성을 관리합니다. 다만 AKS에서는 MIG 프로파일은 노드풀 생성 시 고정(런타임 변경 불가) 제한이 있으니 설계 시에 결정
4. 소프트웨어적 Shareing 기법 - NVIDIA Multi-Process Service(MPS)
- NVIDIA Multi-Process Service(MPS)는 소프트웨어 레벨에서 여러 CUDA 프로세스를 동시에 실행시켜 GPU 이용률을 높이는 기술입니다. MPS는 단일 GPU 내에서 다중 프로세스의 작업을 병렬 처리할 수 있도록 하여 GPU의 자원 활용을 극대화하지만, 하드웨어 자원 격리 측면에서는 MIG에 비해 제한적입니다. 따라서 격리가 엄격히 요구되는 환경보다는 GPU 활용률 향상이 목표인 경우 적합하며, GPU idle 시간을 줄여 효율 극대화, latency 줄일 수 있음
- 다만, 하드웨어 자원 분리는 없기 때문에 (메모리·SM 등 격리 X, soft sharing임) 워크로드 간 간섭이 발생할 수 있어 안정성이 중요한 멀티 테넌트 환경에는 부적합
- MIG에 비해 Pod 및 워크로드 수의 제한이 없으며, 대부분 (Kepler 이후 Tesla, T4, V100 포함) GPU 사용이 가능한 VM에서 활용 가능함.
5. 활용 방법
- 먼저 MIG로 GPU를 하드웨어 분할(예: A100 한 장을 1g.5gb × 7로 쪼갬) 후 그 안에서 다시 MPS를 켜면, 해당 MIG slice를 여러 프로세스가 소프트웨어 레벨로 공유할 수 있음
- 즉 GPU를 다중 사용자 또는 다중 워크로드 환경에서 효율적으로 운영하기 위해서는 하드웨어 기반의 MIG, 소프트웨어 병렬 처리용 MPS, 그리고 Kubernetes 자원 정책을 함께 고려하는 통합적 접근이 필수
- (참고) Time‑slicing: 디바이스 플러그인 옵션으로 시간 분할 공유(오버서브스크립션) 가능. MIG 프로파일 자원에도 적용 가능. 격리는 MIG보다 약하지만 활용도는 높음
6. 참고 문서
- GPU VM이란? https://learn.microsoft.com/ko-kr/azure/databox-online/azure-stack-edge-gpu-overview-gpu-virtual-machines#gpu-vm-deployment
- GPU 공유 : https://learn.microsoft.com/ko-kr/azure/databox-online/azure-stack-edge-gpu-sharing
- GPU 마이그레이션 : https://learn.microsoft.com/ko-kr/azure/virtual-machines/migration/sizes/n-series-migration
'Azure 상식' 카테고리의 다른 글
| AKS 장애 대응 - Node Not Ready, POD Pending 등 이슈 원인 파악 및 해결 방안 (1) | 2025.08.25 |
|---|---|
| AKS의 이슈상황 원인과 대응방안 + Pod Lifecycle (1) | 2025.08.25 |
| Azure Virtual Network 암호화 (2) | 2025.08.25 |
| PV/PVC with Azure File 구성시 필요한 Network 설정 (1) | 2025.08.25 |
| Azure Storage 암호화 (0) | 2025.08.25 |