第 04 期 | Google Cloud Vertex AI 云端部署

更新于 2026/4/7

🎯 学习目标

  • 理解 Google Cloud Vertex AI Model Garden 在大模型部署中的核心作用。
  • 掌握在 Vertex AI 上部署 Google Gemma 模型并创建可访问的 API 端点。
  • 学习如何配置 Vertex AI 端点的自动扩缩容策略,以优化性能和成本。
  • 区分并实践 Gemma 模型的在线推理与批量推理,理解其适用场景与操作流程。

📖 核心概念讲解

4.1 Vertex AI 与 Model Garden:大模型部署的加速器

Google Cloud Vertex AI 是一个端到端的机器学习平台,旨在帮助开发者和数据科学家构建、部署和管理 ML 模型。它整合了数据准备、模型训练、模型部署、监控等一系列 MLOps 工具,极大地简化了机器学习项目的生命周期管理。

在 Vertex AI 中,Model Garden 扮演着一个重要的角色。它是一个预训练模型和解决方案的集合,用户可以直接在其中发现、评估并部署来自 Google 或合作伙伴的各种模型,包括最新的开源大语言模型如 Gemma。Model Garden 的优势在于:

  • 简化部署:对于 Gemma 这样的流行模型,Model Garden 提供了一键部署的能力,用户无需从头配置容器镜像、依赖等复杂项。
  • 版本管理:易于选择和管理不同版本的模型。
  • 集成性:与 Vertex AI 的其他服务(如端点、监控、日志)无缝集成。

通过 Model Garden 部署 Gemma,用户可以快速获得一个可用于生产环境的、高可用、可扩缩的推理服务。

4.2 API 端点:模型服务的门户

在 Vertex AI 中,API 端点 (Endpoint) 是已部署模型对外提供推理服务的入口。当您将一个模型部署到 Vertex AI 时,实际上是创建了一个或多个端点,每个端点都与特定的模型版本和部署配置关联。

一个 Vertex AI 端点通常包含以下关键元素:

  • 部署模型 (Deployed Model):实际运行模型推理的计算资源(如 GPU 或 CPU 实例)。
  • 机器类型 (Machine Type):指定部署模型所使用的虚拟机类型,包括 CPU、内存和可选的加速器(如 GPU)。对于 Gemma 这种大模型,通常需要选择带有 GPU 的机器类型以获得更好的性能。
  • 副本数量 (Replica Count):指定运行模型的实例数量,用于处理并发请求和提供高可用性。
  • 自动扩缩容配置 (Autoscaling Configuration):定义如何根据流量负载自动调整副本数量。

端点的重要性在于它提供了一个稳定的、可编程的接口,允许您的应用程序通过 REST API 或 gRPC 调用来与模型进行交互,而无需关心底层基础设施的复杂性。

+--------------------+           +-------------------------------------+
|      Your App      |           |          Vertex AI Endpoint         |
|                    |           |                                     |
|  - REST API Call   | <-------- |  - Unique URL / ID                  |
|  - gRPC Call       |           |  - Manages traffic routing          |
+--------------------+           |                                     |
                                 |  +-------------------------------+  |
                                 |  |       Deployed Model (A)      |  |
                                 |  |  - Machine Type (e.g., A100)  |  |
                                 |  |  - Min/Max Replicas           |  |
                                 |  |  - Autoscaling Logic          |  |
                                 |  +-------------------------------+  |
                                 |                                     |
                                 |  +-------------------------------+  |
                                 |  |       Deployed Model (B)      |  |
                                 |  |  - ...                         |  |
                                 |  +-------------------------------+  |
                                 +-------------------------------------+

4.3 自动扩缩容:弹性与成本效益的平衡

自动扩缩容是云服务的一项核心能力,它允许计算资源根据实际负载需求自动调整。对于大模型推理服务,流量波动是常态,手动管理资源既低效又容易出错。Vertex AI 的自动扩缩容功能解决了这一挑战:

  • 动态调整:根据预设的指标(如 CPU 利用率、GPU 利用率或请求吞吐量 QPS),自动增加或减少部署模型的副本数量。
  • 成本优化:在低流量时期减少实例数量,从而降低运行成本;在高流量时期增加实例数量,确保服务性能和可用性。
  • 配置参数
    • 最小副本数 (Min Replica Count):即使没有流量,也要保持运行的实例数量,确保服务始终可用。
    • 最大副本数 (Max Replica Count):允许扩缩的最大实例数量,防止过度扩容导致成本失控。
    • 目标利用率 (Target Utilization):当实例的 CPU 或 GPU 利用率达到这个百分比时,系统会考虑扩容。例如,设置为 60% 意味着当现有实例的平均 CPU 利用率达到 60% 时,Vertex AI 会尝试增加新的实例。

正确配置自动扩缩容对于维护一个高效、经济且响应迅速的模型服务至关重要。

4.4 在线推理 vs. 批量推理:选择合适的推理模式

在模型推理场景中,根据业务需求和数据特性,主要有两种推理模式:在线推理和批量推理。

特性 在线推理 (Online Prediction) 批量推理 (Batch Prediction)
数据输入 单个或少量实时请求,通常通过 API 调用。 大量数据,通常以文件形式(如 JSONL, CSV)存储在云存储中。
延迟要求 低延迟(毫秒级别),要求实时响应。 高延迟可接受(分钟到小时级别),非实时。
吞吐量 高并发请求,每个请求数据量小。 高吞吐量,一次性处理大量数据。
适用场景 实时推荐、聊天机器人、即时翻译、动态内容生成等交互式应用。 离线报告生成、数据分析、内容审核、大规模数据打标签、预计算。
成本模式 持续运行端点,按实例运行时间计费,按请求量(可选)。 按实际处理的数据量和计算资源使用时间计费,处理完即停止。
复杂性 需要部署常驻端点,管理高可用和扩缩容。 任务型,无需常驻端点,配置输入输出路径即可。
结果输出 API 响应直接返回。 输出到指定云存储路径,通常是结构化文件。

对于 Gemma 模型:

  • 在线推理:适用于构建基于 Gemma 的实时聊天应用、智能助手、即时内容生成服务等,用户发送提示,模型立即返回响应。
  • 批量推理:适用于对大量文本进行摘要、情感分析、主题提取、内容生成(如生成大量营销文案草稿)等场景,无需实时性,但需要处理的数据量巨大。

选择哪种模式取决于您的应用场景对延迟、吞吐量和成本的具体要求。


💻 实战演示

本节将演示如何在 Google Cloud Vertex AI 上部署 Gemma 2B-IT 模型,并进行在线推理与批量推理。

前置条件:

  1. 一个已启用计费的 Google Cloud 项目。
  2. 已安装并配置 gcloud CLI 工具,且已认证到您的项目。
  3. 已启用 Vertex AI API 和 Cloud Storage API。
# 确保 gcloud CLI 已配置并指向正确项目
gcloud config set project YOUR_PROJECT_ID
gcloud auth login
gcloud services enable aiplatform.googleapis.com \
                     cloudbuild.googleapis.com \
                     cloudfunctions.googleapis.com \
                     cloudresourcemanager.googleapis.com \
                     container.googleapis.com \
                     compute.googleapis.com \
                     iam.googleapis.com \
                     logging.googleapis.com \
                     monitoring.googleapis.com \
                     storage.googleapis.com

4.5 部署 Gemma 2B-IT 模型到 Vertex AI 端点

我们将通过 gcloud CLI 从 Model Garden 部署 Gemma 2B-IT 模型。这里选择 gemma-2b-it (instruction-tuned) 版本,因为它更适合交互式对话。

步骤 1:从 Model Garden 部署 Gemma 模型

在 Model Garden 中部署模型时,您通常会选择一个预定义的模型 ID,并为其配置计算资源。

# 定义环境变量
export PROJECT_ID="your-gcp-project-id" # 替换为您的项目ID
export REGION="us-central1"           # 替换为您希望部署的区域,例如 us-central1, europe-west4, asia-southeast1
export MODEL_NAME="gemma-2b-it"
export ENDPOINT_DISPLAY_NAME="gemma-2b-it-endpoint-04"
export DEPLOYED_MODEL_DISPLAY_NAME="gemma-2b-it-deployed-model-04"
export MACHINE_TYPE="n1-standard-8"    # 建议至少n1-standard-8,或c2-standard-8等
export ACCELERATOR_TYPE="NVIDIA_TESLA_T4" # 对于Gemma 2B,T4 GPU通常足够。对于更大模型可能需要A100。
export ACCELERATOR_COUNT=1
export MIN_REPLICA_COUNT=1             # 最小副本数,即使无流量也保持运行
export MAX_REPLICA_COUNT=2             # 最大副本数,根据流量自动扩缩
export TARGET_CPU_UTILIZATION=60       # 目标CPU利用率,用于自动扩缩

echo "开始部署 Gemma ${MODEL_NAME} 模型到 Vertex AI..."

# 使用 gcloud model-garden 命令部署模型
# 注意:gcloud model-garden deploy-model 命令会自动创建Endpoint和DeployedModel
# 如果此命令在您的gcloud版本中不可用,请参考Vertex AI控制台或Python SDK
# 或者先创建endpoint,再deploy-model
# gcloud ai endpoints create --display-name=$ENDPOINT_DISPLAY_NAME --region=$REGION

gcloud ai model-garden deploy-model $MODEL_NAME \
    --project=$PROJECT_ID \
    --region=$REGION \
    --endpoint-display-name=$ENDPOINT_DISPLAY_NAME \
    --deployed-model-display-name=$DEPLOYED_MODEL_DISPLAY_NAME \
    --machine-type=$MACHINE_TYPE \
    --accelerator-type=$ACCELERATOR_TYPE \
    --accelerator-count=$ACCELERATOR_COUNT \
    --min-replica-count=$MIN_REPLICA_COUNT \
    --max-replica-count=$MAX_REPLICA_COUNT \
    --autoscaling-metric-specs="cpu_usage=${TARGET_CPU_UTILIZATION}" # 可以是cpu_usage或accelerator_duty_cycle

echo "部署命令已发送,请等待模型部署完成。这可能需要 10-20 分钟。"

# 获取部署后的端点ID和模型ID
export ENDPOINT_ID=$(gcloud ai endpoints list --region=$REGION --filter="displayName=$ENDPOINT_DISPLAY_NAME" --format="value(name)")
export DEPLOYED_MODEL_ID=$(gcloud ai endpoints describe $ENDPOINT_ID --region=$REGION --format="value(deployedModels[0].id)")

echo "Endpoint ID: ${ENDPOINT_ID}"
echo "Deployed Model ID: ${DEPLOYED_MODEL_ID}"

注意gcloud ai model-garden deploy-model 是较新的命令,可能需要更新 gcloud 组件。如果遇到问题,可以通过 Vertex AI 控制台的 Model Garden 界面进行部署,或者使用 Python SDK。在控制台部署流程为:

  1. 导航到 Vertex AI -> Model Garden。
  2. 搜索并选择 Gemma
  3. 点击您想部署的模型版本(例如 gemma-2b-it),然后点击 "Deploy"。
  4. 配置端点名称、区域、机器类型、加速器类型和数量、以及最小/最大副本数,然后点击 "Deploy"。

4.6 进行在线推理

模型部署成功后,您可以通过 REST API 或 gcloud CLI 向端点发送请求进行在线推理。

步骤 1:准备推理请求数据

Gemma 模型通常期望输入是一个包含用户提示的 JSON 结构。

{
  "instances": [
    {
      "prompt": "Write a short poem about a cat sitting by a window."
    }
  ]
}

将其保存为 request.json 文件。

步骤 2:使用 gcloud CLI 进行在线推理

# 确保 ENDPOINT_ID 变量已设置
# 如果没有,请手动查询:
# export ENDPOINT_ID=$(gcloud ai endpoints list --region=$REGION --filter="displayName=$ENDPOINT_DISPLAY_NAME" --format="value(name)")

echo "执行在线推理..."
gcloud ai endpoints predict ${ENDPOINT_ID} \
    --region=${REGION} \
    --json-request=request.json

预期输出示例:

{
  "predictions": [
    {
      "generated_text": "A sunbeam warms the pane,\nA fluffy form, a watchful gaze.\nTail twitches, ears alert and keen,\nLost in the window's dreamy haze."
    }
  ]
}

步骤 3:使用 Python SDK 进行在线推理 (更灵活)

import vertexai
from vertexai.preview.language_models import TextGenerationModel
from google.cloud import aiplatform

# 设置您的项目ID和区域
PROJECT_ID = "your-gcp-project-id" # 替换为您的项目ID
REGION = "us-central1"           # 替换为您的区域
ENDPOINT_ID = "your-endpoint-id" # 替换为上一步获取的端点ID

vertexai.init(project=PROJECT_ID, location=REGION)

# 获取已部署的端点
endpoint = aiplatform.Endpoint(endpoint_name=f"projects/{PROJECT_ID}/locations/{REGION}/endpoints/{ENDPOINT_ID}")

# 准备请求数据
instances = [
    {"prompt": "Tell me a fun fact about giraffes."},
    {"prompt": "What is the capital of France?"}
]

# 发送预测请求
try:
    response = endpoint.predict(instances=instances)
    for i, prediction in enumerate(response.predictions):
        print(f"Prompt {i+1}: {instances[i]['prompt']}")
        print(f"Generated text: {prediction['generated_text']}\n")
except Exception as e:
    print(f"Prediction failed: {e}")

将上述代码保存为 online_predict.py 并运行:python online_predict.py。 请确保您已安装 google-cloud-aiplatform 库:pip install google-cloud-aiplatform

4.7 进行批量推理

批量推理适用于需要处理大量数据,但对实时性要求不高的场景。

步骤 1:准备输入数据并上传到 GCS

创建一个包含多个推理请求的 JSONL (JSON Lines) 文件,每行一个 JSON 对象。

{"prompt": "Summarize the main points of machine learning in three sentences."}
{"prompt": "Generate a list of 5 creative names for a new coffee shop."}
{"prompt": "Explain the concept of quantum entanglement simply."}

将其保存为 batch_input.jsonl

然后,在您的 GCS 桶中创建一个输入文件夹并上传此文件。

export GCS_BUCKET_NAME="your-gcs-bucket-for-gemma-batch" # 替换为您的GCS桶名称
export GCS_INPUT_PATH="gs://${GCS_BUCKET_NAME}/gemma_batch_input/batch_input.jsonl"
export GCS_OUTPUT_PATH="gs://${GCS_BUCKET_NAME}/gemma_batch_output/"

# 创建GCS桶 (如果不存在)
gsutil mb -p ${PROJECT_ID} -l ${REGION} gs://${GCS_BUCKET_NAME}/

# 上传输入文件
gsutil cp batch_input.jsonl ${GCS_INPUT_PATH}

echo "输入文件已上传到: ${GCS_INPUT_PATH}"

步骤 2:创建批量预测作业

# 确保 DEPLOYED_MODEL_ID 变量已设置
# 如果没有,请手动查询:
# export ENDPOINT_ID=$(gcloud ai endpoints list --region=$REGION --filter="displayName=$ENDPOINT_DISPLAY_NAME" --format="value(name)")
# export DEPLOYED_MODEL_ID=$(gcloud ai endpoints describe $ENDPOINT_ID --region=$REGION --format="value(deployedModels[0].id)")

echo "创建批量预测作业..."
gcloud ai batch-predictions create \
    --project=${PROJECT_ID} \
    --region=${REGION} \
    --model=${DEPLOYED_MODEL_ID} \
    --display-name="gemma-batch-prediction-04" \
    --instances-format="jsonl" \
    --machine-type=${MACHINE_TYPE} \
    --accelerator-type=${ACCELERATOR_TYPE} \
    --accelerator-count=${ACCELERATOR_COUNT} \
    --gcs-source=${GCS_INPUT_PATH} \
    --gcs-destination-prefix=${GCS_OUTPUT_PATH} \
    --labels="tutorial=gemma-vertexai" # 可以添加标签以便管理

echo "批量预测作业已启动。您可以访问 Vertex AI 控制台查看其状态。"
echo "输出文件将保存到: ${GCS_OUTPUT_PATH}"

步骤 3:监控作业并查看结果

批量预测作业可能需要几分钟到几小时不等,具体取决于数据量和资源配置。您可以在 Vertex AI 控制台的 "Batch Predictions" 页面查看作业状态。

当作业完成后,输出文件将生成在您指定的 GCS 输出路径下。通常会有一个名为 prediction.results-XXXXX-of-YYYYY 的文件。

# 列出 GCS 输出路径下的文件
gsutil ls ${GCS_OUTPUT_PATH}

# 下载并查看结果文件 (替换为实际文件名)
# 例如:gsutil cp gs://your-gcs-bucket-for-gemma-batch/gemma_batch_output/prediction-gemma-batch-prediction-04-2023.../prediction.results-00000-of-00001 ${GCS_OUTPUT_PATH}results.jsonl
# gsutil cp YOUR_ACTUAL_RESULT_FILE_PATH ./results.jsonl

# 查看下载的结果文件
# cat results.jsonl

每个结果行都将包含原始输入和模型生成的文本。

清理资源 (重要!) 为避免不必要的费用,请在完成实验后删除部署的端点和模型。

echo "开始清理资源..."

# 删除端点 (这也会删除部署在其上的模型)
gcloud ai endpoints delete ${ENDPOINT_ID} --region=${REGION} --project=${PROJECT_ID} --quiet

# 删除GCS桶 (如果不再需要)
gsutil rm -r gs://${GCS_BUCKET_NAME}

echo "资源清理完成。"

🔧 涉及的工具与命令

工具/命令 类型 描述
gcloud CLI 命令行 Google Cloud 的主要命令行接口,用于管理各项云服务,包括 Vertex AI 和 Cloud Storage。
gcloud config set project gcloud 设置当前操作的 Google Cloud 项目。
gcloud auth login gcloud 登录 Google 账户进行身份验证。
gcloud services enable gcloud 启用 Google Cloud 项目中的特定 API 服务。
gcloud ai model-garden deploy-model gcloud 直接从 Vertex AI Model Garden 部署预训练模型到端点。
gcloud ai endpoints create gcloud 创建一个新的 Vertex AI 端点。
gcloud ai endpoints deploy-model gcloud 将模型部署到现有端点。通常在 model-garden deploy-model 内部完成。
gcloud ai endpoints predict gcloud 向已部署的 Vertex AI 端点发送在线预测请求。
gcloud ai batch-predictions create gcloud 创建一个批量预测作业,用于对存储在 GCS 中的大量数据进行推理。
gcloud ai endpoints delete gcloud 删除 Vertex AI 端点及其上部署的所有模型,停止计费。
gsutil CLI 命令行 Google Cloud Storage 的命令行工具,用于管理 GCS 桶和对象。
gsutil mb gsutil 创建一个新的 Cloud Storage 桶 (make bucket)。
gsutil cp gsutil 将文件从本地上传到 GCS 或从 GCS 下载到本地 (copy)。
gsutil ls gsutil 列出 GCS 桶或文件夹中的内容。
gsutil rm -r gsutil 递归删除 GCS 桶或文件夹及其内容。
Python SDK (google-cloud-aiplatform) Python 库 Vertex AI 的 Python 客户端库,提供了更编程化、更灵活的方式来与 Vertex AI 服务进行交互,包括模型部署、预测等。

📝 本期要点回顾

  • Vertex AI Model Garden 提供了便捷的途径,让用户能够快速发现并部署 Google Gemma 等开源大语言模型,极大地简化了部署流程。
  • API 端点 是模型对外提供推理服务的核心,它封装了底层计算资源和扩缩容逻辑,允许应用程序通过标准 API 调用进行交互。
  • 自动扩缩容 是 Vertex AI 的一项关键能力,能够根据流量负载动态调整模型副本数量,从而在保证服务性能的同时,有效控制运营成本。
  • 在线推理 适用于实时、低延迟的交互式应用场景,通过 API 端点接收单个或少量请求并即时返回结果。
  • 批量推理 则针对大规模、非实时的场景,通过处理存储在云存储中的大量数据,将推理结果输出到指定位置。
  • gcloud CLI 和 Python SDK 是在 Vertex AI 上部署和管理 Gemma 模型并进行推理的强大工具,提供了高度的自动化和灵活性。

🔗 参考资料