使用 GKE Inference Quickstart 分析模型推理性能和费用

本页面介绍了如何使用 GKE 推理快速入门来简化在 Google Kubernetes Engine (GKE) 上部署 AI/机器学习推理工作负载的过程。推理快速入门是一种实用程序,可让您指定推理业务需求,并根据最佳实践和 Google 在模型、模型服务器、加速器(GPUTPU)、伸缩和存储方面的基准,获得优化的 Kubernetes 配置。这有助于您避免手动调整和测试配置的耗时过程。

本页面适用于机器学习 (ML) 工程师、平台管理员和运维人员,以及希望了解如何高效管理和优化 GKE 以进行 AI/ML 推理的数据和 AI 专家。如需详细了解我们在 Trusted Cloud by S3NS 内容中提及的常见角色和示例任务,请参阅常见的 GKE 用户角色和任务

如需详细了解模型服务概念和术语,以及 GKE 生成式 AI 功能如何提升和支持模型部署性能,请参阅 GKE 上的模型推理简介

在阅读本页面内容之前,请确保您熟悉 KubernetesGKE模型服务

使用推理快速入门

借助推理快速入门,您可以分析推理工作负载的性能和成本效益,并根据数据做出有关资源分配和模型部署策略的决策。

使用推理快速入门的简要步骤如下:

  1. 分析性能和费用:使用 gcloud container ai profiles list 命令探索可用的配置,并根据您的性能和费用要求过滤这些配置。如需查看特定配置的完整基准比较数据,请使用 gcloud container ai profiles benchmarks list 命令。通过此命令,您可以根据具体的性能要求确定最具成本效益的硬件。

  2. 部署清单:分析完成后,您可以生成优化的 Kubernetes 清单并进行部署。您可以选择启用存储和自动扩缩优化。您可以通过 Trusted Cloud 控制台或使用 kubectl apply 命令进行部署。在部署之前,您必须确保您的 Trusted Cloud by S3NS 项目中有足够的加速器配额,以便用于所选的 GPU 或 TPU。

  3. (可选)运行您自己的基准:所提供的配置和性能数据基于使用 ShareGPT 数据集的基准。工作负载的性能可能与此基准有所不同。如需衡量模型在各种条件下的性能,您可以使用实验性推理基准工具

优势

推理快速入门可提供优化配置,帮助您节省时间和资源。这些优化措施可通过以下方式提高性能并降低基础架构费用:

  • 您会收到有关设置加速器(GPU 和 TPU)、模型服务器和扩缩配置的详细量身定制的最佳实践。GKE 会定期更新推理快速入门,以提供最新的修复、映像和性能基准。
  • 您可以使用Trusted Cloud 控制台界面或命令行界面指定工作负载的延迟时间和吞吐量要求,并获取详细的量身定制的最佳实践(以 Kubernetes 部署清单的形式呈现)。

工作原理

推理快速入门基于 Google 对模型、模型服务器和加速器拓扑组合的单副本性能进行的详尽的内部基准测试结果,提供量身定制的最佳实践。这些基准会绘制延迟时间与吞吐量的对比图,包括队列大小和 KV 缓存指标,从而绘制出每种组合的性能曲线。

个性化最佳实践的生成方式

我们通过饱和加速器来测量延迟时间(以每个输出 token 的标准化时间 [NTPOT] 和首 token 延迟 [TTFT] 毫秒为单位)和吞吐量(以每秒输出 token 数为单位)。如需详细了解这些性能指标,请参阅 GKE 上的模型推理简介

以下示例延迟时间配置文件展示了吞吐量达到平稳状态的拐点(绿色)、拐点之后延迟时间恶化的点(红色),以及在延迟时间目标值下实现最佳吞吐量的理想区域(蓝色)。推理快速入门提供了此理想区域的性能数据和配置。

延迟时间曲线图,其中绿色标记表示每秒输出 token 数小于 2000,红色标记表示每秒输出 token 数大于 2000

Inference Quickstart 会根据推理应用的延迟时间要求,确定合适的组合,并在延迟时间-吞吐量曲线上确定最佳运行点。此点设置了 Pod 横向自动扩缩器 (HPA) 阈值,并留出缓冲空间来应对扩缩延迟。总体阈值还会告知所需的初始副本数,不过 HPA 会根据工作负载动态调整此数量。

费用计算

为了计算费用,推理快速入门使用可配置的输出与输入费用比率。例如,如果此比率设置为 4,则假定每个输出令牌的费用是输入令牌的四倍。以下等式用于计算每次令牌费用指标:

\[ \$/\text{output token} = \frac{\text{GPU \$/s}}{(\frac{1}{\text{output-to-input-cost-ratio}} \cdot \text{input tokens/s} + \text{output tokens/s})} \]

其中

\[ \$/\text{input token} = \frac{\text{\$/output token}}{\text{output-to-input-cost-ratio}} \]

基准测试

所提供的配置和性能数据基于使用 ShareGPT 数据集发送流量的基准,具有以下输入和输出分布。

输入 token 输出 token
最小值 中位数 平均值 P90 P99 最大值 最小值 中位数 平均值 P90 P99 最大值
4 108 226 635 887 1024 1 132 195 488 778 1024

准备工作

在开始之前,请确保您已执行以下任务:

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行 gcloud components update 以获取最新版本。
  • 在 Trusted Cloud 控制台的项目选择器页面上,选择或创建一个 Trusted Cloud by S3NS 项目。

  • 确保您的 Trusted Cloud by S3NS 项目已启用结算功能

  • 确保您的项目有足够的加速器容量:

准备使用 GKE AI/机器学习界面

如果您使用 Trusted Cloud 控制台,还需要创建 Autopilot 集群(如果您的项目中尚未创建)。按照创建 Autopilot 集群中的说明操作。

准备使用命令行界面

如果您使用 gcloud CLI 运行推理快速入门,还需要运行以下其他命令:

  1. 启用 gkerecommender.googleapis.com API:

    gcloud services enable gkerecommender.googleapis.com
    
  2. 设置您用于 API 调用的结算配额项目:

    gcloud config set billing/quota_project PROJECT_ID
    
  3. 检查您的 gcloud CLI 版本是否至少为 536.0.1。如果不是,请运行以下命令:

    gcloud components update
    

限制

在开始使用推理快速入门之前,请注意以下限制:

  • Trusted Cloud 控制台模型部署仅支持部署到 Autopilot 集群。
  • 推理快速入门不提供给定模型服务器支持的所有模型的配置文件。
  • 如果您在为 Hugging Face 中的大型模型(90 GiB 或更大)使用生成的清单时未设置 HF_HOME 环境变量,则必须使用启动磁盘大于默认大小的集群,或者修改清单以将 HF_HOME 设置为 /dev/shm/hf_cache。这样一来,系统将使用 RAM 作为缓存,而不是节点的启动磁盘。如需了解详情,请参阅问题排查部分。
  • 从 Cloud Storage 加载模型仅支持部署到启用了 Cloud Storage FUSE CSI 驱动程序和 Workload Identity Federation for GKE 的集群,而这两者在 Autopilot 集群中均默认处于启用状态。如需了解详情,请参阅设置适用于 GKE 的 Cloud Storage FUSE CSI 驱动程序

分析并查看模型推理的优化配置

本部分介绍如何使用 Google Cloud CLI 探索和分析配置建议。

使用 gcloud container ai profiles 命令探索和分析优化后的配置(模型、模型服务器、模型服务器版本和加速器的组合):

模型

如需探索和选择模型,请使用 models 选项。

  gcloud container ai profiles models list

个人资料

使用 list 命令探索生成的配置文件,并根据性能和费用要求过滤这些配置文件。例如:

gcloud container ai profiles list \
    --model=openai/gpt-oss-20b \
    --pricing-model=on-demand \
    --target-ttft-milliseconds=300

输出显示了支持的配置,以及拐点处的吞吐量、延迟时间和每百万 token 的费用等性能指标。 具体类似于以下内容:

  Instance Type Accelerator      Cost/M Input Tokens Cost/M Output Tokens Output Tokens/s NTPOT(ms) TTFT(ms) Model Server Model Server Version Model
  a3-highgpu-1g nvidia-h100-80gb 0.009               0.035                13335           67        297      vllm         gptoss               openai/gpt-oss-20b

这些值表示在吞吐量停止增加且延迟时间开始大幅增加(即拐点或饱和点)时,使用相应加速器类型的给定配置所观察到的性能。如需详细了解这些性能指标,请参阅关于在 GKE 上进行模型推理

如需查看可以设置的标志的完整列表,请参阅 list 命令文档。

所有价格信息均以美元为单位提供,默认适用于 us-east5 区域,但使用 A3 机器的配置除外,这些配置默认适用于 us-central1 区域。

基准

如需获取特定配置文件的所有基准比较数据,请使用 benchmarks list 命令。

例如:

gcloud container ai profiles benchmarks list \
    --model=deepseek-ai/DeepSeek-R1-Distill-Qwen-7B \
    --model-server=vllm \
    --pricing-model=on-demand

输出包含在不同请求速率下运行的基准的性能指标列表。

该命令以 CSV 格式显示输出。如需将输出存储为文件,请使用输出重定向。例如:gcloud container ai profiles benchmarks list > profiles.csv

如需查看可以设置的标志的完整列表,请参阅 benchmarks list 命令文档。

选择模型、模型服务器、模型服务器版本和加速器后,您可以继续创建部署清单。

部署建议的配置

本部分介绍如何使用 Trusted Cloud 控制台或命令行生成和部署配置建议。

控制台

  1. 在 Trusted Cloud 控制台中,前往 GKE AI/ML 页面。

    打开 GKE AI/ML 页面

  2. 点击部署模型
  3. 选择要部署的模型。推理快速入门支持的模型会显示已优化标签。

    • 如果您选择了基础模型,系统会打开模型页面。点击部署。 您仍然可以在实际部署之前修改配置。
    • 如果您的项目中没有 Autopilot 集群,系统会提示您创建一个。按照创建 Autopilot 集群中的说明操作。创建集群后,返回到 Trusted Cloud 控制台中的 GKE AI/ML 页面,选择一个模型。

    模型部署页面会预先填充您选择的模型以及推荐的模型服务器和加速器。您还可以配置最大延迟时间和模型来源等设置。

  4. (可选)如需查看包含推荐配置的清单,请点击查看 YAML

  5. 如需部署采用推荐配置的清单,请点击部署。部署操作可能需要几分钟时间才能完成。

如需查看部署,请前往 Kubernetes Engine > 工作负载页面。

gcloud

  1. 准备从模型注册表中加载模型:推理快速入门支持从 Hugging Face 或 Cloud Storage 加载模型。

    Hugging Face

    如果您还没有 Hugging Face 访问令牌和相应的 Kubernetes Secret,请生成一个。

    如需创建包含 Hugging Face 令牌的 Kubernetes Secret,请运行以下命令:

    kubectl create secret generic hf-secret \
        --from-literal=hf_api_token=HUGGING_FACE_TOKEN \
        --namespace=NAMESPACE
    

    替换以下值:

    • HUGGING_FACE_TOKEN:您之前生成的 Hugging Face 令牌。
    • NAMESPACE:您要在其中部署模型服务器的 Kubernetes 命名空间。

    某些模型可能还会要求您接受并签署其许可协议。

    Cloud Storage

    您可以通过经过调整的 Cloud Storage FUSE 设置从 Cloud Storage 加载受支持的模型。为此,您首先需要将模型从 Hugging Face 加载到您的 Cloud Storage 存储分区。

    您可以部署此 Kubernetes 作业来转移模型,将 MODEL_ID 更改为推理快速入门支持的模型。

  2. 生成清单:您可以通过以下选项来生成清单:

    • 基本配置:生成标准的 Kubernetes Deployment、Service 和 PodMonitoring 清单,用于部署单副本推理服务器。
    • (可选)存储空间优化配置:生成一个清单,其中包含经过调整的 Cloud Storage FUSE 设置,用于从 Cloud Storage 存储分区加载模型。您可以使用 --model-bucket-uri 标志来启用此配置。经过调优的 Cloud Storage FUSE 设置可将 LLM Pod 启动时间缩短 7 倍以上。
    • (可选)经过自动扩缩优化的配置:生成包含 Pod 横向自动扩缩器 (HPA) 的清单,以根据流量自动调整模型服务器副本的数量。您可以通过使用 --target-ntpot-milliseconds 等标志指定延迟时间目标值来启用此配置。

    基本配置

    在终端中,使用 manifests 选项生成 Deployment、Service 和 PodMonitoring 清单:

    gcloud container ai profiles manifests create
    

    使用必需的 --model--model-server--accelerator-type 参数自定义清单。

    您可以选择性地设置以下参数:

    • --target-ntpot-milliseconds:设置此参数以指定 HPA 阈值。此参数可让您定义一个伸缩阈值,以使在第 50 个百分位测量的每个输出 token 的归一化时间 (NTPOT) P50 延迟时间保持在指定值以下。选择一个高于加速器最低延迟的值。如果您指定的 NTPOT 值高于加速器的最大延迟时间,则 HPA 会配置为实现最大吞吐量。例如:

      gcloud container ai profiles manifests create \
          --model=google/gemma-2-27b-it \
          --model-server=vllm \
          --model-server-version=v0.7.2 \
          --accelerator-type=nvidia-l4 \
          --target-ntpot-milliseconds=200
      
    • --target-ttft-milliseconds:过滤掉超过 TTFT 延迟时间目标的配置文件。

    • --output-path:如果指定,输出将保存到提供的路径,而不是打印到终端,以便您在部署之前编辑输出。例如,如果您想将清单保存在 YAML 文件中,可以将此选项与 --output=manifest 选项搭配使用。例如:

      gcloud container ai profiles manifests create \
          --model deepseek-ai/DeepSeek-R1-Distill-Qwen-7B \
          --model-server vllm \
          --accelerator-type=nvidia-tesla-a100 \
          --output=manifest \
          --output-path  /tmp/manifests.yaml
      

    如需查看可以设置的标志的完整列表,请参阅 manifests create 命令文档。

    存储优化

    您可以使用经过调整的 Cloud Storage FUSE 配置从 Cloud Storage 加载模型,从而缩短 Pod 启动时间。从 Cloud Storage 加载需要 GKE 1.29.6-gke.1254000、1.30.2-gke.1394000 或更高版本

    请按以下步骤进行此操作:

    1. 将模型从 Hugging Face 代码库加载到您的 Cloud Storage 存储分区
    2. 生成清单时,请设置 --model-bucket-uri 标志。 此配置可让模型使用 Cloud Storage FUSE CSI 驱动程序从 Cloud Storage 存储分区加载。URI 必须指向包含模型 config.json 文件和权重的路径。您可以通过将路径附加到存储分区 URI 来指定存储分区内某个目录的路径。

      例如:

      gcloud container ai profiles manifests create \
          --model=google/gemma-2-27b-it \
          --model-server=vllm \
          --accelerator-type=nvidia-l4 \
          --model-bucket-uri=gs://BUCKET_NAME \
          --output-path=manifests.yaml
      

      BUCKET_NAME 替换为 Cloud Storage 存储分区的名称。

    3. 在应用清单之前,您必须运行清单注释中找到的 gcloud storage buckets add-iam-policy-binding 命令。此命令是必需的,用于授予 GKE 服务账号使用 Workload Identity Federation for GKE 访问 Cloud Storage 存储分区的权限。

      如果您打算将部署扩缩到多个副本,则必须选择以下选项之一,以防止出现对 XLA 缓存路径 (VLLM_XLA_CACHE_PATH) 的并发写入错误:

      • 方案 1(推荐):首先,将 Deployment 扩缩为 1 个副本。等待 Pod 准备就绪,以便其写入 XLA 缓存。然后,扩缩到所需的副本数量。后续副本将从已填充的缓存中读取,而不会发生写入冲突。
      • 方法 2:从清单中完全移除 VLLM_XLA_CACHE_PATH 环境变量。这种方法更简单,但会针对所有副本停用缓存。

      对于 TPU 加速器类型,此缓存路径用于存储 XLA 编译缓存,从而加快模型准备速度,以便重复部署。

    如需了解有关提升性能的更多提示,请参阅优化适用于 GKE 的 Cloud Storage FUSE CSI 驱动程序的性能

    已针对自动扩缩进行优化

    您可以配置 Pod 横向自动扩缩器 (HPA),以根据负载自动调整模型服务器副本的数量。这有助于模型服务器根据需要进行扩缩,从而高效处理不同的负载。HPA 配置遵循 GPUTPU 指南中的自动扩缩最佳实践。

    如需在生成清单时添加 HPA 配置,请使用 --target-ntpot-milliseconds--target-ttft-milliseconds 标志中的一个或两个。 这些参数定义了 HPA 的扩缩阈值,以使 NTPOT 或 TTFT 的 P50 延迟时间保持在指定值以下。如果您仅设置了其中一个标志,则系统只会将该指标纳入扩缩考虑范围。

    选择一个高于加速器最低延迟的值。如果您指定的值高于加速器的最大延迟时间,则 HPA 会配置为实现最大吞吐量。

    例如:

    gcloud container ai profiles manifests create \
        --model=google/gemma-2-27b-it \
        --accelerator-type=nvidia-l4 \
        --target-ntpot-milliseconds=250
    
  3. 创建集群:您可以在 GKE Autopilot 或 Standard 集群上部署模型。我们建议您使用 Autopilot 集群获得全托管式 Kubernetes 体验。如需选择最适合您的工作负载的 GKE 操作模式,请参阅选择 GKE 操作模式

    如果您没有现有集群,请按以下步骤操作:

    Autopilot

    按照以下说明创建 Autopilot 集群。如果您在项目中拥有必要的配额,GKE 会根据部署清单处理具有 GPU 或 TPU 容量的节点的预配。

    Standard

    1. 创建可用区级区域级集群。
    2. 创建具有相应加速器的节点池。根据您选择的加速器类型,按照以下步骤操作:

  4. (可选,但建议执行)启用可观测性功能:在生成的清单的注释部分中,提供了用于启用建议的可观测性功能的其他命令。启用这些功能可提供更多数据洞见,帮助您监控工作负载和底层基础架构的性能和状态。

    以下是用于启用可观测性功能的命令示例:

    gcloud container clusters update $CLUSTER_NAME \
        --project=$PROJECT_ID \
        --location=$LOCATION \
        --enable-managed-prometheus \
        --logging=SYSTEM,WORKLOAD  \
        --monitoring=SYSTEM,DEPLOYMENT,HPA,POD,DCGM \
        --auto-monitoring-scope=ALL
    

    如需了解详情,请参阅监控推理工作负载

  5. (仅限 HPA)部署指标适配器:如果部署清单中生成了 HPA 资源,则必须使用指标适配器,例如自定义指标 Stackdriver 适配器。借助指标适配器,HPA 可以访问使用 kube 外部指标 API 的模型服务器指标。如需部署适配器,请参阅 GitHub 上的适配器文档

  6. 部署清单:运行 kubectl apply 命令,并传入清单的 YAML 文件。例如:

    kubectl apply -f ./manifests.yaml
    

测试部署端点

如果您部署了清单,则部署的服务会在以下端点公开:

http://model-model_server-service:8000/

模型服务器(例如 vLLM)通常侦听端口 8000。

如需测试部署,您需要设置端口转发。在单独的终端中运行以下命令:

kubectl port-forward service/model-model_server-service 8000:8000

如需查看有关如何构建请求并将其发送到端点的示例,请参阅 vLLM 文档。

清单版本控制

推理快速入门提供了在最新 GKE 集群版本上经过验证的最新清单。为配置文件返回的清单可能会随时间变化,以便您在部署时获得优化的配置。如果您需要稳定的清单,请单独保存并存储。

清单包含注释和 recommender.ai.gke.io/version 注释,格式如下:

# Generated on DATE using:
# GKE cluster CLUSTER_VERSION
# GPU_DRIVER_VERSION GPU driver for node version NODE_VERSION
# Model server MODEL_SERVER MODEL_SERVER_VERSION

上述注释具有以下值:

  • DATE:生成清单的日期。
  • CLUSTER_VERSION:用于验证的 GKE 集群版本。
  • NODE_VERSION:用于验证的 GKE 节点版本。
  • GPU_DRIVER_VERSION:(仅限 GPU)用于验证的 GPU 驱动程序版本。
  • MODEL_SERVER:清单中使用的模型服务器。
  • MODEL_SERVER_VERSION:清单中使用的模型服务器版本。

监控推理工作负载

如需监控已部署的推理工作负载,请前往 Trusted Cloud 控制台中的Metrics Explorer

启用自动监控

GKE 包含自动监控功能,该功能是更广泛的可观测性功能的一部分。此功能会扫描集群中在受支持的模型服务器上运行的工作负载,并部署 PodMonitoring 资源,使这些工作负载指标可在 Cloud Monitoring 中显示。如需详细了解如何启用和配置自动监控,请参阅为工作负载配置自动应用监控

启用该功能后,GKE 会安装预建的信息中心,以监控受支持的工作负载的应用。

如果您通过 Trusted Cloud 控制台中的 GKE AI/机器学习页面进行部署,系统会使用 targetNtpot 配置自动为您创建 PodMonitoring 和 HPA 资源。

问题排查

  • 如果您将延迟时间设置得过低,推理快速入门可能无法生成建议。如需解决此问题,请选择介于所选加速器的观测到的最短延迟时间和最长延迟时间之间的延迟时间目标。
  • 推理快速入门独立于 GKE 组件,因此您的集群版本与使用该服务没有直接关系。不过,我们建议您使用全新的或最新的集群,以免出现任何性能差异。
  • 如果您针对 gkerecommender.googleapis.com 命令收到 PERMISSION_DENIED 错误,提示缺少配额项目,则需要手动设置。运行 gcloud config set billing/quota_project PROJECT_ID 即可解决此问题。

Pod 因临时存储空间不足而被逐出

从 Hugging Face 部署大型模型(90 GiB 或更大)时,您的 Pod 可能会被逐出,并显示类似于以下内容的错误消息:

Fails because inference server consumes too much ephemeral storage, and gets evicted low resources:  Warning  Evicted              3m24s                   kubelet                                The node was low on resource: ephemeral-storage. Threshold quantity: 10120387530, available: 303108Ki. Container inference-server was using 92343412Ki, request is 0, has larger consumption of ephemeral-storage..,

出现此错误是因为模型缓存在节点的启动磁盘(一种临时存储空间)上。如果部署清单未将 HF_HOME 环境变量设置为节点 RAM 中的某个目录,则启动磁盘将用于临时存储。

  • 默认情况下,GKE 节点的启动磁盘为 100 GiB。
  • GKE 会预留 10% 的启动磁盘用于系统开销,剩余 90 GiB 用于工作负载。
  • 如果模型大小为 90 GiB 或更大,并且在默认大小的启动磁盘上运行,kubelet 会驱逐 Pod 以释放临时存储空间。

如要解决此问题,有以下几种方法可供选择:

  • 使用 RAM 进行模型缓存:在部署清单中,将 HF_HOME 环境变量设置为 /dev/shm/hf_cache。此功能使用节点的 RAM 来缓存模型,而不是启动磁盘。
  • 增加启动磁盘大小

从 Cloud Storage 加载模型时,Pod 进入崩溃循环

部署使用 --model-bucket-uri 标志生成的清单后,Deployment 可能会卡住,并且 Pod 进入 CrashLoopBackOff 状态。检查 inference-server 容器的日志可能会显示误导性错误,例如 huggingface_hub.errors.HFValidationError。例如:

huggingface_hub.errors.HFValidationError: Repo id must use alphanumeric chars or '-', '_', '.', '--' and '..' are forbidden, '-' and '.' cannot start or end the name, max length is 96: '/data'.

--model-bucket-uri 标志中提供的 Cloud Storage 路径不正确时,通常会发生此错误。推理服务器(例如 vLLM)在装载路径中找不到所需的模型文件(例如 config.json)。如果服务器无法找到本地文件,则会回退到假设该路径是 Hugging Face Hub 代码库 ID。由于该路径不是有效的代码库 ID,服务器会因验证错误而失败,并进入崩溃循环。

如需解决此问题,请验证您为 --model-bucket-uri 标志提供的路径是否指向 Cloud Storage 存储分区中包含模型 config.json 文件和所有关联模型权重的确切目录。

后续步骤