Amazon EKS에서 NVIDIA GPU로 Multi-Instance GPU
Amazon EKS에서 NVIDIA GPU로 Multi-Instance GPU (MIG) 사용하기
Multi-Instance GPU (MIG)는 단일 물리 GPU를 여러 개의 격리된 인스턴스로 분할하는 NVIDIA GPU의 하드웨어 기능입니다. 분할 가능한 최대 인스턴스 수는 GPU에 따라 달라요. 각 인스턴스는 전용 메모리, 컴퓨팅 유닛, 메모리 대역폭을 가지므로 한 인스턴스에서 실행되는 워크로드는 다른 인스턴스의 워크로드에 영향을 줄 수 없습니다. 격리 없이 소프트웨어 시간 다중화로 GPU를 공유하는 시간 조각화와 달리, MIG는 Pod 간 하드웨어 수준 메모리·장애 격리를 제공해요.
MIG는 멀티 테넌트 추론과 예측 가능한 서비스 품질이 필요한 워크로드에 가장 잘 맞습니다. NVIDIA Ampere (A100), Hopper (H100 및 H200), Blackwell GPU에서 사용할 수 있어요. AWS에서는 P-family 인스턴스 유형과 Blackwell 기반 g7 및 g7e 인스턴스 유형이 이에 해당합니다. 전체 목록은 MIG-capable instance types를 참고하세요.
MIG는 다음 상황에 잘 맞아요.
- 메모리 격리가 필요해서 한 워크로드가 다른 워크로드가 요구하는 GPU 메모리를 소비할 수 없는 경우.
- 테넌트가 GPU 하드웨어를 공유하지만 테넌트별 서비스 품질이 필요한 멀티 테넌트 추론을 실행하는 경우.
- 이미 A100, H100, H200, Blackwell 인스턴스에서 학습을 실행하고, 학습이 유휴할 때 그 GPU를 더 작은 추론 워크로드에 재사용하고 싶은 경우.
다른 접근 방식을 고려해야 할 때는 다음과 같습니다.
- 노드가
g5,g6,g6e패밀리처럼 MIG를 지원하지 않는 GPU 인스턴스 유형을 사용하는 경우. 시간 조각화를 대신 사용하세요. - 메모리 격리가 필요 없고 가장 간단한 구성을 원하는 경우. 시간 조각화를 대신 사용하세요.
- 중단 없이 GPU 파티션을 자주 변경해야 하는 경우. MIG 모드나 파티션 레이아웃을 변경하려면 GPU 리셋이 필요하며, GPU Operator는 노드를 재부팅해서 이를 수행합니다.
- GPU 간 집합 통신이나 P2P 통신에 의존하는 다중 GPU 학습을 실행하는 경우. MIG는 NCCL이나 GPU 간 P2P를 지원하지 않습니다.
고려 사항 (Considerations)
프로덕션에서 MIG를 사용하기 전에 다음 고려 사항을 검토하세요.
일반 고려 사항
- MIG 구성 변경에는 GPU 리셋이 필요합니다. MIG 모드를 활성화·비활성화하거나 파티션 레이아웃을 바꾸려면 GPU 리셋이 필요하므로 제자리에서 변경할 수 없어요. 예를 들어 NVIDIA GPU Operator의 MIG Manager는 노드의 GPU Pod를 중지하고, MIG 모드를 변경하기 위해 재부팅이 필요하면 노드를 재부팅해서 구성 변경을 적용합니다.
- 컴퓨트는 인스턴스 크기에 정확히 비례하지 않습니다. 메모리 대역폭과 캐시 동작이 프로필마다 다르므로
1g인스턴스가 모든 워크로드에 전 GPU 처리량의 비례적 몫을 전달하지는 않아요. 파티션 크기를 정하기 전에 사용하려는 프로필에서 워크로드를 벤치마킹하세요. - 시간 조각화는 MIG 인스턴스에 효과가 없습니다. MIG 인스턴스는 이미 하드웨어 격리되어 있어 시간 조각화로 추가 공유할 수 없습니다. MIG 장치에
TimeSlicing공유 전략을 요청해도 하드웨어 동작은 변하지 않아요. 단일 MIG 인스턴스를 컨테이너 간에 공유하려면 NVIDIA Multi-Process Service (MPS)를 대신 사용하세요. - 제한된 GPU 간 통신. MIG가 활성화되면 다른 GPU의 MIG 인스턴스는 GPU 간 P2P 통신을 사용할 수 없고 NCCL은 MIG에서 작동하지 않습니다. 텐서 병렬 다중 GPU 학습처럼 GPU 간 집합 통신이나 P2P에 의존하는 다중 GPU 워크로드는 전체 GPU가 필요해요. 자세한 내용은 NVIDIA 웹사이트의 NVIDIA MIG User Guide에서 Application Considerations를 참고하세요.
NVIDIA device plugin 고려 사항
- Pod 리소스 요청은 전략과 일치해야 합니다. 단일 전략에서는 Pod가
nvidia.com/gpu를 요청합니다. 혼합 전략에서는 Pod가nvidia.com/mig-1g.10gb같은 프로필별 리소스를 요청합니다. 노드가 광고하지 않는 프로필을 요청하는 Pod는Pending상태로 남아요. 광고된 리소스는kubectl describe node로 확인하세요. - AL2023의 독립형 device plugin. NVIDIA device plugin을 예를 들어 클러스터 설정의 일부로 별도로 설치한다면, GPU Operator가 관리하는 device plugin과 충돌하지 않도록 MIG 노드에서 제외하세요.
nvidia.com/mig.config라벨이 있는 노드를 제외하는 노드 선호도 규칙을 독립형 device plugin에 추가합니다. - EKS Auto Mode에서 미지원. EKS Auto Mode는 NVIDIA device plugin을 관리하며 그 구성을 노출하지 않습니다(Deploy an accelerated workload 참고). EKS Auto Mode 노드에서는 MIG를 활성화할 수 없어요. AMI와 device plugin 설정을 제어하는 자체 관리 Karpenter 노드나 관리형 노드 그룹에서 MIG를 구성하세요.
NVIDIA DRA driver 고려 사항
- 정적 MIG에는 사전 생성된 인스턴스가 필요합니다. 정적 MIG에서 DRA driver는 기존 MIG 인스턴스를 할당하지만 MIG 모드를 활성화하거나 GPU를 분할하지는 않아요. 예를 들어 NVIDIA GPU Operator의 MIG Manager나
nvidia-smi로 MIG 모드를 활성화하고 인스턴스를 먼저 만들어야 합니다. 자세한 내용은 Use MIG with the NVIDIA DRA driver를 참고하세요. - 동적 MIG는 알파 기능입니다. 동적 MIG에서 드라이버는 워크로드 요청에 응답하여 MIG 파티션을 필요에 따라 만들고 파괴합니다. 기본적으로 비활성화된
DynamicMIG기능 게이트가 필요해요. 자세한 내용은 Use MIG with the NVIDIA DRA driver를 참고하세요. - Bottlerocket의 내장 device plugin 비활성화. DRA driver는 같은 노드에서 NVIDIA device plugin과 함께 실행될 수 없습니다. Bottlerocket에서는 Bottlerocket 버전 1.63.0 이상이 필요한 내장 device plugin을 비활성화해야 해요. 자세한 내용은 Install the NVIDIA DRA driver를 참고하세요.
- 컴퓨팅 지원. NVIDIA DRA driver는 Karpenter의 정적 용량 프로비저닝, EKS 관리형 노드 그룹, 자체 관리 노드에서 지원되며 EKS Auto Mode에서는 지원되지 않습니다. 자세한 내용은 Karpenter 웹사이트의 Karpenter static NodePool 문서를 참고하세요.
MIG 지원 인스턴스 유형
AWS에서 다음 인스턴스 유형이 MIG 지원 GPU를 제공합니다.
| 인스턴스 유형 | GPUs | GPU 메모리 |
|---|---|---|
p4d.24xlarge |
8 x NVIDIA A100 40 GB | 320 GB |
p4de.24xlarge |
8 x NVIDIA A100 80 GB | 640 GB |
p5.48xlarge |
8 x NVIDIA H100 80 GB | 640 GB |
p5e.48xlarge |
8 x NVIDIA H200 | 1128 GB |
p5en.48xlarge |
8 x NVIDIA H200 | 1128 GB |
p6-b200.48xlarge |
8 x NVIDIA Blackwell B200 | 1432 GB |
p6-b300.48xlarge |
8 x NVIDIA Blackwell Ultra B300 | 2144 GB |
g7.48xlarge |
8 x NVIDIA RTX PRO 4500 Blackwell Server Edition | 256 GB |
g7e.48xlarge |
8 x NVIDIA RTX PRO 6000 Blackwell Server Edition | 768 GB |
MIG는 g5, g6, g6e 패밀리에서는 사용할 수 없습니다. MIG 지원 NVIDIA GB200 GPU를 사용하는 p6e-gb200 UltraServers에 대해서는 Use P6e-GB200 UltraServers with Amazon EKS를 참고하세요.
참고
g7인스턴스 유형은 NVIDIA 드라이버 버전 595 이상이 필요합니다. EKS 최적화 AL2023 NVIDIA AMI는g7을 지원하는 드라이버 버전을 포함하며, 각 노드가 부팅 시 자동으로 선택합니다. 자세한 내용은 EKS-optimized NVIDIA AMIs를 참고하세요.
MIG 인스턴스는 g.gb 명명 패턴을 사용하는 프로필로 설명되며, 여기서 은 컴퓨트 슬라이스 수이고 은 인스턴스 메모리(GB)입니다. 예를 들어 3g.40gb 프로필은 7개의 컴퓨트 슬라이스 중 3개와 40GB 메모리를 제공합니다. 각 GPU가 지원하는 프로필은 하드웨어로 고정됩니다. 전체 목록은 NVIDIA 웹사이트의 NVIDIA Multi-Instance GPU User Guide를 참고하세요.
인스턴스 유형별 MIG 프로필
노드에서 사용할 수 있는 MIG 프로필은 인스턴스 유형의 GPU에 따라 달라요. 다음 섹션은 각 MIG 지원 Amazon EC2 인스턴스 유형의 프로필을 나열합니다. 각 프로필에서 Max instances는 단일 GPU에 만들 수 있는 해당 프로필의 최대 인스턴스 수이고, Memory per instance는 각각에 할당되는 GPU 메모리입니다.
p4d.24xlarge – NVIDIA A100 40 GB
| 프로필 | 컴퓨트 슬라이스 | 인스턴스당 메모리 | 최대 인스턴스 |
|---|---|---|---|
1g.5gb |
1 of 7 | 5 GB | 7 |
1g.10gb |
1 of 7 | 10 GB | 4 |
2g.10gb |
2 of 7 | 10 GB | 3 |
3g.20gb |
3 of 7 | 20 GB | 2 |
4g.20gb |
4 of 7 | 20 GB | 1 |
7g.40gb |
7 of 7 | 40 GB | 1 |
p4de.24xlarge – NVIDIA A100 80 GB
| 프로필 | 컴퓨트 슬라이스 | 인스턴스당 메모리 | 최대 인스턴스 |
|---|---|---|---|
1g.10gb |
1 of 7 | 10 GB | 7 |
1g.20gb |
1 of 7 | 20 GB | 4 |
2g.20gb |
2 of 7 | 20 GB | 3 |
3g.40gb |
3 of 7 | 40 GB | 2 |
4g.40gb |
4 of 7 | 40 GB | 1 |
7g.80gb |
7 of 7 | 80 GB | 1 |
p5.48xlarge – NVIDIA H100 80 GB
| 프로필 | 컴퓨트 슬라이스 | 인스턴스당 메모리 | 최대 인스턴스 |
|---|---|---|---|
1g.10gb |
1 of 7 | 10 GB | 7 |
1g.20gb |
1 of 7 | 20 GB | 4 |
2g.20gb |
2 of 7 | 20 GB | 3 |
3g.40gb |
3 of 7 | 40 GB | 2 |
4g.40gb |
4 of 7 | 40 GB | 1 |
7g.80gb |
7 of 7 | 80 GB | 1 |
p5e.48xlarge 및 p5en.48xlarge – NVIDIA H200
| 프로필 | 컴퓨트 슬라이스 | 인스턴스당 메모리 | 최대 인스턴스 |
|---|---|---|---|
1g.18gb |
1 of 7 | 18 GB | 7 |
1g.35gb |
1 of 7 | 35 GB | 4 |
2g.35gb |
2 of 7 | 35 GB | 3 |
3g.71gb |
3 of 7 | 71 GB | 2 |
4g.71gb |
4 of 7 | 71 GB | 1 |
7g.141gb |
7 of 7 | 141 GB | 1 |
p6-b200.48xlarge – NVIDIA Blackwell B200
| 프로필 | 컴퓨트 슬라이스 | 인스턴스당 메모리 | 최대 인스턴스 |
|---|---|---|---|
1g.23gb |
1 of 7 | 23 GB | 7 |
1g.45gb |
1 of 7 | 45 GB | 4 |
2g.45gb |
2 of 7 | 45 GB | 3 |
3g.90gb |
3 of 7 | 90 GB | 2 |
4g.90gb |
4 of 7 | 90 GB | 1 |
7g.180gb |
7 of 7 | 180 GB | 1 |
p6-b300.48xlarge – NVIDIA Blackwell Ultra B300
p6-b300.48xlarge는 HGX B300을 사용하며, 각 GPU를 32GB 인스턴스 7개, 67GB 인스턴스 4개, 135GB 인스턴스 2개, 또는 270GB 인스턴스 1개로 분할하는 것을 지원합니다. 이 크기는 예비적이며 변경될 수 있어요. 프로필 세부 정보는 NVIDIA 웹사이트의 NVIDIA Supported MIG Profiles를 참고하세요.
g7.48xlarge – NVIDIA RTX PRO 4500 Blackwell Server Edition
| 프로필 | 컴퓨트 슬라이스 | 인스턴스당 메모리 | 최대 인스턴스 |
|---|---|---|---|
1g.16gb |
1 of 2 | 16 GB | 2 |
2g.32gb |
2 of 2 | 32 GB | 1 |
RTX PRO 4500 Blackwell은 또한 그래픽 지원(+gfx) 및 미디어 엔진(+me.all, -me) 프로필 변형을 지원합니다. 전체 목록은 NVIDIA 웹사이트의 NVIDIA Supported MIG Profiles를 참고하세요.
g7e.48xlarge – NVIDIA RTX PRO 6000 Blackwell Server Edition
| 프로필 | 컴퓨트 슬라이스 | 인스턴스당 메모리 | 최대 인스턴스 |
|---|---|---|---|
1g.24gb |
1 of 4 | 24 GB | 4 |
2g.48gb |
2 of 4 | 48 GB | 2 |
4g.96gb |
4 of 4 | 96 GB | 1 |
RTX PRO 6000 Blackwell Server Edition은 또한 그래픽 지원(+gfx) 및 미디어 엔진(+me.all, -me) 프로필 변형을 지원합니다. 전체 목록은 NVIDIA 웹사이트의 NVIDIA Supported MIG Profiles를 참고하세요.
MIG 전략 (MIG strategies)
NVIDIA DRA driver와 NVIDIA device plugin은 MIG 인스턴스를 Kubernetes에 다르게 노출합니다. device plugin은 노드 전체 MIG 전략 설정을 사용하는 반면, DRA driver는 속성으로 인스턴스를 선택하므로 이에 상응하는 설정이 없어요. 이 차이를 이해하는 것이 두 모델 중 하나를 선택하는 핵심입니다.
NVIDIA DRA driver
NVIDIA DRA driver는 단일 또는 혼합 전략 개념을 사용하지 않으며 구성할 설정이 없습니다. MIG 인스턴스를 개수 리소스로 광고하는 대신 드라이버는 각 인스턴스를 mig.nvidia.com DeviceClass의 장치로 profile 같은 속성과 함께 게시합니다. Pod는 Use MIG with the NVIDIA DRA driver에 표시된 것처럼 ResourceClaim 또는 ResourceClaimTemplate의 Common Expression Language (CEL) 선택기로 이러한 속성을 매칭해서 인스턴스를 선택해요.
선택이 인스턴스별이므로 혼합 프로필 노드가 전략 모드 전환 없이 작동합니다. 단일 GPU를 여러 다른 프로필로 분할할 수 있고, 각 클레임이 필요한 프로필을 선택합니다. DRA driver에 중요한 선택은 단일 대 혼합 전략이 아니라 정적 대 동적 MIG이며, 이는 MIG 인스턴스를 미리 만들 것인지 드라이버가 요청 시 만들 것인지를 제어합니다. 자세한 내용은 Use MIG with the NVIDIA DRA driver를 참고하세요.
NVIDIA device plugin
NVIDIA device plugin은 두 가지 전략 중 하나를 사용해서 MIG 인스턴스를 Kubernetes에 광고합니다. device plugin은 MIG 인스턴스를 정수 개수만 있고 인스턴스별 속성이 없는 노드 수준 확장 리소스로 노출하므로, 전략이 해당 리소스의 이름 지정 방식을 결정해요.
- 단일 전략(Single strategy) – 노드의 모든 GPU가 같은 MIG 프로필을 사용합니다. device plugin은 각 인스턴스를
nvidia.com/gpu리소스로 광고하고, Pod는 전용 GPU처럼nvidia.com/gpu: 1을 요청합니다. 기존 매니페스트는 변경되지 않습니다. Bottlerocket과 AL2023 모두 단일 전략을 지원합니다. - 혼합 전략(Mixed strategy) – 같은 노드의 GPU가 서로 다른 MIG 프로필을 사용할 수 있습니다. device plugin은 각 프로필을
nvidia.com/mig-1g.10gb또는nvidia.com/mig-3g.40gb같은 별도 리소스로 광고하고, Pod는 필요한 특정 프로필을 요청해요. Bottlerocket의 내장 NVIDIA device plugin으로는 혼합 전략을 사용할 수 없습니다. 자세한 내용은 GitHub의 Bottlerocket GitHub issue #4483을 참고하세요.
NVIDIA DRA driver로 MIG 사용
NVIDIA DRA driver로 MIG 인스턴스를 할당할 때 Pod는 device plugin의 nvidia.com/mig- 확장 리소스 대신 ResourceClaim 또는 ResourceClaimTemplate을 통해 MIG 인스턴스를 요청해요.
DRA driver는 인스턴스를 개수 리소스가 아닌 속성으로 설명하므로 device plugin이 요구하는 단일 또는 혼합 전략을 사용하지 않습니다(MIG strategies 참고). 드라이버는 각 MIG 인스턴스를 gpu.nvidia.com/type 속성이 mig인 mig.nvidia.com DeviceClass의 장치로 노출하고, profile(예: 1g.5gb)과 물리 GPU의 parentUUID 같은 인스턴스별 속성을 광고합니다. 특정 프로필을 요청하거나 여러 인스턴스를 같은 GPU에 유지하려면 Common Expression Language (CEL) 선택기로 이러한 속성을 매칭해요.
DRA driver는 두 가지 모드 중 하나로 MIG 인스턴스를 할당합니다.
- 정적 MIG – 드라이버가 시작하기 전에 노드에서 MIG 모드를 활성화하고 MIG 인스턴스를 만듭니다. 예를 들어 Use MIG on AL2023 nodes with the NVIDIA device plugin에 설명된 대로 NVIDIA GPU Operator의 MIG Manager를 사용합니다. 드라이버는 기존 인스턴스를 발견해서 Pod에 할당하지만 노드의 MIG 구성을 수정하지 않아요. 드라이버 시작 후 추가된 인스턴스는 GPU kubelet plugin이 재시작할 때까지 발견되지 않습니다. 정적 MIG가 기본이며 기능 게이트가 필요 없습니다.
- 동적 MIG – 드라이버가 워크로드 요청에 응답하여 MIG 파티션을 필요에 따라 만들고 파괴하므로 GPU를 미리 분할하지 않아요. 동적 MIG는 기본적으로 비활성화된 알파 기능입니다. 다음 섹션에 표시된 것과 같은
ResourceClaimTemplate선택기로 프로필을 요청하고, 드라이버가 요청을 충족시키도록 GPU를 분할합니다.
고려 사항
동적 MIG는 노드의 정적 발견을 대체합니다. 드라이버는 GPU kubelet plugin이 시작될 때 자신이 만들지 않은 MIG 파티션을 모두 파괴하고 모든 파티션을 관리합니다. 유지하고 싶은 사전 생성 파티션이 있는 노드에서는 동적 MIG를 활성화하지 마세요. 플러그인이 실행되는 동안 mig-parted나 nvidia-smi mig를 실행하지 마세요. 수동 변경이 드라이버의 파티션 상태와 충돌해서 Pod 준비나 정리가 실패할 수 있기 때문입니다.
동적 MIG는 알파 상태이며 NVIDIA DRA driver를 설치할 때 기능 게이트를 활성화해야 합니다. 지침은 Install the NVIDIA DRA driver를 참고하세요.
Hopper (H100 및 H200) 이상 아키텍처는 MIG 모드를 온디맨드로 활성화합니다. 이전 세대는 Ampere (A100) GPU를 포함해 MIG 모드를 온디맨드로 활성화할 수 없습니다.
동적 MIG는 Kubernetes 1.36 이상 버전에서 기본으로 활성화되는 Kubernetes 분할 가능 장치 기능(GitHub의 KEP-4815)에 의존합니다. 이전 버전에서는 이 기능이 기본으로 활성화되지 않아 스케줄러가 동적으로 생성된 MIG 장치를 할당할 수 없어요.
사전 조건
- Karpenter, EKS 관리형 노드 그룹, 또는 자체 관리 노드 그룹으로 정적 용량이 프로비저닝된 Kubernetes 1.34 이상을 실행하는 Amazon EKS 클러스터.
- MIG 모드가 활성화되고 GPU가 MIG 인스턴스로 분할된 MIG 지원 P-family 노드. 정적 MIG의 경우 NVIDIA 웹사이트의 NVIDIA GPU Operator에 있는 MIG Manager를 참고하세요.
- 정적 MIG 분할을 사용하지 않는다면 선택적으로 Dynamic MIG가 활성화된 상태로 Install the NVIDIA DRA driver에 설명된 대로 설치된 NVIDIA DRA driver.
절차
다음 예제는 NVIDIA DRA driver와 함께 정적 또는 동적 MIG에서 모두 사용할 수 있습니다.
mig.nvidia.com DeviceClass에서 MIG 인스턴스를 요청하는 ResourceClaimTemplate과 그것을 참조하는 Pod를 만듭니다. 이 예제는 프로필을 제한하지 않고 사용 가능한 MIG 인스턴스를 요청합니다.
Bottlerocket 노드에서 NVIDIA device plugin으로 MIG 사용
Bottlerocket에서 NVIDIA device plugin으로 MIG를 사용하려면 노드 사용자 데이터에서 MIG 분할 설정을 제공해야 해요.
사전 조건
- Amazon EKS 클러스터. 다음 절차는 EKS 최적화 Bottlerocket NVIDIA AMI(1.34.0 이상)로 MIG 지원 P-family 노드를 프로비저닝합니다.
- 다음 절차가 Bottlerocket 노드 사용자 데이터에서 MIG 설정을 제공하기 위해 Karpenter
EC2NodeClass를 사용하므로, 클러스터에 Karpenter가 설치·구성되어 있어야 합니다. 자세한 내용은 Karpenter 웹사이트의 Getting Started with Karpenter를 참고하세요. - 클러스터와 통신하도록 구성된
kubectl. 자세한 내용은 Install or update kubectl을 참고하세요.
절차
GPU 노드의 Bottlerocket 사용자 데이터에 MIG 분할 설정을 추가합니다. 사용자 데이터를 제공하는 방식은 노드 프로비저닝 방식에 따라 달라요. 다음 예제는 p4d.24xlarge 노드용 Karpenter EC2NodeClass를 보여줍니다.
...
subnetSelectorTerms:
- tags:
karpenter.sh/discovery:
securityGroupSelectorTerms:
- tags:
karpenter.sh/discovery:
userData: |
[settings.kubelet-device-plugins.nvidia]
device-partitioning-strategy = "mig"
[settings.kubelet-device-plugins.nvidia.mig.profile]
"a100.40gb" = "2g.10gb"
EOF
이 설정으로 프로비저닝된 노드가 클러스터에 조인하면 GPU에서 MIG 모드가 활성화되고, 각 GPU가 2g.10gb 인스턴스로 분할되며, device plugin이 결과 인스턴스를 nvidia.com/gpu 리소스로 광고합니다. p4d.24xlarge에는 8개의 A100 GPU가 있고 각각 3개의 2g.10gb 인스턴스를 지원하므로 노드는 nvidia.com/gpu: 24를 광고해요.
참고
mig.profile설정은a100.40gb나h100.80gb같은 GPU 모델을 키로 사용합니다.mig.profile설정이 없으면 GPU는 MIG 모드를 활성화하고 가장 큰 프로필을 사용합니다. Bottlerocket은 단일 전략을 사용하므로 노드의 모든 GPU는 같은 프로필을 사용해요. 같은 노드에서 다른 프로필을 사용하려면(혼합 전략) NVIDIA GPU Operator와 함께 AL2023 경로를 사용하세요.
AL2023 노드에서 NVIDIA device plugin으로 MIG 사용
AL2023에서 다음 단계는 NVIDIA GPU Operator를 사용해서 NVIDIA device plugin과 MIG Manager를 설치합니다. MIG Manager는 MIG 모드를 활성화하고 제공하는 구성에 따라 GPU를 분할합니다. NVIDIA device plugin은 결과 인스턴스를 Kubernetes에 광고합니다. GPU Operator는 단일과 혼합 전략을 모두 지원합니다.
EKS 최적화 AL2023 NVIDIA AMI는 이미 NVIDIA 드라이버와 툴킷을 포함하므로 사전 설치된 드라이버와의 충돌을 피하려면 GPU Operator에서 드라이버 관리를 비활성화하세요. 또는 GPU Operator를 사용하지 않고 NVIDIA device plugin과 MIG Manager를 직접 설치·관리할 수 있어요.
사전 조건
- Amazon EKS 클러스터. 다음 절차는 EKS 최적화 AL2023 NVIDIA AMI로 MIG 지원 P-family 노드(
p4d.24xlarge같은)를 프로비저닝합니다. - 절차가 GPU 노드를 프로비저닝하기 위해 Karpenter
EC2NodeClass와NodePool을 만들므로, 클러스터에 Karpenter가 설치·구성되어 있어야 합니다. 자세한 내용은 Karpenter 웹사이트의 Getting Started with Karpenter를 참고하세요. - 명령줄 환경에 Helm 설치. 자세한 내용은 Setup Helm 지침을 참고하세요.
- 클러스터와 통신하도록 구성된
kubectl. 자세한 내용은 Install or update kubectl을 참고하세요.
절차
AL2023 P-family GPU 노드용 EC2NodeClass와 NodePool을 만듭니다. AL2023에서 MIG 분할은 이후 단계에서 GPU Operator가 적용하므로 이는 표준 AL2023 GPU 노드 클래스입니다. 다음 예제는 EKS 최적화 AL2023 NVIDIA AMI로 p4d.24xlarge 노드를 프로비저닝합니다.
...
subnetSelectorTerms:
- tags:
karpenter.sh/discovery:
securityGroupSelectorTerms:
- tags:
karpenter.sh/discovery:
tags:
karpenter.sh/discovery:
---
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: gpu-mig-al2023
spec:
template:
spec:
nodeClassRef:
group: karpenter.k8s.aws
kind: EC2NodeClass
name: gpu-mig-al2023
taints:
- key: nvidia.com/gpu
effect: NoSchedule
requirements:
- key: karpenter.sh/capacity-type
operator: In
values: ["spot", "on-demand"]
- key: node.kubernetes.io/instance-type
operator: In
values: ["p4d.24xlarge"]
- key: kubernetes.io/arch
operator: In
values: ["amd64"]
limits:
cpu: 1000
memory: 5000Gi
EOF
NVIDIA Helm 저장소를 추가합니다.
helm repo add nvidia https://nvidia.github.io/gpu-operator
helm repo update
드라이버 관리를 비활성화하고 혼합 전략을 선택하며 적용할 MIG 프로필을 정의하는 gpu-operator-values.yaml 파일을 만듭니다. 다음 예제는 p4d.24xlarge 노드의 8개 GPU 중 4개를 분할하고 나머지는 통째로 두는 p4d-half-balanced 구성을 정의합니다.
cat gpu-operator-values.yaml
driver:
enabled: false
toolkit:
enabled: false
devicePlugin:
enabled: true
nfd:
enabled: true
gfd:
enabled: true
mig:
strategy: mixed
migManager:
enabled: true
env:
- name: WITH_REBOOT
value: "true"
config:
create: true
name: custom-mig-parted-configs
default: all-disabled
data:
config.yaml: |-
version: v1
mig-configs:
all-disabled:
- devices: all
mig-enabled: false
p4d-half-balanced:
- devices: [0, 1, 2, 3]
mig-enabled: true
mig-devices:
"1g.5gb": 2
"2g.10gb": 1
"3g.20gb": 1
- devices: [4, 5, 6, 7]
mig-enabled: false
EOF
values 파일로 GPU Operator를 설치합니다.
helm install gpu-operator nvidia/gpu-operator \
--namespace gpu-operator \
--create-namespace \
--values gpu-operator-values.yaml
적용할 프로필 구성으로 MIG 지원 노드에 라벨을 붙입니다. MIG Manager 구성 요소는 이 라벨을 감시하고 그에 따라 GPU를 분할하며, 변경을 적용하기 위해 노드를 재부팅합니다.
kubectl label nodes -l node.kubernetes.io/instance-type=p4d.24xlarge \
nvidia.com/mig.config=p4d-half-balanced --overwrite
GPU Operator가 GPU를 분할한 후 Pod는 nvidia.com/gpu 대신 리소스 이름으로 특정 MIG 프로필을 요청합니다. 다음 예제는 하나의 1g.5gb 인스턴스를 요청하는 Pod를 실행합니다.
자세한 내용은 Amazon EKS Best Practices Guide를 참고하세요.
MIG가 활성화되었는지 확인
MIG 지원 노드가 Ready가 되면 GPU에서 MIG 모드가 활성화되고 노드가 예상 MIG 리소스를 광고하는지 확인하세요.
노드가 MIG 리소스를 광고하는지 확인합니다. 단일 전략에서는 노드가 인스턴스를 nvidia.com/gpu로 보고합니다. 혼합 전략에서는 노드가 nvidia.com/mig-1g.10gb 같은 프로필별 리소스를 보고합니다.
kubectl describe node | grep nvidia.com
MIG 지원 노드의 Pod에서 nvidia-smi를 실행해서 MIG 모드가 활성화되었는지 확인합니다.
nvidia-smi는 MIG 모드가 켜진 GPU에 대해MIG M.: Enabled를 보고하고 각각에 구성된 MIG 인스턴스를 나열합니다. 다음은 MIG가 활성화되고3g.20gb,2g.10gb,1g.5gb인스턴스로 분할된 A100 40 GB GPU의 예제 출력입니다.
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.159.03 Driver Version: 580.159.03 CUDA Version: 13.0 |
+-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA A100-SXM4-40GB On | 00000000:10:1C.0 Off | On |
| N/A 35C P0 65W / 400W | 213MiB / 40960MiB | N/A Default |
| | | Enabled |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| MIG devices: |
+------------------+----------------------------------+-----------+-----------------------+
| GPU GI CI MIG | Shared Memory-Usage | Vol| Shared |
| ID ID Dev | Shared BAR1-Usage | SM Unc| CE ENC DEC OFA JPG |
| | | ECC| |
|==================+==================================+===========+=======================|
| 0 1 0 0 | 107MiB / 20096MiB | 42 0 | 3 0 2 0 0 |
| | 0MiB / 12211MiB | | |
+------------------+----------------------------------+-----------+-----------------------+
| 0 5 0 1 | 71MiB / 9984MiB | 28 0 | 2 0 1 0 0 |
| | 0MiB / 6105MiB | | |
+------------------+----------------------------------+-----------+-----------------------+
| 0 13 0 2 | 36MiB / 4864MiB | 14 0 | 1 0 0 0 0 |
| | 0MiB / 3052MiB | | |
+------------------+----------------------------------+-----------+-----------------------+
혼합 전략에서 Pod는 노드의 전체 GPU 레이아웃이 아니라 자신이 요청한 MIG 인스턴스만 볼 수 있어요. 이전 단계의 mig-inference Pod가 하나의 nvidia.com/mig-1g.5gb 인스턴스를 요청했으므로 해당 Pod 내부의 nvidia-smi -L은 단일 MIG 장치를 나열합니다.
kubectl logs mig-inference
예제 출력은 다음과 같습니다.
GPU 0: NVIDIA A100-SXM4-40GB (UUID: GPU-5b7ce860-1951-004c-4881-6ac6997df770)
MIG 1g.5gb Device 0: (UUID: MIG-9b065868-21b6-5b8d-8ab9-e99089ed472c)
노드의 모든 GPU의 전체 파티션 레이아웃을 보려면 워크로드 Pod 내부가 아닌 호스트에서 nvidia-smi -L을 실행합니다. 다음 명령은 노드에서 권한 있는 디버깅 Pod를 시작하고 호스트의 nvidia-smi를 실행합니다. node-name을 MIG 지원 노드의 이름으로 바꾸세요.
kubectl debug node/ -it --profile=sysadmin --image=nvidia/cuda:12.6.0-base-ubuntu22.04 -- chroot /host nvidia-smi -L
다음은 p4d-half-balanced 구성의 예제 출력입니다. 처음 4개 GPU는 MIG 인스턴스로 분할되고 나머지 4개는 전체 GPU입니다. 각 MIG 줄은 자신의 UUID, 메모리, 컴퓨트 슬라이스를 가진 하드웨어 격리 인스턴스예요.
GPU 0: NVIDIA A100-SXM4-40GB (UUID: GPU-5b7ce860-1951-004c-4881-6ac6997df770)
MIG 3g.20gb Device 0: (UUID: MIG-7dc16162-7ba2-5894-abde-d753dc8ecf56)
MIG 2g.10gb Device 1: (UUID: MIG-56cfe1f0-0662-50e4-a5f7-111107e4d5e6)
MIG 1g.5gb Device 2: (UUID: MIG-1409727e-2ffa-5fd4-9586-204c9e2b36d5)
MIG 1g.5gb Device 3: (UUID: MIG-9b065868-21b6-5b8d-8ab9-e99089ed472c)
GPU 1: NVIDIA A100-SXM4-40GB (UUID: GPU-73692a43-dd2d-f1a1-b0df-2f4734e2a87d)
MIG 3g.20gb Device 0: (UUID: MIG-745fd93a-9582-57a6-8b3b-9782d289ca1b)
MIG 2g.10gb Device 1: (UUID: MIG-8440294e-c4a0-5687-add5-2cc506babb2f)
MIG 1g.5gb Device 2: (UUID: MIG-559810c0-f2bb-5ca2-b529-47228d99437f)
MIG 1g.5gb Device 3: (UUID: MIG-a91cf3f9-6459-59e9-97a8-dc69b9958eef)
GPU 2: NVIDIA A100-SXM4-40GB (UUID: GPU-4e56019e-84de-eef5-5ac3-85e468e93639)
MIG 3g.20gb Device 0: (UUID: MIG-c130392b-fd7c-59f8-9f4b-ecab27a2984b)
MIG 2g.10gb Device 1: (UUID: MIG-7d61cf16-ad08-57be-b2c2-ac6e515b28c3)
MIG 1g.5gb Device 2: (UUID: MIG-f5388dec-d841-506c-bb7a-6ac136ceee53)
MIG 1g.5gb Device 3: (UUID: MIG-02d54020-c6cb-5997-894b-e95af0f49388)
GPU 3: NVIDIA A100-SXM4-40GB (UUID: GPU-4fd894a0-b471-9e77-eb67-0ad15002ed5b)
MIG 3g.20gb Device 0: (UUID: MIG-10399b59-2625-5106-b3f8-76ae19da46e1)
MIG 2g.10gb Device 1: (UUID: MIG-ef81ee7d-fc48-56ed-8479-8ffa76eb4154)
MIG 1g.5gb Device 2: (UUID: MIG-ed9bf59d-6bf2-5e07-80fb-dd0d7ca41f9d)
MIG 1g.5gb Device 3: (UUID: MIG-a15d6f7d-661b-514e-8838-06fe4ffe7f75)
GPU 4: NVIDIA A100-SXM4-40GB (UUID: GPU-05b6b91b-da6e-3078-1f4f-a7bbf1ff7ed2)
GPU 5: NVIDIA A100-SXM4-40GB (UUID: GPU-078a8df1-f387-0315-6b0b-af12e082f6d5)
GPU 6: NVIDIA A100-SXM4-40GB (UUID: GPU-6cdeffe7-45f1-7e8e-bcc1-4634399ad877)
GPU 7: NVIDIA A100-SXM4-40GB (UUID: GPU-5f68814a-4e4a-5dec-79b4-8d70a61c7714)
더 알아보기 (Learn more)
출처: 문서