本页面介绍如何使用 GKE Pod 横向自动扩缩器 (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 收集器的部署和配置。默认情况下,GKE 集群中会启用 Google Cloud Managed Service for Prometheus;您也可以手动启用该功能。
以下示例清单展示了如何设置 PodMonitoring 资源定义,以引导 Google Cloud Managed Service for Prometheus 以 15 秒的周期性间隔从 Pod 爬取指标:
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 集群启用了系统指标,它会每 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: 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 横向自动扩缩。