Google Kubernetes Engine(GKE)を使用して GPU 上の LLM ワークロードの自動スケーリングを構成する


このページでは、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 の自動スケーリングを直接制御できます。これらの指標の詳細については、サーバー指標をご覧ください。

サーバー指標を使用してカスタム指標の自動スケーリングを設定する手順は次のとおりです。

  1. 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
    
  2. カスタム指標 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
    
  3. カスタム指標ベースの 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 指標を使用してカスタム指標の自動スケーリングを設定するには、次の操作を行います。

  1. GPU 指標を Cloud Monitoring にエクスポートします。GKE クラスタでシステム指標が有効になっている場合、GPU 使用率の指標は 60 秒ごとに container/accelerator/duty_cycle システム指標を介して 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 ドキュメントの水平 Pod 自動スケーリングをご覧ください。

    次のコマンド例は、このインストールを実行する方法を示しています。

    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 ドキュメントの水平 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
    

次のステップ