在Cloud AI Platform上部署Keras婴儿体重预测模型实战教程
前言
本教程将详细介绍如何将训练好的Keras模型部署到Cloud AI Platform,并实现在线预测和批量预测功能。这是机器学习项目从开发到生产部署的关键环节,特别适合需要将模型服务化的应用场景。
环境准备
在开始之前,我们需要确保已经完成以下准备工作:
- 已完成Keras模型的训练(如未完成,请先完成模型训练步骤)
- 已创建Google Cloud项目并设置好相关权限
- 已安装必要的Python库和Google Cloud SDK
环境变量设置
首先我们需要设置一些环境变量,这些变量将在整个部署过程中使用:
import os
# 设置项目相关变量
PROJECT = "your-project-name" # 替换为你的GCP项目名称
BUCKET = PROJECT # 存储桶名称通常与项目名称相同
REGION = "us-central1" # 选择合适的地域
# 将变量导出到环境
os.environ["BUCKET"] = BUCKET
os.environ["REGION"] = REGION
os.environ["TFVERSION"] = "2.1" # 指定TensorFlow版本
检查训练好的模型
在部署之前,我们需要确认训练好的模型文件已正确存储在Google Cloud Storage中:
# 列出模型存储位置
gsutil ls gs://${BUCKET}/babyweight/trained_model
# 获取最新的模型版本路径
MODEL_LOCATION=$(gsutil ls -ld -- gs://${BUCKET}/babyweight/trained_model/2* | tail -1)
gsutil ls ${MODEL_LOCATION}
模型目录应包含以下关键文件:
saved_model.pb
:模型结构定义文件variables/
:包含模型权重和偏置等参数assets/
:可能包含的额外资源文件
模型部署到Cloud AI Platform
将训练好的Keras模型部署为在线服务非常简单:
MODEL_NAME="babyweight" # 模型名称
MODEL_VERSION="ml_on_gcp" # 版本名称
# 创建AI Platform模型
gcloud ai-platform models create ${MODEL_NAME} --regions ${REGION}
# 创建模型版本
gcloud ai-platform versions create ${MODEL_VERSION} \
--model=${MODEL_NAME} \
--origin=${MODEL_LOCATION} \
--runtime-version=2.1 \
--python-version=3.7
部署过程可能需要几分钟时间,完成后模型就可以接收预测请求了。
在线预测实现
使用Python API进行预测
我们可以通过Python代码发送JSON请求到模型端点进行预测:
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 = "https://ml.googleapis.com/v1/projects/{}/models/{}/versions/{}:predict" \
.format(PROJECT, MODEL_NAME, MODEL_VERSION)
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
}
]
}
# 发送预测请求
response = requests.post(api, json=data, headers=headers)
print(response.content)
使用gcloud命令行工具预测
对于快速测试,我们可以使用gcloud命令行工具:
# 创建包含预测数据的JSON文件
echo '{"is_male": "True", "mother_age": 26.0, "plurality": "Single(1)", "gestation_weeks": 39}' > inputs.json
echo '{"is_male": "False", "mother_age": 26.0, "plurality": "Single(1)", "gestation_weeks": 39}' >> inputs.json
# 执行预测
gcloud ai-platform predict \
--model=babyweight \
--json-instances=inputs.json \
--version=ml_on_gcp
批量预测实现
当需要处理大量预测请求时,批量预测是更高效的选择:
# 设置输入输出路径
INPUT=gs://${BUCKET}/babyweight/batchpred/inputs.json
OUTPUT=gs://${BUCKET}/babyweight/batchpred/outputs
# 上传输入数据
gsutil cp inputs.json $INPUT
# 清理旧输出目录
gsutil -m rm -rf $OUTPUT
# 提交批量预测作业
gcloud ai-platform jobs submit prediction babypred_$(date -u +%y%m%d_%H%M%S) \
--data-format=TEXT \
--region ${REGION} \
--input-paths=$INPUT \
--output-path=$OUTPUT \
--model=babyweight \
--version=ml_on_gcp
批量预测作业提交后,可以在Google Cloud Console中监控作业状态,预测结果将存储在指定的输出路径中。
最佳实践与注意事项
-
模型版本管理:建议为每个新部署的模型创建新版本,而不是覆盖旧版本,便于回滚和A/B测试。
-
资源监控:部署后监控模型的资源使用情况,根据需要调整资源配置。
-
输入验证:在生产环境中,应该对输入数据进行验证,确保符合模型预期。
-
错误处理:实现完善的错误处理机制,特别是对于在线预测服务。
-
性能优化:对于高并发场景,考虑启用自动扩缩功能。
总结
本教程详细介绍了如何将Keras模型部署到Cloud AI Platform,并实现两种预测方式:
- 在线预测:适合低延迟、实时性要求高的场景
- 批量预测:适合处理大量数据、对延迟不敏感的场景
通过本教程,您应该已经掌握了将机器学习模型从训练到生产部署的完整流程。在实际应用中,可以根据具体需求选择合适的预测方式,并考虑加入监控、日志记录等生产级功能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考