2020 年 4 月 10 日 - 作者:Sara Robinson,开发者倡导者
Google Cloud 的 AI Platform 最近添加了 对部署 TensorFlow 2 模型的支持。这使您能够以可扩展的方式向最终用户提供预测,而无需管理自己的基础设施。在这篇文章中,我将引导您完成将两种不同类型的 TF2 模型部署到 AI Platform 的过程,并使用它们通过 AI Platfo…
probability_model
,因为它以更易于人类理解的格式输出分类。probability_model
的输出是一个 10 元素的 softmax 数组,其中包含给定图像属于每个类别的概率。由于它是 softmax 数组,所有元素加起来为 1。置信度最高的分类将是与具有最高值的索引相对应的服装项目。from google.colab import auth
auth.authenticate_user()
然后运行以下代码,将“your-project-id-here”替换为您创建的 Cloud 项目的 IDCLOUD_PROJECT = 'your-project-id-here'
BUCKET = 'gs://' + CLOUD_PROJECT + '-tf2-models'
对于接下来的几个代码片段,我们将使用 gcloud:Google Cloud CLI 以及 gsutil,用于与 Google Cloud Storage 交互的 CLI。运行以下行以使用您创建的项目配置 gcloud!gcloud config set project $CLOUD_PROJECT
在下一步中,我们将创建一个 Cloud Storage 存储桶并打印我们的 GCS 存储桶 URL。这将用于存储您的保存模型。您只需要运行此单元格一次!gsutil mb $BUCKET
print(BUCKET)
Cloud AI Platform 期望我们的模型采用 TensorFlow 2 SavedModel 格式。为了将我们的模型以这种格式导出到我们刚刚创建的存储桶,我们可以运行以下命令。model.save()
方法接受 GCS 存储桶 URL。我们将保存我们的模型资产到 fashion-mnist
子目录中probability_model.save(BUCKET + '/fashion-mnist', save_format='tf')
为了验证这是否已正确导出到您的存储桶,请在 Cloud Console 中导航到您的存储桶(访问存储 -> 浏览器)。您应该看到类似于以下内容MODEL = 'fashion_mnist'
!gcloud ai-platform models create $MODEL --regions=us-central1
运行完此操作后,您应该在 AI Platform Cloud Console 的 模型部分 中看到该模型VERSION = 'v1'
MODEL_DIR = BUCKET + '/fashion-mnist'
最后,运行此 gcloud 命令以部署模型!gcloud ai-platform versions create $VERSION \
--model $MODEL \
--origin $MODEL_DIR \
--runtime-version=2.1 \
--framework='tensorflow' \
--python-version=3.7
此命令可能需要一分钟才能完成。当您的模型版本准备就绪时,您应该在 Cloud Console 中看到以下内容import googleapiclient.discovery
def predict_json(project, model, instances, version=None):
service = googleapiclient.discovery.build('ml', 'v1')
name = 'projects/{}/models/{}'.format(project, model)
if version is not None:
name += '/versions/{}'.format(version)
response = service.projects().predict(
name=name,
body={'instances': instances}
).execute()
if 'error' in response:
raise RuntimeError(response['error'])
return response['predictions']
我们将从将两个测试图像发送到我们的模型进行预测开始。为此,我们将从测试集中将这些图像转换为列表(使其成为有效的 JSON)并将其与我们的项目和模型一起发送到我们定义的方法test_predictions = predict_json(CLOUD_PROJECT, MODEL, test_images[:2].tolist())
在响应中,您应该看到一个 JSON 对象,其中 softmax 为键,10 元素的 softmax
概率列表为值。我们可以通过运行以下代码获取第一个测试图像的预测类别np.argmax(test_predictions[0]['softmax'])
我们的模型预测该图像的类别为 9,置信度为 98%。如果我们查看笔记本的开头,我们会发现 9 对应于踝靴。让我们绘制图像以验证我们的模型预测是否正确。看起来不错!plt.figure()
plt.imshow(test_images[0])
plt.colorbar()
plt.grid(False)
plt.show()
feature_columns
的值来查看这一点。这是我们模型期望的输入格式,这在我们将其部署后会很有用。除了将特征作为张量发送之外,我们还可以将它们作为列表发送到我们部署的模型。请注意,该模型混合了数值型和类别型特征。其中一个类别特征 (thal
) 应作为字符串传递;其余特征为整数或浮点数。hd-prediction
子目录中model.save(BUCKET + '/hd-prediction', save_format='tf')
验证模型资产是否已上传到您的存储桶。由于我们在上一节中演示了如何使用 gcloud 部署模型,因此这里我们将使用 Cloud Console。首先,在 Cloud Console 中 AI Platform 的模型部分中选择“新模型”转到 Cloud Console 的 模型部分。然后选择“新建模型”按钮,并为您的模型命名(例如 hd_prediction ),然后选择“创建”。创建模型资源后,选择“新建版本”。为其命名(例如 v1 ),然后选择最新的 Python 版本(在撰写本文时为 3.7)。在框架下,选择“TensorFlow”,框架版本为“2.1”,ML 运行时版本为“2.1”。在“模型 URL”中,输入您之前将 TF SavedModel 上传到的 Cloud Storage URL。如果按照上述步骤操作,这应该等效于 BUCKET + '/hd-prediction' 。然后选择“保存”,当您的模型完成部署后,您将在控制台中看到版本名称旁边有一个绿色的复选标记。 |
# First remove the label column
test = test.pop('target')
caip_instances = []
test_vals = test[:2].values
for i in test_vals:
example_dict = {k: [v] for k,v in zip(test.columns, i)}
caip_instances.append(example_dict)
以下是生成的 caip_instances
数组的样子[{'age': [60],
'ca': [2],
'chol': [293],
'cp': [4],
'exang': [0],
'fbs': [0],
'oldpeak': [1.2],
'restecg': [2],
'sex': [1],
'slope': [2],
'thal': ['reversible'],
'thalach': [170],
'trestbps': [140]},
...]
现在,我们可以调用上面定义的相同 predict_json
方法,将我们的新模型和测试实例传递给它。test_predictions = predict_json(CLOUD_PROJECT, 'hd_prediction', caip_instances)
您的响应将类似于以下内容(确切数字会有所不同)[{'output_1': [-1.4717596769332886]}, {'output_1': [-0.2714746594429016]}]
请注意,如果您想更改输出张量的名称(当前为 output_1
),您可以在上述教程中定义 Keras 模型时添加 name
参数。layers.Dense(1, name='prediction_probability')
除了使用 API 进行预测之外,您还可以使用 gcloud 发出预测请求。到目前为止,我们进行的所有预测请求都使用了在线预测,但 AI Platform 还支持针对大型离线作业的批处理预测。要创建批处理预测作业,您可以创建测试实例的 JSON 文件,并使用 gcloud 启动作业。您可以了解更多关于批处理预测的信息 此处。
2020 年 4 月 10 日 — 由 Sara Robinson 撰写,开发者倡导者
Google Cloud 的 AI Platform 最近添加了 对部署 TensorFlow 2 模型的支持。这使您能够以可扩展的方式为最终用户提供预测,而无需管理自己的基础设施。在这篇文章中,我将引导您完成将两种不同类型的 TF2 模型部署到 AI Platform 并使用它们来生成 AI Platform 的预测的过程…