Google Kubernetes Engine(GKE)에서 GPU의 LLM 워크로드 자동 확장 구성


이 페이지에서는 GKE 수평형 포드 자동 확장 처리(HPA)를 사용하여 Hugging Face의 텍스트 생성 인터페이스(TGI) 제공 프레임워크와 함께 Gemma 대규모 언어 모델(LLM)을 배포하여 자동 확장 인프라를 설정하는 방법을 보여줍니다.

자동 확장을 위한 측정항목 선택에 대한 자세한 내용은 GKE에서 GPU로 LLM 워크로드를 자동 확장하기 위한 권장사항을 참조하세요.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우 gcloud components update를 실행하여 최신 버전을 가져옵니다.

서버 측정항목을 사용하여 자동 확장

TGI 추론 서버에서 내보낸 워크로드별 성능 측정항목을 사용하여 포드의 직접 자동 확장을 수행할 수 있습니다. 이러한 측정항목에 대한 자세한 내용은 서버 측정항목을 참조하세요.

서버 측정항목으로 커스텀 측정항목 자동 확장을 설정하려면 다음 단계를 수행합니다.

  1. TGI 서버에서 Cloud Monitoring으로 측정항목을 내보냅니다. Prometheus 수집기 배포 및 구성을 간소화하는 Google Cloud Managed Service for Prometheus를 사용합니다. Google Cloud Managed Service for Prometheus는 GKE 클러스터에서 기본적으로 사용 설정됩니다. 수동으로 사용 설정할 수도 있습니다.

    다음 예시 매니페스트는 Google Cloud Managed Service for Prometheus가 15초의 반복 간격으로 포드에서 측정항목을 스크래핑하도록 PodMonitoring 리소스 정의를 설정하는 방법을 보여줍니다.

    apiVersion: monitoring.googleapis.com/v1
    kind: PodMonitoring
    metadata:
      name: gemma-pod-monitoring
    spec:
      selector:
        matchLabels:
          app: gemma-server
      endpoints:
      - port: 8000
        interval: 15s
    
  2. 커스텀 측정항목 Stackdriver 어댑터를 설치합니다. 이 어댑터는 Monitoring으로 내보낸 커스텀 측정항목을 HPA 컨트롤러에 표시합니다. 자세한 내용은 Google Cloud Managed Service for Prometheus 문서의 수평형 포드 자동 확장을 참조하세요.

    다음 예시 명령어는 어댑터 설치 방법을 보여줍니다.

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
    
  3. 커스텀 측정항목 기반 HPA 리소스를 설정합니다. 원하는 커스텀 측정항목을 기반으로 하는 HPA 리소스를 배포합니다. 자세한 내용은 Google Cloud Managed Service for Prometheus 문서의 수평형 포드 자동 확장을 참조하세요.

    매니페스트에서 HorizontalPodAutoscaler 리소스를 구성하는 방법의 예시를 보려면 다음 탭 중 하나를 선택합니다.

    큐 크기

    이 예시에서는 큐의 요청 수를 나타내는 tgi_queue_size TGI 서버 측정항목을 사용합니다.

    HPA에 적합한 큐 크기 기준점을 확인하려면 GPU로 LLM 추론 워크로드를 자동 확장하기 위한 권장사항을 참조하세요.

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: gemma-server
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: tgi-gemma-deployment
      minReplicas: 1
      maxReplicas: 5
      metrics:
      - type: Pods
        pods:
          metric:
            name: prometheus.googleapis.com|tgi_queue_size|gauge
          target:
            type: AverageValue
            averageValue:  $HPA_AVERAGEVALUE_TARGET
    

    배치 크기

    이 예시에서는 현재 배치의 요청 수를 나타내는 tgi_batch_size TGI 서버 측정항목을 사용합니다.

    HPA에 적합한 배치 크기 기준점을 확인하려면 GPU로 LLM 추론 워크로드를 자동 확장하기 위한 권장사항을 참조하세요.

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: gemma-server
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: tgi-gemma-deployment
      minReplicas: 1
      maxReplicas: 5
      metrics:
      - type: Pods
        pods:
          metric:
            name: prometheus.googleapis.com|tgi_batch_current_size|gauge
          target:
            type: AverageValue
            averageValue:  $HPA_AVERAGEVALUE_TARGET
    

GPU 측정항목을 사용한 자동 확장

GPU에서 내보낸 사용량 및 성능 측정항목을 사용하여 포드에 대해 직접 자동 확장을 수행할 수 있습니다. 이러한 측정항목에 대한 자세한 내용은 GPU 측정항목을 참조하세요.

GPU 측정항목으로 커스텀 측정항목 자동 확장을 설정하려면 다음 단계를 수행합니다.

  1. GPU 측정항목을 Cloud Monitoring으로 내보냅니다. GKE 클러스터에 시스템 측정항목이 사용 설정된 경우 60초마다 container/accelerator/duty_cycle 시스템 측정항목을 통해 GPU 사용률 측정항목을 Cloud Monitoring으로 자동 전송합니다.

    다음 매니페스트 예시에서는 NVIDIA DCGM 워크로드에서 측정항목을 수집하도록 PodMonitoring 리소스 정의를 설정하는 방법을 보여줍니다.

    apiVersion: monitoring.googleapis.com/v1
    kind: PodMonitoring
    metadata:
      name: nvidia-dcgm-exporter-for-hpa
      namespace: gmp-public
      labels:
        app.kubernetes.io/name: nvidia-dcgm-exporter
        app.kubernetes.io/part-of: google-cloud-managed-prometheus
    spec:
      selector:
        matchLabels:
          app.kubernetes.io/name: nvidia-dcgm-exporter
      endpoints:
        - port: metrics
          interval: 15s
          metricRelabeling:
            - action: keep
              sourceLabels: [__name__]
            - action: replace
              sourceLabels: [__name__]
              targetLabel: __name__
              regex: DCGM_FI_DEV_GPU_UTIL
              replacement: dcgm_fi_dev_gpu_util
    

    코드에서 HPA에서 사용할 DCGM 측정항목 이름을 소문자로 변경해야 합니다. 이는 HPA가 대문자 외부 측정항목 이름으로 작동하지 않는 알려진 문제가 있기 때문입니다.

  2. 커스텀 측정항목 Stackdriver 어댑터를 설치합니다. 이 어댑터는 Monitoring으로 내보낸 커스텀 측정항목을 HPA 컨트롤러에 표시합니다. 자세한 내용은 Google Cloud Managed Service for Prometheus 문서의 수평형 포드 자동 확장을 참조하세요.

    다음 예시 명령어는 이 설치를 실행하는 방법을 보여줍니다.

    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
    
  3. 커스텀 측정항목 기반 HPA 리소스를 설정합니다. 원하는 커스텀 측정항목에 따라 HPA 리소스를 배포합니다. 자세한 내용은 Google Cloud Managed Service for Prometheus 문서의 수평형 포드 자동 확장을 참조하세요.

    • HPA가 자동 확장을 트리거하는 평균 값 목표를 식별합니다. 이 방법은 실험적으로 수행할 수 있습니다. 예를 들어 서버 부하를 늘리고 GPU 사용률이 가장 높은 지점을 관찰하세요. 변동을 줄이기 위해 목표 값에 대해 0.1 작업 없음 범위가 기본값으로 설정되는 HPA 톨러레이션(toleration)에 유의해야 합니다.
    • 테스트에 locust-load-inference 도구를 사용하는 것이 좋습니다. Cloud Monitoring 커스텀 대시보드를 만들어 측정항목 동작을 시각화할 수도 있습니다.

    매니페스트에서 HorizontalPodAutoscaler 리소스를 구성하는 방법의 예시를 보려면 다음 탭 중 하나를 선택합니다.

    가동 주기(GKE 시스템)

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: gemma-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: tgi-gemma-deployment
      minReplicas: 1
      maxReplicas: 5
      metrics:
      - type: External
        external:
          metric:
            name: kubernetes.io|container|accelerator|duty_cycle
            selector:
              matchLabels:
                resource.labels.container_name: inference-server
                resource.labels.namespace_name: default
          target:
            type: AverageValue
            averageValue:  $HPA_AVERAGEVALUE_TARGET
    

    가동 주기(DCGM)

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: gemma-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: tgi-gemma-deployment
      minReplicas: 1
      maxReplicas: 5
      metrics:
      - type: External
        external:
          metric:
            name: prometheus.googleapis.com|dcgm_fi_dev_gpu_util|unknown
            selector:
              matchLabels:
                metric.labels.exported_container: inference-server
                metric.labels.exported_namespace: default
          target:
            type: AverageValue
            averageValue:  $HPA_AVERAGEVALUE_TARGET
    

다음 단계