GKE의 ���적 리소스 할당 정보


이 페이지에서는 Google Kubernetes Engine (GKE)의 동적 리소스 할당 (DRA)에 대한 정보를 제공합니다. 이 페이지에서는 DRA의 기본사항, GKE에서의 작동 방식, DRA를 사용하여 GPU 및 TPU와 같은 하드웨어를 할당하는 이점에 대해 알아봅니다.

이 페이지는 다음 역할을 대상으로 합니다.

이 페이지를 읽기 전에 다음 리소스를 숙지해야 합니다.

DRA 소개

DRA는 클러스터의 하드웨어를 포드와 컨테이너 간에 유연하게 요청, 할당, 공유할 수 있는 기본 제공 Kubernetes 기능입니다. DRA는 기기 공급업체와 플랫폼 관리자가 요청하고 할당할 수 있는 기기의 클래스를 선언할 수 있도록 하여 액셀러레이터와 같은 연결된 하드웨어를 할당하는 환경을 개선합니다. 앱 운영자는 이러한 클래스 내에서 특정 기기 구성을 요청한 후 워크로드에서 이러한 구성을 요청할 수 있습니다. Kubernetes 및 GKE는 워크로드 요청에 따라 Pod 예약, 노드 할당, 기기 할당을 관리합니다.

예를 들어 플랫폼 관리자는 NVIDIA A100 GPU만 있는 기기 클래스를 정의할 수 있습니다. 그러면 앱 운영자는 최소 80GB의 GPU 메모리 필터링과 같은 워크로드 요구사항에 따라 해당 기기 클래스의 기기를 필터링할 수 있습니다. 앱 운영자가 필터링된 구성을 요청하는 워크로드를 배포하면 GKE는 선택한 기준을 충족하는 노드에 포드를 배치합니다. 이 예에서 GKE는 사용 가능한 A100 (80GB) GPU가 있는 노드를 찾습니다. 앱 운영자는 워크로드 매니페스트에서 특정 노드나 기기 구성을 선택할 필요가 없습니다.

DRA의 이점

DRA가 없으면 Kubernetes에서 하드웨어 기기를 할당하는 데 기기 플러그인이 사용됩니다. 기기 플러그인을 사용하여 포드에 하드웨어 리소스를 연결하려면 노드 라벨을 사용하여 특정 노드에 포드를 배치합니다. 또한 전체 노드의 리소스를 단일 포드에 할당하려면 노드에 연결된 정확한 기기 수를 요청합니다.

DRA를 사용하면 Pod에 기기를 할당하는 환경이 스토리지에 볼륨을 할당하는 것과 유사합니다. 기기 클래스를 정의하고 해당 클래스 내에서 기기를 요청한 후 요청된 기기를 워크로드에 할당합니다. DRA는 워크로드 및 비즈니스 요구사항에 따라 기기를 필터링할 수 있는 훨씬 더 확장 가능한 노출 영역을 제공합니다. 표현식과 템플릿을 사용하여 하드웨어를 소��하고 포드를 예약하는 DRA 접근 방식에는 다음과 같은 이점이 있습니다.

  • 선언적 기기 할당: 플랫폼 관리자는 특정 유형의 워크로드 또는 팀에 대한 기기 구성을 정의할 수 있습니다.
  • 교차팀 복잡성 감소: 플랫폼 관리자가 특수 하드웨어 구성이 있는 노드를 프로비저닝하는 경우 앱 운영자는 특정 구성이 있는 노드를 알 필요가 없습니다. 플랫폼 관리자는 노드에 라벨을 지정하거나 특정 노드 및 기기에 관한 정보를 운영자에게 전달할 필요가 없습니다.
  • 개발자 복잡성 감소: Kubernetes는 참조된 기기 구성을 기반으로 포드를 예약합니다. 앱 운영자는 워크로드에서 특정 노드를 선택할 필요가 없으며 각 포드가 해당 노드에 연결된 기기 수를 정확하게 요청하도록 할 필요가 없습니다.
  • 중앙 집중식 인프라 관리: 플랫폼 관리자는 특정 비즈니스 요구사항을 충족하는 하드웨어 구성을 중앙에서 정의할 수 있습니다. 예를 들어 플랫폼 관리자는 Tesla T4 GPU가 있는 소규모 추론 구성과 함께 H100 GPU가 있는 고성능 구성을 선언할 수 있습니다.
  • 유연한 하드웨어 선택: DRA를 사용하면 CEL 표현식을 사용하여 특정 속성이 있는 기기를 필터링할 수 있습니다. 표현식을 사용하면 특정 워크로드에 최적화된 기기를 유연하게 필터링할 수 있습니다.

DRA를 사용해야 하는 경우

미리보기 기간 동안 GKE에서 DRA를 사용하는 주된 이유는 워크로드에 기기를 요청할 수 있는 유연성 때문입니다. 매니페스트를 한 번 작성하고 매니페스트를 변경하지 않고도 기기 유형이 다른 여러 클러스터에 워크로드를 배포할 수 있습니다. 이러한 유연성은 다음과 같은 사용 사례에 적합합니다.

  • GPU 가용성 개선: GPU 하드웨어에 액세스해야 하는 워크로드의 경우 DRA를 사용하여 GPU 모델을 지정할 필요 없이 클러스터에서 사용 가능한 모든 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 스케줄러는 ResourceSlices를 사용��여 워크로드 요청을 충족하기 위해 할당할 기기를 결정합니다.
DeviceClass
DeviceClass는 워크로드를 요청하는 데 사용할 수 있는 기기 카테고리(예: GPU)를 정의합니다. 일부 기기 드라이버는 NVIDIA GPU의 gpu.nvidia.com DeviceClass와 같은 내장 DeviceClass를 제공합니다. 플랫폼 관리자는 특정 기기 구성을 정의하는 맞춤 DeviceClass를 만들 수도 있습니다.
ResourceClaim

ResourceClaim을 사용하면 포드나 사용자가 DeviceClass 내에서 특정 매개변수를 필터링하여 하드웨어 리소스를 요청할 수 있습니다. 워크로드가 ResourceClaim을 참조하면 Kubernetes는 지정된 매개변수와 일치하는 기기를 해당 ResourceClaim에 할당합니다.

예를 들어 A100 (40GB) GPU 1개에 대한 ResourceClaim을 만든 후 이 ResourceClaim을 선택하는 워크로드를 배포하는 시나리오를 생각해 보겠습니다. Kubernetes는 사용 가능한 A100 (40GB) GPU를 ResourceClaim에 할당하고 해당 GPU에 액세스할 수 있는 노드에 Pod를 예약합니다.

ResourceClaimTemplate

ResourceClaimTemplate은 포드가 새 포드별 ResourceClaim을 자동으로 만드는 데 사용할 수 있는 템플릿을 정의합니다. ResourceClaimTemplates는 유사한 기기 구성에 액세스해야 하는 여러 워크로드가 있는 경우, 특히 배포 또는 StatefulSet과 같은 워크로드 컨트롤러를 사용하는 경우에 유용합니다.

앱 운영자는 ResourceClaimTemplates를 배포한 후 워크로드에서 템플릿을 참조합니다. Kubernetes는 지정된 템플릿을 기반으로 각 포드의 ResourceClaims를 만들고, 기기를 할당하고, 포드를 예약합니다. 포드가 종료되면 Kubernetes에서 상응하는 ResourceClaims를 삭제합니다.

DRA 작동 방식

클러스터 및 워크로드에서 DRA를 사용하는 것은 StorageClasses, PersistentVolumeClaims, PersistentVolume을 사용하여 포드의 볼륨을 동적으로 프로비저닝하는 것과 유사합니다.

다음 다이어그램은 클러스터 관리자와 앱 운영자가 DRA를 사용하여 기기를 할당하는 단계를 보여줍니다.

이 다이어그램에서 클러스터 관리자와 앱 운영자는 다음을 실행합니다.

  1. 클러스터 관리자는 노드에 DRA를 지원하는 기기 드라이버를 설치합니다.
  2. 클러스터 관리자는 메모리가 40GB를 초과하는 모든 GPU와 같이 특정 요구사항을 충족하는 하드웨어를 필터링하는 DeviceClass를 만듭니다. 일부 기기에는 내장된 DeviceClasses도 포함되어 있을 수 있습니다.
  3. 애플리케이션 운영자는 기기 구성을 요청하는 ResourceClaimTemplates 또는 ResourceClaims를 만듭니다. 각 소유권 주장 유형의 기본 사용 사례는 다음과 같습니다.
    • ResourceClaim을 사용하면 여러 포드가 동일한 기기에 대한 액세스 권한을 공유할 수 있습니다.
    • ResourceClaimTemplate를 사용하면 여러 포드가 포드별 ResourceClaim을 자동으로 생성하여 별도의 유사한 기기에 액세스할 수 있습니다.
  4. 애플리케이션 운영자는 워크로드 매니페스트에 ResourceClaimTemplates 또는 ResourceClaims를 추가합니다.
  5. 애플리케이션 운영자가 워크로드를 배포합니다.

ResourceClaimTemplate 또는 ResourceClaim을 참조하는 워크로드를 배포하면 Kubernetes에서 다음과 같은 예약 단계를 실행합니다.

  1. 워크로드가 ResourceClaimTemplate을 참조하는 경우 Kubernetes는 워크로드의 모든 인스턴스 (예: 배포의 모든 복제본)에 대해 새 ResourceClaim 객체를 만듭니다.
  2. Kubernetes 스케줄러는 클러스터의 ResourceSlices를 사용하여 사용 가능하고 요건을 충족하는 기기를 각 Pod의 ResourceClaim에 할당합니다.
  3. 스케줄러는 포드의 ResourceClaim에 할당된 기기에 액세스할 수 있는 노드에 각 포드를 배치합니다.
  4. 대상 노드의 kubelet은 노드 내 DRA 드라이버를 호출하여 할당된 하드웨어를 포드에 연결하여 리소스 요청을 충족합니다.

ResourceClaims 및 ResourceClaimTemplates를 사용해야 하는 경우

ResourceClaims와 ResourceClaimTemplates를 모두 사용하면 Kubernetes에 특정 요구사항을 충족하는 기기를 원한다고 나타낼 수 있습니다. ResourceClaim이 Pod에서 참조되면 Kubernetes는 Kubernetes API 서버의 상응하는 ResourceClaim API 리소스에 기기를 할당합니다. 이 할당은 ResourceClaim을 내가 만들었는지 또는 Kubernetes가 ResourceClaimTemplate에서 ResourceClaim을 만들었는지와 관계없이 발생합니다.

ResourceClaim을 만든 다음 여러 포드에서 참조하면 이러한 모든 포드는 Kubernetes가 해당 ResourceClaim에 할당한 기기에 액세스할 수 있습니다. 예를 들어 복제본이 여러 개인 배포 매니페스트에서 특정 ResourceClaim을 참조하는 경우 이러한 공유 액세스가 발생할 수 있습니다. 그러나 할당된 기기가 여러 프로세스에서 공유되도록 구성되지 않은 경우 포드 간의 공유 기기 액세스로 인해 의도치 않은 동작이 발생할 수 있습니다.

ResourceClaimTemplate를 사용하면 Kubernetes에서 포드의 개별 ResourceClaim을 자동으로 만드는 데 사용하는 템플릿을 정의할 수 있습니다. 예를 들어 복제본이 여러 개인 배포에서 ResourceClaimTemplate을 참조하면 Kubernetes는 복제된 각 포드에 대해 별도의 ResourceClaim을 만듭니다. 따라서 각 Pod는 기기에 대한 액세스 권한을 다른 Pod와 공유하는 대신 자체 할당된 기기를 갖게 됩니다. 이러한 자동 생성된 ResourceClaims는 해당 포드의 전체 기간에 바인딩되며 포드가 종료되면 삭제됩니다. 유사한 기기 구성에 액세스해야 하는 독립형 포드가 있는 경우 ResourceClaimTemplate을 사용하여 각 포드에 기기를 별도로 할당합니다.

다음 표에서는 ResourceClaims를 수동으로 만드는 것과 Kubernetes가 ResourceClaimTemplate에서 ResourceClaims를 만드는 것의 차이점을 설명합니다.

수동으로 생성된 ResourceClaims 자동으로 생성된 ResourceClaims
내가 관리 중인 계획 Kubernetes에서 관리
여러 포드에서 동일한 기기에 액세스할 수 있도록 지원 단일 포드에서 기기에 대한 액세스를 제공합니다.
포드와는 별개로 클러스터에 존재합니다. 해당 포드의 수명 주기에 바인딩됨
특정 기기를 공유해야 하는 여러 워크로드에 적합 독립적인 기기 액세스가 필요한 여러 워크로드에 적합

DRA와 수동 기기 할당 비교

DRA를 사용하면 연결된 기기를 할당하는 환경이 PersistentVolume을 동적으로 프로비저닝하는 환경과 유사해집니다. Kubernetes는 기기 플러그인을 사용하여 기기 할당도 지원합니다. 이 방법은 다음 단계를 포함합니다.

  1. 클러스터 관리자가 GPU와 같은 연결된 기기가 있는 노드를 만듭니다.
  2. 클러스터 관리자는 특정 노드 및 연결된 기기에 관한 정보를 워크로드 운영자에게 전달합니다.
  3. 워크로드 운영자는 다음과 같이 워크로드 매니페스트에서 기기를 요청합니다.
    • nodeSelector 필드를 사용하여 GPU 모델 또는 TPU 유형 및 토폴로지와 같은 필요한 기기 구성이 있는 노드를 선택합니다.
    • 포드 사양의 resources 필드를 사용하여 컨테이너가 사용할 정확한 기기 수를 지정합니다.

이 수동 할당 방법을 사용하려면 애플리케이션 운영자와 클러스터 관리자가 특정 기기 구성이 있는 특정 노드 또는 노드 풀에 관해 통신해야 합니다. 노드의 기기에 맞게 워크로드 요청을 조정해야 하며 그러지 않으면 배포가 실패합니다. 반면 DRA를 사용하면 표현식을 사용하여 속성을 기반으로 기기를 유연하게 필터링할 수 있으며 워크로드 운영자가 클러스터의 노드 구성을 정확하게 알 필요가 없습니다.

다음 표에서는 DRA와 기기 플러그인을 비교합니다.

DRA 수동 할당
CEL 표현식을 사용한 유연한 기기 선택 선택기 및 리소스 요청을 사용한 특정 노드 선택
Kubernetes에서 내린 예약 결정 노드 선택기를 사용하여 운영자가 내린 예약 결정
기기 필터링은 워크로드 생성과 별개입니다. 기기 필터링은 워크로드 매니페스트에서 실행해야 합니다.
플랫폼 관리자가 관리하는 중앙 집중식 기기 필터링 및 필요 기반 클래스 애플리케이션 운영자에 의한 격리된 기기 필터링
앱 운영자는 노드 용량, 노드 라벨 정보 또는 각 노드의 연결된 기기 모델을 알 필요가 없습니다. 앱 운영자는 특정 모델과 특정 기기의 수량이 연결된 노드를 알아야 합니다.

DRA에 지원되는 GKE 기기

DRA를 사용하여 GKE 워크로드에 GPU 또는 TPU를 할당할 수 있습니다. GKE에서 지원하는 GPU 및 TPU 모델을 할당할 수 있습니다. GKE에서 지원하는 GPU 및 TPU에 관한 자세한 내용은 다음 리소스를 참고하세요.

GKE의 DRA 제한사항

DRA는 GKE 클러스터에서 다음과 같은 제한사항이 있습니다.

  • 노드 자동 프로비저닝에서는 DRA를 사용할 수 없습니다.
  • 다음 GPU 공유 기능으로는 DRA를 사용할 수 없습니다.
    • 시간 공유 GPU
    • 멀티 인스턴스 GPU
    • 멀티프로세스 서비스 (MPS)
  • Autopilot 클러스터에서는 DRA를 사용할 수 없습니다.
  • GKE 버전 1.32.1-gke.1489001 이상을 사용해야 합니다.

이 섹션에서는 DRA를 사용하여 기기를 워크로드에 할당하려는 플랫폼 관리자 또는 앱 운영자를 위한 권장사항을 제공합니다. DRA는 GKE와 Kubernetes 모두에서 연결된 기기를 요청하는 방법을 크게 변경합니다. 교차 기기 대체 또는 세분화된 기기 필터링 및 선택과 같은 고급 사용 사례의 이점을 누리려면 다음 안내를 고려하세요.

  • CEL 알아보기: DRA를 사용하면 CEL 표현식을 사용하여 리소스 할당 요청 및 DeviceClasses에서 세분화된 기기 필터링을 실행할 수 있습니다. 다음 리소스를 통해 CEL을 학습할 수 있습니다.
  • GKE의 ComputeClasses 알아보기: ComputeClasses를 사용��면 GKE가 클러스터를 확장할 때 사용할 우선순위 기반 대체 노드 구성을 정의할 수 있습니다. DRA와 함께 ComputeClasses를 사용하여 비용 효율적인 GPU를 요청하는 추론 워크로드를 실행하기 위해 스팟 VM을 프로비저닝하는 등의 비즈니스 요구사항을 충족할 수 있습니다. 다음 ���소스를 통해 ComputeClasses에 대해 알아보세요.

확장 중 노드 가용성 개선

GKE의 ComputeClasses를 사용하면 GKE가 클러스터에 새 노드를 만들 때 따르는 우선순위 기반 대체 동작을 정의할 수 있습니다. ComputeClasses를 사용하여 GKE가 워크로드를 실행하는 노드를 만들 때 사용하는 우선순위가 지정된 일련의 노드 및 기기 구성을 구성할 수 있습니다. 그런 다음 DRA를 사용하여 라벨별로 노드를 수동으로 선택하지 않고도 ComputeClass 내의 모든 노드에서 워크로드를 실행할 수 있습니다.

예를 들어 워크로드를 최적으로 실행하려면 NVIDIA L4 GPU 2개 또는 NVIDIA A100(40GB) GPU 1개가 필요할 수 있습니다. A100 (40GB) GPU 1개가 있는 노드 만들기를 우선하지만 노드당 L4 GPU 2개가 있는 노드 만들기로 대체할 수 있는 ComputeClass를 만들 수 있습니다. 그런 다음 DRA를 사용하여 워크로드에 사용 가능한 GPU를 요청할 수 있습니다. 워크로드를 배포하고 해당 ComputeClass를 선택하면 GKE는 지정된 GPU 구성 중 하나가 있는 노드를 만듭니다. DRA를 사용하면 GKE는 GPU 모델, 노드 라벨 또는 GPU 수와 관계없이 사용 가능한 첫 번째 노드에 워크로드를 배치할 수 있습니다.

자세한 내용은 다음 페이지를 참조하세요.

다음 단계