第 04 期 | Google Cloud Vertex AI 云端部署
🎯 学习目标
- 理解 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 模型,并进行在线推理与批量推理。
前置条件:
- 一个已启用计费的 Google Cloud 项目。
- 已安装并配置
gcloudCLI 工具,且已认证到您的项目。 - 已启用 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。在控制台部署流程为:
- 导航到 Vertex AI -> Model Garden。
- 搜索并选择
Gemma。 - 点击您想部署的模型版本(例如
gemma-2b-it),然后点击 "Deploy"。 - 配置端点名称、区域、机器类型、加速器类型和数量、以及最小/最大副本数,然后点击 "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 端点接收单个或少量请求并即时返回结果。
- 批量推理 则针对大规模、非实时的场景,通过处理存储在云存储中的大量数据,将推理结果输出到指定位置。
gcloudCLI 和 Python SDK 是在 Vertex AI 上部署和管理 Gemma 模型并进行推理的强大工具,提供了高度的自动化和灵活性。
🔗 参考资料
- Gemma on Vertex AI 文档: https://cloud.google.com/vertex-ai/docs/generative-ai/model-garden/gemma
- Vertex AI Model Garden 概览: https://cloud.google.com/vertex-ai/docs/model-garden/overview
- Vertex AI 部署模型到端点: https://cloud.google.com/vertex-ai/docs/predictions/deploy-model-api
- Vertex AI 批量预测: https://cloud.google.com/vertex-ai/docs/predictions/batch-predictions