Google Cloud Platform机器学习实战:模型部署与预测指南
概述
本文将详细介绍如何在Google Cloud Platform上部署训练好的机器学习模型,并利用该模型进行在线预测和批量预测。我们将以预测新生儿体重的模型为例,展示完整的模型部署流程和预测实现方法。
环境准备
在开始之前,我们需要设置一些环境变量,确保所有操作都在正确的项目和存储桶中进行:
PROJECT = "your-project-id" # 替换为您的项目ID
BUCKET = "your-bucket-name" # 替换为您的存储桶名称
REGION = "us-central1" # 选择Cloud MLE可用的区域
TFVERSION = "1.14" # 指定TensorFlow版本
import os
os.environ["BUCKET"] = BUCKET
os.environ["PROJECT"] = PROJECT
os.environ["REGION"] = REGION
os.environ["TFVERSION"] = TFVERSION
模型部署流程
1. 检查并准备模型存储
首先,我们需要确保训练好的模型已经存储在Cloud Storage中:
if ! gsutil ls -r gs://${BUCKET} | grep -q gs://${BUCKET}/babyweight/trained_model/; then
gsutil mb -l ${REGION} gs://${BUCKET}
gsutil -m cp -R gs://cloud-training-demos/babyweight/trained_model gs://${BUCKET}/babyweight/trained_model
fi
2. 清理现有模型版本
在部署新模型前,最好先检查并清理可能存在的旧版本:
MODEL_NAME="babyweight"
MODEL_VERSION="ml_on_gcp"
if gcloud ai-platform models list | grep "$MODEL_NAME \+ $MODEL_VERSION"; then
echo "删除模型版本 '$MODEL_VERSION'"
yes | gcloud ai-platform versions delete ${MODEL_VERSION} --model=$MODEL_NAME
echo "删除模型 '$MODEL_NAME'"
yes | gcloud ai-platform models delete ${MODEL_NAME}
else
echo "模型 '$MODEL_NAME' 版本 '$MODEL_VERSION' 不存在"
fi
3. 部署新模型
确定最新的模型二进制文件位置并部署:
MODEL_LOCATION=$(gsutil ls gs://${BUCKET}/babyweight/trained_model/export/exporter/ | tail -1)
echo "正在部署模型 '$MODEL_NAME' 版本 '$MODEL_VERSION' 从 $MODEL_LOCATION"
echo "这个过程可能需要几分钟..."
# 创建模型
gcloud ai-platform models create ${MODEL_NAME} --regions=${REGION}
# 创建模型版本
gcloud ai-platform versions create ${MODEL_VERSION} \
--model=${MODEL_NAME} \
--origin=${MODEL_LOCATION} \
--runtime-version=${TFVERSION} \
--python-version=3.5
在线预测实现
部署完成后,我们可以通过REST API进行在线预测:
from oauth2client.client import GoogleCredentials
import requests
import json
MODEL_NAME = "babyweight"
MODEL_VERSION = "ml_on_gcp"
# 获取认证token
token = GoogleCredentials.get_application_default().get_access_token().access_token
# 构建API端点
api = f"https://ml.googleapis.com/v1/projects/{PROJECT}/models/{MODEL_NAME}/versions/{MODEL_VERSION}:predict"
headers = {"Authorization": "Bearer " + token}
data = {
"instances": [
{
"is_male": "True",
"mother_age": 26.0,
"plurality": "Single(1)",
"gestation_weeks": 39
},
{
"is_male": "False",
"mother_age": 29.0,
"plurality": "Single(1)",
"gestation_weeks": 38
},
{
"is_male": "True",
"mother_age": 26.0,
"plurality": "Triplets(3)",
"gestation_weeks": 39
},
{
"is_male": "Unknown",
"mother_age": 29.0,
"plurality": "Multiple(2+)",
"gestation_weeks": 38
}
]
}
# 发送预测请求
response = requests.post(api, json=data, headers=headers)
print(response.content)
批量预测实现
对于大规模预测任务,批量预测是更高效的选择:
1. 准备输入数据
首先创建包含预测实例的JSON文件:
%%writefile inputs.json
{"is_male": "True", "mother_age": 26.0, "plurality": "Single(1)", "gestation_weeks": 39}
{"is_male": "False", "mother_age": 26.0, "plurality": "Single(1)", "gestation_weeks": 39}
2. 提交批量预测任务
将输入文件上传到Cloud Storage并提交批量预测任务:
INPUT=gs://${BUCKET}/babyweight/batchpred/inputs.json
OUTPUT=gs://${BUCKET}/babyweight/batchpred/outputs
# 上传输入文件
gsutil cp inputs.json ${INPUT}
# 清空输出目录
gsutil rm -rf ${OUTPUT}
# 提交批量预测任务
gcloud ai-platform jobs submit prediction babyweight_batchpred_$(date +"%Y%m%d_%H%M%S") \
--data-format=text \
--region=${REGION} \
--input-paths=${INPUT} \
--output-path=${OUTPUT} \
--model=babyweight \
--version=ml_on_gcp
3. 检查预测结果
任务完成后,可以查看预测结果:
gsutil ls gs://$BUCKET/babyweight/batchpred/outputs
gsutil cat gs://$BUCKET/babyweight/batchpred/outputs/prediction.results*
在线预测与批量预测对比
| 特性 | 在线预测 | 批量预测 | |------|---------|---------| | 延迟 | 低延迟(毫秒级) | 高延迟(分钟到小时) | | 吞吐量 | 适合少量请求 | 适合大规模预测 | | 成本 | 按请求计费 | 按资源使用时间计费 | | 使用场景 | 实时应用 | 离线数据处理 |
最佳实践建议
- 模型版本管理:为每个部署创建新版本,便于回滚和A/B测试
- 监控预测:设置监控以跟踪预测延迟和错误率
- 输入验证:在客户端验证输入数据格式,减少无效请求
- 批量大小:对于批量预测,合理设置每个任务的大小以平衡效率和资源使用
- 错误处理:实现健壮的错误处理机制,特别是对于在线预测
通过本文的指导,您应该已经掌握了在Google Cloud Platform上部署机器学习模型并进行预测的完整流程。无论是实时应用还是大规模数据处理,都能找到合适的预测解决方案。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考