Google Kubernetes Engine (GKE) 내에서 GPU에서 실행되는 대규모 언어 모델 (LLM) 워크로드의 자동 확장을 구성할 수 있습니다. 자동 확장은 리소스를 자동으로 조정하여 변동하는 수요를 관리하고, 성능을 최적화하며, 운영 비용을 절감합니다. 이 프로세스에는 Gemma LLM 배포와 GKE 수평형 포드 자동 확장 처리 (HPA)를 사용하여 포드를 자동으로 확장하는 작업이 포함됩니다. 또한 배포는 효율적인 추론을 위해 Hugging Face 텍스트 생성 인터페이스 (TGI) 서빙 프레임워크를 통합합니다.
자동 확장을 위한 측정항목 선택에 대한 자세한 내용은 GKE에서 GPU로 LLM 워크로드를 자동 확장하기 위한 권장사항을 참조하세요.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면
설치한 후
초기화합니다.
gcloud CLI를 이전에 gcloud CLI를 설치했으면 최신
버전을
gcloud components update명령어를 실행하여 가져옵니다. 이전 gcloud CLI 버전에서는 이 문서의 명령어를 실행하지 못할 수 있습니다.
- Hugging Face TGI로 GKE에서 GPU를 사용하여 Gemma 개방형 모델 제공의 워크플로를 숙지합니다.
서버 측정항목을 사용한 자동 확장
TGI 추론 서버에서 내보낸 워크로드별 성능 측정항목을 사용하여 포드의 직접 자동 확장을 수행할 수 있습니다. 이러한 측정항목에 대해 자세히 알아보려면 서버 측정항목을 참고하세요.
서버 측정항목으로 커스텀 측정항목 자동 확장을 설정하려면 다음 단계를 수행합니다.
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커스텀 측정항목 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커스텀 측정항목 기반 HPA 리소스를 설정합니다. 선호하는 커스텀 측정항목을 기반으로 하는 HPA 리소스를 배포합니다. 자세한 내용은 Google Cloud Managed Service for Prometheus 문서의 수평형 포드 자동 확장을 참고하세요.
매니페스트에서 HorizontalPodAutoscaler 리소스를 구성하는 방법의 예를 보려면 다음 탭 중 하나를 선택합니다.
큐 크기
이 예에서는 큐의 요청 수를 나타내는
tgi_queue_sizeTGI 서버 측정항목을 사용합니다.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_sizeTGI 서버 측정항목을 사용합니다.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 측정항목으로 커스텀 측정항목 자동 확장을 설정하려면 다음 단계를 수행합니다.
Cloud Monitoring으로 GPU 측정항목을 내보냅니다. GKE 클러스터에 시스템 측정항목 이 사용 설정된 경우 60초마다
container/accelerator/duty_cycle시스템 측정항목을 통해 GPU 사용률 측정항목을 Cloud Monitoring 으로 자동으로 전송합니다.- GKE 시스템 측정항목을 사용 설정하는 방법을 알아보려면 측정항목 수집 구성을 참고하세요.
- 관리형 컬렉션을 설정하려면 Google Cloud Managed Service for Prometheus 문서의 관리형 컬렉션 시작하기를 참조하세요.
- GKE에서 GPU 워크로드 성능을 모니터링하는 추가 기법은 GKE Standard 노드 풀에서 GPU 실행을 참고하세요.
다음 매니페스트 예에서는 PodMonitoring 리소스 정의를 설정하여 NVIDIA DCGM 워크로드에서 측정항목을 수집하는 방법을 보여줍니다.
apiVersion: monitoring.googleapis.com/v1 kind: PodMonitoring metadata: name: nvidia-dcgm-exporter-for-hpa namespace: gke-managed-system labels: app.kubernetes.io/name: nvidia-dcgm-exporter app.kubernetes.io/part-of: google-cloud-managed-prometheus spec: selector: matchLabels: app.kubernetes.io/name: gke-managed-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가 대문자 외부 측정항목 이름과 함께 작동하지 않는 알려진 문제 가 있기 때문입니다. 관리형 DCGM 내보내기 도구를 사용하지 않는 클러스터의 경우 HPA의
metadata.namespace및spec.selector.matchLabels가 DCGM 내보내기 도구의 구성과 동일하게 일치하는지 확인합니다.이 정확한 정렬은 HPA의 성공적인 커스텀 측정항목 검색 및 쿼리에 매우 중요합니다.커스텀 측정항목 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커스텀 측정항목 기반 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
다음 단계
- Cloud Monitoring의 측정항목을 기반으로 포드 자동 확장을 최적화하는 방법을 알아보세요.
- 오픈소스 Kubernetes 문서에서 수평형 포드 자동 확장을 자세히 알아보세요.