このページでは、GKE HorizontalPodAutoscaler(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 推論サーバーから出力されるワークロード固有のパフォーマンス指標を使用して、Pod の自動スケーリングを直接制御できます。これらの指標の詳細については、サーバー指標をご覧ください。
サーバー指標を使用してカスタム指標の自動スケーリングを設定する手順は次のとおりです。
TGI サーバーから Cloud Monitoring に指標をエクスポートします。Google Cloud Managed Service for Prometheus を使用すると、Prometheus コレクタのデプロイと構成が簡素化されます。Google Cloud Managed Service for Prometheus は、GKE クラスタでデフォルトで有効になっています。手動で有効にすることもできます。
次のマニフェストの例は、Google Cloud Managed Service for Prometheus に Pod から 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 ドキュメントの水平 Pod 自動スケーリングをご覧ください。
次のコマンド例は、アダプタをインストールする方法を示しています。
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 ドキュメントの水平 Pod 自動スケーリングをご覧ください。
次のいずれかのタブを選択して、マニフェストで 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 から出力された使用率とパフォーマンスの指標を使用して、Pod の自動スケーリングを制御できます。これらの指標の詳細については、GPU の指標をご覧ください。
GPU 指標を使用してカスタム指標の自動スケーリングを設定するには、次の操作を行います。
GPU 指標を Cloud Monitoring にエクスポートします。GKE クラスタでシステム指標が有効になっている場合、GPU 使用率の指標は 60 秒ごとに
container/accelerator/duty_cycle
システム指標を介して Cloud Monitoring に自動的に送信されます。- GKE システム指標を有効にする方法については、指標の収集を構成するをご覧ください。
- マネージド コレクションを設定するには、Google Cloud Managed Service for Prometheus ドキュメントのマネージド コレクションを使ってみるをご覧ください。
- GKE で GPU ワークロードのパフォーマンスをモニタリングするその他の方法については、GKE Standard ノードプールで GPU を実行するをご覧ください。
次のマニフェストの例は、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 が機能しないという既知の問題があるためです。
カスタム指標 Stackdriver アダプタをインストールします。このアダプタにより、Monitoring にエクスポートしたカスタム指標が HPA コントローラで認識されるようになります。詳細については、Google Cloud Managed Service for Prometheus ドキュメントの水平 Pod 自動スケーリングをご覧ください。
次のコマンド例は、このインストールを実行する方法を示しています。
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 ドキュメントの水平 Pod 自動スケーリングをご覧ください。
- 自動スケーリングをトリガーする HPA の平均値の目標を特定します。たとえば、サーバーの負荷を増加させて GPU 使用率がピークになる場所を観察するなどのテストを実施して、目標値を特定します。HPA の許容範囲に注意してください。デフォルトでは、減衰振動のため目標値の前後に 0.1 の無動作範囲が設定されています。
- テストには、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 の指標に基づいて Pod の自動スケーリングを最適化する方法を確認する。
- オープンソースの Kubernetes ドキュメントで、水平 Pod 自動スケーリングの詳細を確認する。