이 페이지에서는 Google Kubernetes Engine (GKE)의 동적 리소스 할당 (DRA)에 대한 정보를 제공합니다. 이 페이지에서는 DRA의 기본사항, GKE에서의 작동 방식, DRA를 사용하여 GPU 및 TPU와 같은 하드웨어를 할당할 때의 이점을 알아봅니다.
이 페이지는 다음 역할을 대상으로 합니다.
- 특수 하드웨어 기기로 인프라를 설정하는 복잡성과 오버헤드를 줄이려는 플랫폼 관리자
- AI/ML 또는 고성능 컴퓨팅 (HPC)과 같은 워크로드를 실행하는 앱 운영자 및 데이터 엔지니어
이 페이지를 읽기 전에 다음 리소스를 숙지해야 합니다.
DRA 소개
DRA는 클러스터의 포드와 컨테이너 간에 하드웨어를 유연하게 요청, 할당, 공유할 수 있는 기본 제공 Kubernetes 기능입니다. DRA는 기기 공급업체와 플랫폼 관리자가 요청하고 할당할 수 있는 기기의 클래스를 선언하도록 하여 액셀러레이터와 같은 연결된 하드웨어 할당 환경을 개선합니다. 앱 운영자는 이러한 클래스 내에서 특정 기기 구성을 요청한 다음 워크로드에서 해당 구성을 요청할 수 있습니다. Kubernetes와 GKE는 워크로드 요청에 따라 포드 예약, 노드 할당, 기기 할당을 관리합니다.
예를 들어 플랫폼 관리자는 NVIDIA A100 GPU만 있는 기기 클래스를 정의할 수 있습니다. 그러면 앱 운영자는 GPU 메모리가 최소 80GB인 기기를 필터링하는 등 워크로드 요구사항에 따라 해당 기기 클래스의 기기를 필터링할 수 있습니다. 앱 운영자가 필터링된 구성을 요청하는 워크로드를 배포하면 GKE는 선택된 기준을 충족하는 노드에 포드를 배치합니다. 이 예시에서 GKE는 사용 가능한 A100 (80GB) GPU가 있는 노드를 찾습니다. 앱 운영자는 워크로드 매니페스트에서 특정 노드나 기기 구성을 선택할 필요가 없습니다.
DRA의 이점
DRA가 없으면 Kubernetes에서 하드웨어 기기를 할당하는 것은 기기 플러그인에 의존합니다. 기기 플러그인을 사용하여 하드웨어 리소스를 포드에 연결하려면 노드 라벨을 사용하여 특정 노드에 포드를 배치합니다. 또한 전체 노드의 리소스를 단일 포드에 전용으로 할당하려면 노드에 연결된 정확한 수의 기기를 요청합니다.
DRA를 사용하면 포드에 기기를 할당하는 환경이 스토리지를 위한 볼륨을 할당하는 것과 유사합니다. 기기 클래스를 정의하고, 해당 클래스 내에서 기기를 요청한 다음, 요청된 기기를 워크로드에 할당합니다. DRA는 워크로드 및 비즈니스 요구사항에 따라 기기를 필터링할 수 있는 훨씬 더 확장 가능한 표면을 제공합니다. 표현식과 템플릿을 사용하여 하드웨어를 요청하고 포드를 예약하는 DRA 접근 방식에는 다음과 같은 이점이 있습니다.
- 선언적 기기 할당: 플랫폼 관리자는 특정 유형의 워크로드 또는 팀의 기기 구성을 정의할 수 있습니다.
- 팀 간 복잡성 감소: 플랫폼 관리자가 특수 하드웨어 구성이 있는 노드를 프로비저닝하면 앱 운영자는 특정 구성이 있는 노드를 알 필요가 없습니다. 플랫폼 관리자는 노드에 라벨을 지정하거나 특정 노드 및 기기에 관한 정보를 운영자에게 전달할 필요가 없습니다.
- 개발자 복잡성 감소: Kubernetes는 참조된 기기 구성을 기반으로 포드를 예약합니다. 앱 운영자는 워크로드에서 특정 노드를 선택할 필요가 없으며 각 포드가 해당 노드에 연결된 정확한 수의 기기를 요청하는지 확인할 필요가 없습니다.
- 중앙 집중식 인프라 관리: 플랫폼 관리자는 특정 비즈니스 요구사항을 충족하는 하드웨어 구성을 중앙에서 정의할 수 있습니다. 예를 들어 플랫폼 관리자는 Tesla T4 GPU가 있는 소규모 추론 구성과 함께 H100 GPU가 있는 고성능 구성을 선언할 수 있습니다.
- 유연한 하드웨어 선택: DRA를 사용하면 CEL 표현식을 사용하여 특정 속성이 있는 기기를 필터링할 수 있습니다. 표현식을 사용하면 특정 워크로드에 최적화된 기기를 유연하게 필터링할 수 있습니다.
DRA를 사용해야 하는 경우
미리보기 기간 동안 GKE에서 DRA를 사용하는 주요 이유는 워크로드에 사용할 기기를 요청할 수 있는 유연성 때문입니다. 매니페스트를 한 번 작성하고 매니페스트를 변경하지 않고도 다양한 기기 유형이 있는 여러 클러스터에 워크로드를 배포할 수 있습니다. 이러한 유연성은 다음과 같은 사용 사례에 적합합니다.
- GPU 가용성 개선: GPU 하드웨어에 액세스해야 하는 워크로드의 경우 GPU 모델을 지정하지 않고도 DRA를 사용하여 클러스터에서 사용 가능한 모든 GPU를 요청할 수 있습니다. 이러한 워크로드에 특정 GPU 메모리 (VRAM) 요구사항이 있는 경우 최소 메모리 양이 있는 클러스터의 GPU를 요청할 수 있습니다. 이러한 유연한 요청은 워크로드가 실행될 수 있는 GPU 노드 집합을 확장하므로 리소스를 사용할 수 없어 워크로드가 예약되지 않을 위험을 줄입니다.
- 확장 중에 GPU 노드 가용성 최적화: 워크로드에 필요한 연결된 GPU 수는 GPU 유형에 따라 달라질 수 있습니다. GKE 컴퓨팅 클래스를 사용하여 GPU 가용성, 할당량 또는 용량 예약을 기반으로 노드를 프로비저닝할 수 있습니다. 그런 다음 워크로드에서 DRA를 사용하여 컴퓨팅 클래스를 위해 GKE에서 프로비저닝하는 모든 노드에서 실행되도록 포드를 구성할 수 있습니다. 컴퓨팅 클래스와 함께 DRA를 사용하면 최적화된 하드웨어에서 워크로드를 실행하면서 예약되지 않은 워크로드의 위험을 최소화할 수 있습니다.
용어
오픈소스 Kubernetes 및 GKE와 같은 관리형 Kubernetes 제공업체는 다음 DRA 용어를 사용합니다.
- ResourceSlice
- ResourceSlice는 노드가 액세스할 수 있는 클러스터의 하나 이상의 하드웨어 기기를 나열합니다. 예를 들어 단일 GPU에 액세스할 수 있는 노드에서 ResourceSlice는 GPU와 노드 이름을 나열합니다. 각 노드의 DRA 기기 드라이버는 ResourceSlice를 만듭니다. Kubernetes 스케줄러는 ResourceSlice를 사용하여 워크로드 요청을 충족하기 위해 할당할 기기를 결정합니다.
- DeviceClass
-
DeviceClass는 워크로드에 요청할 수 있는 기기 카테고리(예: GPU)를 정의합니다.
일부 기기 드라이버는 NVIDIA GPU용
gpu.nvidia.com
DeviceClass와 같은 내장 DeviceClass를 제공합니다. 플랫폼 관리자는 특정 기기 구성을 정의하는 맞춤 DeviceClass를 만들 수도 있습니다. - ResourceClaim
-
ResourceClaim을 사용하면 포드 또는 사용자가 DeviceClass 내에서 특정 매개변수를 필터링하여 하드웨어 리소스를 요청할 수 있습니다. 워크로드가 ResourceClaim을 참조하면 Kubernetes는 지정된 매개변수와 일치하는 기기를 해당 ResourceClaim에 할당합니다.
예를 들어 A100 (40GB) GPU 하나에 대한 ResourceClaim을 만든 다음 해당 ResourceClaim을 선택하는 워크로드를 배포하는 시나리오를 생각해 보세요. Kubernetes는 사용 가능한 A100 (40GB) GPU를 ResourceClaim에 할당하고 해당 GPU에 액세스할 수 있는 노드에 Pod를 예약합니다.
- ResourceClaimTemplate
-
ResourceClaimTemplate은 포드가 새 포드별 ResourceClaim을 자동으로 만드는 데 사용할 수 있는 템플릿을 정의합니다. ResourceClaimTemplates는 유사한 기기 구성에 액세스해야 하는 워크로드가 여러 개 있는 경우, 특히 배포 또는 StatefulSet과 같은 워크로드 컨트롤러를 사용하는 경우에 유용합니다.
앱 운영자는 ResourceClaimTemplate을 배포한 후 워크로드에서 템플릿을 참조합니다. Kubernetes는 지정된 템플릿을 기반으로 각 포드의 ResourceClaim을 만들고, 기기를 할당하고, 포드를 예약합니다. 포드가 종료되면 Kubernetes는 해당 ResourceClaim을 정리합니다.
DRA 작동 방식
클러스터와 워크로드에서 DRA를 사용하는 것은 StorageClass, PersistentVolumeClaim, PersistentVolume을 사용하여 포드의 볼륨을 동적으로 프로비저닝하는 것과 유사합니다.
다음 다이어그램은 클러스터 관리자와 앱 운영자가 DRA를 사용하여 기기를 할당하는 단계를 보여줍니다.
이 다이어그램에서 클러스터 관리자와 앱 운영자는 다음을 수행합니다.
- 클러스터 관리자는 노드에 DRA를 지원하는 기기 드라이버를 설치합니다.
- 클러스터 관리자는 메모리가 40GB를 초과하는 모든 GPU와 같은 특정 요구사항을 충족하는 하드웨어를 필터링하는 DeviceClass를 만듭니다. 일부 기기에는 기본 DeviceClass가 포함될 수도 있습니다.
- 애플리케이션 운영자는 기기 구성을 요청하는 ResourceClaimTemplates 또는 ResourceClaims를 만듭니다. 각 클레임 유형의 기본 사용 사례는 다음과 같습니다.
- ResourceClaim을 사용하면 여러 포드가 동일한 기기에 대한 액세스 권한을 공유할 수 있습니다.
- ResourceClaimTemplate을 사용하면 포드별 ResourceClaim을 자동으로 생성하여 여러 포드가 별도의 유사한 기기에 액세스할 수 있습니다.
- 애플리케이션 운영자는 워크로드 매니페스트에 ResourceClaimTemplates 또는 ResourceClaims를 추가합니다.
- 애플리케이션 운영자가 워크로드를 배포합니다.
ResourceClaimTemplate 또는 ResourceClaim을 참조하는 워크로드를 배포하면 Kubernetes는 다음 예약 단계를 실행합니다.
- 워크로드가 ResourceClaimTemplate을 참조하는 경우 Kubernetes는 워크로드의 모든 인스턴스 (예: Deployment의 모든 복제본)에 대해 새
ResourceClaim
객체를 만듭니다. - Kubernetes 스케줄러는 클러스터의 ResourceSlice를 사용하여 각 포드의 ResourceClaim에 사용 가능한 적격 기기를 할당합니다.
- 스케줄러는 포드의 ResourceClaim에 할당된 기기에 액세스할 수 있는 노드에 각 포드를 배치합니다.
- 대상 노드의 kubelet은 할당된 하드웨어를 포드에 연결하여 리소스 요청을 충족하도록 온노드 DRA 드라이버를 호출합니다.
ResourceClaim 및 ResourceClaimTemplate을 사용해야 하는 경우
ResourceClaim과 ResourceClaimTemplate을 사용하면 특정 요구사항을 충족하는 기기를 원한다고 Kubernetes에 표시할 수 있습니다. ResourceClaim이 Pod에서 참조되면 Kubernetes는 Kubernetes API 서버의 해당 ResourceClaim
API 리소스에 기기를 할당합니다. 이 할당은 ResourceClaim을 만들었는지 아니면 Kubernetes가 ResourceClaimTemplate에서 ResourceClaim을 만들었는지와 관계없이 발생합니다.
ResourceClaim을 만든 다음 여러 포드에서 이를 참조하면 해당 ResourceClaim에 Kubernetes가 할당한 기기에 모든 포드가 액세스할 수 있습니다. 예를 들어 복제본이 여러 개인 Deployment 매니페스트에서 특정 ResourceClaim을 참조하는 경우 이러한 공유 액세스가 발생할 수 있습니다. 하지만 할당된 기기가 여러 프로세스에서 공유되도록 구성되지 않은 경우 포드 간의 이 공유 기기 액세스로 인해 의도하지 않은 동작이 발생할 수 있습니다.
ResourceClaimTemplate을 사용하면 Kubernetes가 Pod의 개별 ResourceClaim을 자동으로 만드는 데 사용하는 템플릿을 정의할 수 있습니다. 예를 들어 복제본이 여러 개인 Deployment에서 ResourceClaimTemplate을 참조하는 경우 Kubernetes는 복제된 각 포드에 대해 별도의 ResourceClaim을 만듭니다. 따라서 각 포드는 다른 포드와 기기에 대한 액세스를 공유하는 대신 자체 할당된 기기를 가져옵니다. 이러한 자동 생성된 ResourceClaim은 해당 포드의 수명에 바인딩되며 포드가 종료되면 삭제됩니다. 유사한 기기 구성에 액세스해야 하는 독립적인 포드가 있는 경우 ResourceClaimTemplate을 사용하여 각 포드에 기기를 별도로 할당합니다.
다음 표에서는 ResourceClaim을 수동으로 만드는 것과 Kubernetes가 ResourceClaimTemplate에서 ResourceClaim을 만들도록 하는 것의 차이점을 설명합니다.
수동으로 생성된 ResourceClaim | 자동으로 생성된 ResourceClaim |
---|---|
내가 관리 중인 계획 | Kubernetes에서 관리 |
여러 포드에서 동일한 기기에 대한 액세스 제공 | 단일 포드에서 기기에 대한 액세스 제공 |
포드와 독립적으로 클러스터에 존재 | 해당 포드의 수명 주기에 바인딩됨 |
특정 기기를 공유해야 하는 여러 워크로드에 적합 | 독립적인 기기 액세스가 필요한 여러 워크로드에 적합 |
수동 기기 할당을 사용한 DRA 비교
DRA를 사용하면 연결된 기기를 할당하는 환경이 PersistentVolume을 동적으로 프로비저닝하는 것과 유사해집니다. Kubernetes는 기기 플러그인을 사용하여 기기 할당도 지원합니다. 이 방법은 다음 단계를 포함합니다.
- 클러스터 관리자는 GPU와 같은 연결된 기기가 있는 노드를 만듭니다.
- 클러스터 관리자는 특정 노드와 연결된 기기에 관한 정보를 워크로드 운영자에게 전달합니다.
- 워크로드 운영자는 다음과 같이 워크로드 매니페스트에서 기기를 요청합니다.
nodeSelector
필드를 사용하여 GPU 모델 또는 TPU 유형 및 토폴로지와 같은 필수 기기 구성이 있는 노드를 선택합니다.- 포드 사양의
resources
필드를 사용하여 컨테이너가 사용할 정확한 기기 수를 지정합니다.
이 수동 할당 방법에서는 애플리케이션 운영자와 클러스터 관리자가 특정 노드 또는 노드 풀에 특정 기기 구성이 있는지에 관해 소통해야 합니다. 노드의 기기와 일치하도록 워크로드 요청을 조정해야 합니다. 그렇지 않으면 배포가 실패합니다. 반면 DRA를 사용하면 표현식을 사용하여 속성을 기반으로 기기를 유연하게 필터링할 수 있으며 워크로드 운영자가 클러스터의 노드 구성을 정확하게 알지 않아도 됩니다.
다음 표에서는 DRA와 기기 플러그인을 비교합니다.
DRA | 수동 할당 |
---|---|
CEL 표현식을 사용한 유연한 기기 선택 | 선택기 및 리소스 요청을 사용한 특정 노드 선택 |
Kubernetes에서 내린 일정 결정 | 노드 선택기를 사용하여 운영자가 내린 스케줄링 결정 |
기기 필터링은 워크로드 생성과 별개임 | 기기 필터링은 워크로드 매니페스트에서 실행해야 합니다. |
플랫폼 관리자가 관리하는 중앙 집중식 기기 필터링 및 필요 기반 클래스 | 애플리케이션 운영자에 의한 격리된 기기 필터링 |
앱 운영자는 노드 용량, 노드 라벨 정보 또는 각 노드에 연결된 기기 모델을 알 필요가 없습니다. | 앱 운영자는 특정 기기가 연결된 노드의 모델과 수량을 알아야 합니다. |
DRA에 지원되는 GKE 기기
DRA를 사용하여 GPU 또는 TPU를 GKE 워크로드에 할당할 수 있습니다. GKE에서 지원하는 GPU 및 TPU 모델을 할당할 수 있습니다. GKE에서 지원하는 GPU 및 TPU에 대한 자세한 내용은 다음 리소스를 참고하세요.
GKE의 DRA 제한사항
GKE 클러스터에서 DRA에는 다음과 같은 제한사항이 있습니다.
- 노드 자동 프로비저닝에는 DRA를 사용할 수 없습니다.
- 다음 GPU 공유 기능으로는 DRA를 사용할 수 없습니다.
- 시간 공유 GPU
- 멀티 인스턴스 GPU
- 다중 프로세스 서비스 (MPS)
- Autopilot 클러스터에서는 DRA를 사용할 수 없습니다.
- GKE 버전 1.32.1-gke.1489001 이상을 사용해야 합니다.
DRA 이해 및 사용에 권장되는 기술
이 섹션에서는 DRA를 사용하여 워크로드에 기기를 할당하려는 플랫폼 관리자 또는 앱 운영자를 위한 권장사항을 제공합니다. DRA는 GKE와 Kubernetes 모두에서 연결된 기기를 요청하는 방식을 크게 변경합니다. 교차 기기 대체 또는 세부적인 기기 필터링 및 선택과 같은 고급 사용 사례를 활용하려면 다음 안내를 참고하세요.
- CEL 학습: DRA를 사용하면 CEL 표현식을 사용하여 리소스 할당 요청 및 DeviceClasses에서 세부적인 기기 필터링을 실행할 수 있습니다. 다음 리소스를 통해 CEL을 학습할 수 있습니다.
- GKE의 ComputeClasses 알아보기: ComputeClasses를 사용하면 클러스터를 확장할 때 GKE가 사용할 우선순위 기반 대체 노드 구성을 정의할 수 있습니다. ComputeClasses를 DRA와 함께 사용하여 비용 효율적인 GPU를 요청하는 추론 워크로드를 실행하기 위해 스팟 VM을 프로비저닝하는 등의 비즈니스 요구사항을 충족할 수 있습니다. 다음 리소스를 통해 ComputeClass에 대해 자세히 알아볼 수 있습니다.
확장 중 노드 가용성 개선
GKE의 ComputeClasses를 사용하면 클러스터에서 새 노드를 만들 때 GKE가 따르는 우선순위 기반 대체 동작을 정의할 수 있습니다. ComputeClasses를 사용하여 워크로드를 실행하는 노드를 만들 때 GKE가 사용하는 우선순위가 지정된 노드 및 기기 구성 시리즈를 구성할 수 있습니다. 그런 다음 DRA를 사용하여 라벨별로 노드를 수동으로 선택하지 않고도 ComputeClass 내의 모든 노드에서 워크로드를 실행할 수 있습니다.
예를 들어 워크로드가 최적으로 실행되려면 NVIDIA L4 GPU 2개 또는 NVIDIA A100(40GB) GPU 1개가 필요할 수 있습니다. A100 (40GB) GPU가 하나 있는 노드 생성을 우선시하지만 노드당 L4 GPU가 두 개 있는 노드 생성으로 대체할 수 있는 ComputeClass를 만들 수 있습니다. 그런 다음 DRA를 사용하여 워크로드에 사용 가능한 GPU를 요청할 수 있습니다. 워크로드를 배포하고 해당 ComputeClass를 선택하면 GKE는 지정된 GPU 구성 중 하나가 있는 노드를 만듭니다. DRA를 사용하면 GKE는 GPU 모델, 노드 라벨, GPU 수와 관계없이 사용 가능한 첫 번째 노드에 워크로드를 배치할 수 있습니다.
자세한 내용은 다음 페이지를 참조하세요.