Amazon EKS에서 하드웨어 장치 관리하기
Amazon EKS에서 하드웨어 장치 관리하기
Amazon EKS는 EKS 클러스터에서 특수 하드웨어 장치를 관리하기 위한 두 가지 Kubernetes 메커니즘을 지원합니다. Dynamic Resource Allocation (DRA)과 device plugins입니다. 두 메커니즘 모두 워크로드가 NVIDIA GPUs, AWS Trainium 칩 같은 하드웨어 가속기와 Elastic Fabric Adapter (EFA) 같은 고성능 네트워크 장치에 접근할 수 있게 해 줍니다.
Kubernetes 1.34 이상 버전에서 Karpenter의 정적 용량 프로비저닝, EKS 관리형 노드 그룹, 또는 자체 관리 노드를 사용하는 새 배포에는 DRA 드라이버를 사용할 것을 권장합니다. DRA는 현재 EKS Auto Mode에서 지원되지 않아요. DRA는 device plugins으로는 불가능한 더 풍부한 장치 선택, 토폴로지 인식 스케줄링, 장치 공유 기능을 제공합니다.
이 두 Kubernetes 기능에 대한 일반적인 정보는 Kubernetes 문서의 Dynamic Resource Allocation과 device plugins를 참고하세요.
Dynamic Resource Allocation vs device plugins
Kubernetes device plugins은 특수 하드웨어를 Kubernetes 워크로드에 노출하는 주요 메커니즘이었어요. Device plugins은 장치를 컨테이너 리소스 요청과 한도에서 요청하는 확장 리소스(예: nvidia.com/gpu 또는 aws.amazon.com/neuroncore)로 광고합니다. Device plugins은 널리 지원되고 사용되지만 몇 가지 한계가 있어요.
- 장치는 속성 기반 필터링 없이 불투명한 정수 개수로 요청됩니다.
- 컨테이너 또는 Pod 간 장치 공유를 지원하지 않습니다.
- 장치 유형에 걸친 표현력 있는 토폴로지 인식 할당이 없습니다.
- 지능적인 배치를 위해 사용자 정의 스케줄러 확장이 종종 필요합니다.
Dynamic Resource Allocation (DRA)은 Kubernetes 1.34 버전에서 일반 공개된 Kubernetes 기능으로, 이러한 한계를 해결합니다. DRA를 사용하면 장치 드라이버가 ResourceSlice 객체를 통해 풍부한 장치 속성을 Kubernetes 스케줄러에 게시합니다. DeviceClass 범주를 참조하는 ResourceClaim과 ResourceClaimTemplate 객체로 장치를 요청해요.
DRA는 다음을 가능하게 합니다.
- Common Expression Language (CEL) 표현식을 사용한 속성 기반 장치 선택.
- 장치가 같은 PCIe 스위치나 NUMA 도메인에 공동 배치되도록 보장하는 토폴로지 인식 할당.
- 공유
ResourceClaim참조를 통한 여러 컨테이너 또는 Pod 간 장치 공유. - MIG나 시간 조각화(time-slicing)를 사용할 때 NVIDIA GPU의 동적 분할과 공유.
Amazon EKS용 DRA 드라이버
Amazon EKS 클러스터에서 특수 하드웨어 장치를 관리하는 데 흔히 사용되는 DRA 드라이버는 다음과 같습니다.
- NVIDIA DRA driver — GitHub의 NVIDIA GPU용 DRA driver는 NVIDIA GPU의 유연한 할당과 동적 구성을 가능하게 합니다. NVIDIA DRA driver로 GPU를 관리하는 방법은 Use the NVIDIA DRA driver or device plugin on Amazon EKS를, EC2 Grace-Blackwell 인스턴스에서 Multi-Node NVLink (MNNVL) 워크로드에
ComputeDomains를 사용하는 방법은 Use P6e-GB200 UltraServers with Amazon EKS를 참고하세요. - EFA DRA driver — GitHub의 EFA DRA driver (DRANET)는 EFA 인터페이스를 토폴로지상 로컬인 GPU 또는 Neuron 장치와 짝짓는 토폴로지 인식 스케줄링으로 Elastic Fabric Adapter (EFA) 장치 할당을 관리하고, Pod 간 장치 공유를 지원합니다. 자세한 내용은 Manage EFA devices on Amazon EKS를 참고하세요.
- Neuron DRA driver — Neuron DRA driver는 사용자 정의 스케줄러 확장 없이 토폴로지 인식 스케줄링, 연결된 장치 부분 집합 할당, Logical NeuronCore (LNC) 구성을 통해 AWS Trainium 및 AWS Inferentia2 장치 할당을 관리합니다. 자세한 내용은 Manage Neuron devices on Amazon EKS를 참고하세요.
Amazon EKS용 device plugins
Amazon EKS 클러스터에서 특수 하드웨어 장치를 관리하는 데 흔히 사용되는 device plugins은 다음과 같습니다.
- NVIDIA device plugin — GitHub의 NVIDIA device plugin은 NVIDIA GPU를
nvidia.com/gpu확장 리소스로 광고하고 GPU의 상태를 추적합니다. - EFA device plugin — EFA device plugin은 각 노드의 모든 사용 가능한 EFA 장치를 발견하고 EFA 장치를
vpc.amazonaws.com/efa확장 리소스로 광고합니다. - Neuron device plugin — Neuron device plugin은 Neuron 하드웨어를
aws.amazon.com/neuroncore와aws.amazon.com/neuron확장 리소스로 노출합니다. 각 노드의 사용 가능한 Neuron 장치를 발견하고 할당 가능한 리소스로 광고하며 그 수명 주기를 관리해요.
고려 사항 (Considerations)
Amazon EKS에서 DRA 드라이버를 사용하기 전에 다음 고려 사항을 검토하세요.
- DRA는 Amazon EKS에서 Kubernetes 1.33 이상 버전에서 사용할 수 있지만, GitHub의 업스트림 Kubernetes 문제 때문에 Kubernetes 1.34 이상에서 권장됩니다. 클러스터 컨트롤 플레인과 노드는 DRA를 지원하는 Kubernetes 버전을 실행해야 해요.
- DRA는 현재 EKS Auto Mode와 호환되지 않습니다.
- DRA는 동적 프로비저닝 용량을 사용할 때 Karpenter와 현재 호환되지 않습니다. Karpenter에서 정적 용량 프로비저닝을 사용하거나, EKS 관리형 노드 그룹, 또는 자체 관리 노드를 DRA 드라이버와 함께 사용해야 합니다.
- 같은 장치 유형에 대한 DRA 드라이버와 device plugin은 같은 노드에서 동시에 실행되면 안 됩니다. 해당 DRA 드라이버를 설치하기 전에 device plugin을 제거하거나 별도의 노드에 배포하세요. 같은 노드에서 같은 장치에 대한 DRA 드라이버와 device plugin을 모두 실행하면 기본 하드웨어 장치가 조용히 과다 예약될 수 있어요.
- DRA는 device plugins(
resource.limits,resource.requests)과 다른 Kubernetes API 리소스(ResourceClaim,ResourceClaimTemplate,DeviceClass)를 사용합니다. DRA를 사용해서 워크로드 사양을 변경하지 않고 device plugin 확장 리소스를 관리할 수 있어요. DRA의 확장 리소스에 대한 자세한 내용은 Kubernetes 웹사이트의 Kubernetes 문서를 참고하세요. - NVIDIA, EFA, Neuron용 DRA 드라이버는 EKS 최적화 AL2023 AMI와 Bottlerocket AMI 모두와 호환됩니다. Bottlerocket과 함께 NVIDIA DRA driver를 사용한다면 Bottlerocket NVIDIA 변형에 포함된 NVIDIA device plugin을 비활성화하세요.
- Device plugins은 모든 Kubernetes 버전에서 완전히 지원됩니다.
DRA ResourceClaim vs ResourceClaimTemplate
DRA를 사용할 때는 ResourceClaim 또는 ResourceClaimTemplate 객체를 통해 장치를 요청해요. 이 두 리소스 유형은 서로 다른 목적을 제공하고 서로 다른 수명 주기 동작을 가집니다.
ResourceClaim
ResourceClaim은 어떤 Pod와도 독립적으로 생성하는 명명된 Kubernetes 객체입니다. Pod 사양에서 resourceClaimName 필드로 이름을 참조합니다. ResourceClaim의 특징은 다음과 같습니다.
- 이를 참조하는 Pod가 생성되기 전에 클러스터에 존재해야 합니다. 클레임이 존재하지 않으면 Pod는 pending 상태로 남습니다.
- 어떤 Pod가 이를 참조하든 상관없이 명시적으로 삭제할 때까지 유지됩니다.
- 여러 Pod가 같은
ResourceClaim을 참조할 수 있어 장치 공유를 가능하게 합니다. 같은 클레임을 참조하는 모든 Pod는 같은 할당된 장치에 대한 접근을 공유하고 같은 노드에 스케줄링됩니다.
여러 Pod가 같은 장치에 대한 접근을 공유해야 할 때, 또는 클레임이 단일 Pod의 수명을 넘어 존재해야 할 때 ResourceClaim을 사용하세요.
ResourceClaimTemplate
ResourceClaimTemplate은 Kubernetes가 각 Pod마다 고유한 ResourceClaim을 자동으로 생성하는 데 사용하는 템플릿을 정의합니다. Pod 사양에서 resourceClaimTemplateName 필드로 이를 참조해요. ResourceClaimTemplate 자체는 어떤 Pod에도 바인딩되지 않습니다. 독립적으로 유지되는 재사용 가능한 템플릿이에요. ResourceClaimTemplate의 특징은 다음과 같습니다.
- 템플릿을 참조하는 각 Pod에 대해 Kubernetes가 새로운
ResourceClaim을 만듭니다. 각 Pod는 자신만의 별도 장치 집합을 가져요. - 생성된 각
ResourceClaim은 생성을 트리거한 Pod의 수명 주기에 바인딩됩니다. Pod가 삭제되면 관련 생성된ResourceClaim도 삭제돼요.ResourceClaimTemplate자체는 영향을 받지 않으며 향후 Pod를 위해 새 클레임을 계속 생성합니다.
워크로드의 각 Pod가 비슷한 구성의 자체 전용 장치를 필요로 할 때 ResourceClaimTemplate을 사용하세요. 예를 들어 각 Pod가 자신의 GPU 또는 EFA 장치가 필요한 병렬 실행을 사용하는 Job의 Pod에 ResourceClaimTemplate을 사용할 수 있어요.
다음 표는 ResourceClaim과 ResourceClaimTemplate의 차이를 요약합니다.
| 동작 | ResourceClaim | ResourceClaimTemplate |
|---|---|---|
| 생성 | Pod가 참조하기 전에 수동으로 생성 | Kubernetes가 Pod별로 클레임을 자동 생성 |
| 수명 주기 | 삭제할 때까지 유지 | 템플릿은 삭제할 때까지 유지. 생성된 각 ResourceClaim은 생성을 트리거한 Pod에 바인딩 |
| Pod 간 장치 공유 | 지원. 여러 Pod가 같은 클레임 참조 가능 | 미지원. 각 Pod가 별도 클레임을 가짐 |
| Pod 사양 필드 | resourceClaimName |
resourceClaimTemplateName |
Pod 간에 EFA 장치를 공유하기 위해 ResourceClaim 객체를 사용하는 예시는 Share EFA devices between multiple Pods를 참고하세요. 토폴로지 인식 할당과 함께 ResourceClaimTemplate 객체를 사용하는 예시는 Topology-aware EFA and GPU/Neuron device allocation을 참고하세요.
더 알아보기 (Learn more)
출처: 문서