尽管大多数人将 Google 与搜索引擎联系在一起,但该公司在数据科学领域同样根基深厚,持续推出旨在最大化数据价值的前沿产品与解决方案。其中一款产品 Vertex AI 于 2021 年发布,旨在简化企业级的机器学习流程。
在本教程中,我们将学习如何开始使用 Google 的 Vertex AI 平台,以及如何用它覆盖机器学习生命周期中的各类任务。完成后,我们将部署一个可用于分类任务预测请求的模型。
什么是 Vertex AI?
一个典型的机器学习生命周期包含多个阶段:
数据准备、摄取与探索
特征工程与特征选择
模型训练与调优
部署与模型监控
所有这些阶段及其子阶段都需要不同的工具集和多学科团队协作。
Google Cloud 的 Vertex AI 将这一整套流程精简并统一到单一平台中。
虽然大规模 ML 应用需要经验丰富的专家,但 Vertex AI 让各个技能水平的用户都能受益:
面向初学者的 AutoML: 无需编码经验。只需导入数据,点几下,AutoML 就能为您生成高质量模型。数据准备、模型构建(包括算法选择与超参数调优)等繁重工作都在幕后完成。
面向专家的自定义模型训练: 经验越多,空间越大。对于资深数据科学家和ML 工程师 ,Vertex AI 提供使用 PyTorch、TensorFlow 或 XGBoost 等偏好框架训练模型的灵活性。
人人可用的部署: 无论是 AutoML 训练的模型还是自定义模型,Vertex AI 都能让部署变得轻而易举。您可以将模型发布为实时 API 集成到产品中,或使用批量预测处理大规模任务。
本节还有很多内容未提及,您将在接下来的教程中亲自实践它们。
什么是 Google Cloud Services?
在开始探索平台之前,我们需要先了解其“母体”——Google Cloud 服务。Google Cloud Services 提供了广泛的云计算解决方案,包括存储、网络、数据库、分析与机器学习能力。
这些服务与 Vertex AI 协同工作,统一您的机器学习工作流。以下是常与 Vertex AI 搭配使用的服务拆解:
数据存储与管理
Cloud Storage: 作为原始数据的中心存储库,Vertex AI 可访问其中数据进行训练与分析。
BigQuery: 强大的数据仓库,可存储并查询大型数据集,使 Vertex AI 能使用 BigQuery ML 在套件内完成训练。
计算资源
Compute Engine: 提供多种配置的虚拟机,满足自定义模型训练需求。Vertex AI 可连接这些机器执行资源密集型训练任务。
Vertex AI Pipelines: 在多种计算资源间协调复杂的 ML 工作流以提升效率。
访问 cloud.google.com,您随时可通过 Google 账号使用 Google Cloud 服务。若从未使用过,点击“Get started for free”开始免费试用。
否则,直接前往 console.cloud.google.com ,我们就可以开始了。
为 Vertex AI 设置 Google Cloud Console
免责声明: 如果您打算跟随教程实操,请预留 25-30 美元的 Vertex AI 费用。我们将使用最便宜的配置。
访问 Google Cloud Console 后,您很可能会看到如下欢迎页:
页面显示了您的工作区名称;我的为 ibexprogramming.com。
我们要做的第一件事是创建一个项目。Google Cloud 项目是用于管理特定任务资源的高层组织单元。如下 GIF 演示了创建流程:
项目创建完成后,选择它,确保页面顶部工具条显示如下:
接下来,您需要创建一个结算账号,因为启用 Vertex AI 服务需要结算信息。别担心——在使用付费资源前不会扣费。前往 https://console.cloud.google.com/billing:
如果您像我一样还没有账号,点击“Create account”并按指引完成操作。我们将在下一部分将此结算账号与项目关联。
随后返回 https://console.cloud.google.com/ ,点击页面底部的“View all products”按钮:
下一页会列出为您的项目提供的所有 Google Cloud 服务。搜索“Vertex AI”(Ctrl + F),并将其固定到菜单以便访问,然后点击该服务:
这会带您进入 Vertex AI 的dashboard 。系统可能会弹窗询问是否启用 Vertex AI API——请选择“Enable”。如果未弹出,您也可以点击“Enable all API permissions”按钮来启用。
现在,我们已准备好向 Vertex AI 上传数据集。
在 Vertex AI 中上传数据集
向 Vertex AI 添加数据集的方式多种多样。本节我们为简便起见使用本地 CSV 文件。
下载示例数据集
本文将使用来自 UCI 机器学习库的Dry Bean 数据集 。其中包含 1.3 万条豆类样本及其 15 个数值测量。
我们的任务是将其分类为七种豆类:Seker、Barbunya、Bombay、Cali、Dermosan、Horoz 和 Sira。
下载完成后,将 ZIP 中的 Excel 文件保存到本地目录:
from pathlib import Path
cwd = Path. cwd( )
data_path = cwd / "data" / "Dry_Bean_Dataset.xlsx"
技术支持
随后,我们可以用 pandas 读取该文件并另存为 CSV:
import pandas as pd
beans = pd. read_excel( data_path)
beans. shape
技术支持
(13611, 17)技术支持
注意,read_excel 需要您通过 PIP 安装 openpyxl 库。
很好,我们已经将数据集读取为 DataFrame。将其另存为 CSV:
beans. to_csv( cwd / "data" / "dry_bean.csv" , index= False ) 技术支持
创建云存储桶
如前所述,我们需要一个 Google Storage Bucket 来存放原始数据。按照下方 GIF 导航至该产品的控制台:
GIF 显示,开始使用存储服务前,我们需要关联一个结算账号,即使用刚创建的那个。然后,您就可以创建一个全局唯一名称的存储桶:
找到唯一名称后,连续点击“Continue”直至创建完成——所有字段均可保持默认选项。
现在,我们可以导入上一节保存的 CSV 文件了。
将本地 CSV 导入 Vertex AI
回到 Vertex AI 控制台,进入 Datasets 选项卡:
您会看到这里为空,点击“+Create”按钮:
为数据集起一个唯一名称,并选择“tabular”选项:
随后平台会显示数据源选项。选择上传本地 CSV 文件,并在 Cloud Storage 路径中选择您刚创建的存储桶:
数据集成功上传后,您会看到“Analyze”选项卡,显示有关 CSV 的基本元数据。您还会看到“TRAIN NEW MODEL”按钮,用于启动 AutoML 训练任务。
不过我们不会使用该按钮,因为它面向完全的 ML 初学者。相反,我们将使用 Vertex AI Workbench 来配置 Jupyterlab 编码环境与计算资源,以运行 AutoML 与自定义库。
在 Vertex AI Workbench 中配置 Jupyterlab 与计算资源
作为一体化平台,Vertex AI 也提供称为workbenches 的开发环境。要创建 workbench,进入其选项卡并按下方 GIF 操作:
每个 workbench 都预装了 Jupyterlab 3。因此,您只需根据预算和需求配置硬件选项。由于我们的数据集较小,为示例我选择了最低配实例,费用约 0.12 美元/小时(建议选择更多 CPU 核心以加速计算)。
我还将空闲关机时间改为 10 分钟,这样若忘记关闭,环境也会自动停止。
workbench 初始化需要一些时间。完成后会出现“OPEN JUPYTERLAB”按钮,点击进入:
您将看到熟悉的 Jupyterlab 界面。在其中创建一个新的 Python 3 笔记本,并按喜好重命名。在第一个单元中,安装/升级 Google Cloud 服务 SDK google-cloud-aiplatform:
!pip3 install - - upgrade - - quiet google- cloud- aiplatform
技术支持
然后,使用 gcloud config list 列出您账号下可用的项目:
!gcloud config list
技术支持
[compute]
region = us-central1
[core]
account = # HIDDEN #
disable_usage_reporting = True
project = vertexai-tutorial-423010
[dataproc]
region = us-central1
Your active configuration is: [default]
技术支持
gcloud 与 gsutil 是所有 workbench 中可用的终端工具。它们可高效管理您的 Google Cloud 服务。
根据上述输出,将以下信息保存为 Python 变量:
PROJECT_ID = 'vertexai-tutorial-423010'
BUCKET_URI = 'gs://vetex-tutorial-bucket-bex'
REGION = 'us-central1'
技术支持
别忘了将 BUCKET_URI 替换为您自己的存储桶名称。然后导入 aiplatform 子模块并进行初始化:
from google. cloud import aiplatform as ai
ai. init( project= PROJECT_ID, location= REGION, staging_bucket= BUCKET_URI)
技术支持
aiplatform 将作为与 Vertex AI 交互的 SDK。
完成教程或中途休息时,请务必 STOP 实例以避免不必要的费用。
在 Vertex AI 中训练与部署 AutoML 模型
现在,让我们用 AutoML 训练一个模型。正如之前所述,AutoML 会为我们处理繁重工作,并在给定数据集上返回其能训练出的最佳模型。这意味着要充分发挥 AutoML 的效果,您必须确保输入的数据集尽可能高质量。因此,值得在此之前花些时间进行特征工程与预处理。
AutoML 会在内部对数据集进行预处理,但无法修复数据集中所有问题。
不过,本节我们将仅训练一个不做预处理或特征工程的基线 AutoML 模型以求简洁。
从 Google Storage 存储桶加载数据
首先,我们希望从存储桶加载 CSV 数据集,并花些时间探索它。请记住, EDA 非常重要,您可以在我们的Python 探索性数据分析课程 中进一步学习!
import pandas as pd
gcs_path = "gs://vertex-tutorial-bucket-bex/dry_bean.csv"
beans = pd. read_csv( gcs_path)
beans. head( )
技术支持
好消息是,pandas 可以直接从 GCS 路径下载文件。唯一要注意的是,上述代码仅在 Vertex AI workbench 中可行,因为它们已使用您的 Google Cloud 凭据完成了认证。
在 Vertex AI 中用 pandas 探索数据
我们不会对数据集进行深入分析,以免偏离本文重点。因此,我们仅打印一些汇总统计和图表:
beans. info( )
技术支持
< class 'pandas.core.frame.DataFrame' >
RangeIndex: 13611 entries, 0 to 13610
Data columns (total 17 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Area 13611 non-null int64
1 Perimeter 13611 non-null float64
2 MajorAxisLength 13611 non-null float64
3 MinorAxisLength 13611 non-null float64
4 AspectRation 13611 non-null float64
5 Eccentricity 13611 non-null float64
6 ConvexArea 13611 non-null int64
7 EquivDiameter 13611 non-null float64
8 Extent 13611 non-null float64
9 Solidity 13611 non-null float64
10 roundness 13611 non-null float64
11 Compactness 13611 non-null float64
12 ShapeFactor1 13611 non-null float64
13 ShapeFactor2 13611 non-null float64
14 ShapeFactor3 13611 non-null float64
15 ShapeFactor4 13611 non-null float64
16 Class 13611 non-null object
dtypes: float64(14), int64(2), object(1)
memory usage: 1.8+ MB
技术支持
共有 15 个数值特征和 1 个目标列——Class。大约 1.3 万条记录且无缺失值,这会大大简化训练。
将特征名保存到一个列表,后续可能会用到:
feature_names = beans. columns. tolist( )
技术支持
现在,为几项看起来较重要的特征绘制配对图:
import seaborn as sns
sns. pairplot(
beans,
vars = [ "Area" , "MajorAxisLength" , "MinorAxisLength" , "Eccentricity" , "roundness" ] ,
hue= "Class" ,
) ;
技术支持
我们看到了一些有趣的趋势——主要是 Bombay(绿色)豆在其物理测量上与其他类别明显分离。
再绘制一个相关系数矩阵:
import matplotlib. pyplot as plt
correlation = beans. corr( numeric_only= True )
sns. heatmap( correlation, center= 0 , square= True , cmap= "coolwarm" , vmin= - 1 , vmax= 1 )
plt. show( )
技术支持
我们有一些几乎完全相关的特征,这很合理,因为它们都与物理测量相关。但也有一些特征对几乎不相关或仅有很小相关性。
此处我将探索权交给您,可继续深入并尝试为数据集提出一些可验证的问题。
运行 AutoML 训练任务
要启动 AutoML 训练任务,我们首先需要一个与之兼容的数据集对象:
ds = ai. TabularDataset. create(
display_name= "dry_bean_dataset" , gcs_source= gcs_path
)
技术支持
TabularDataset created.
技术支持
type ( ds) 技术支持
google.cloud.aiplatform.datasets.tabular_dataset.TabularDataset
技术支持
ds. resource_name
技术支持
'projects/10783853768/locations/us-central1/datasets/4978116960081412096'
技术支持
我们使用 TabularDataset.create 方法初始化为 ds。Vertex AI 会为其分配自己的名称,可通过 resource_name 属性访问。
接着用 ai.AutoMLTabularTrainingJob 类初始化训练任务。它需要两个参数:
job = ai. AutoMLTabularTrainingJob(
display_name= "dry-bean-classification" ,
optimization_prediction_type= "classification" ,
)
技术支持
然后运行该任务的 run 方法:
model = job. run(
dataset= ds,
target_column= "Class" ,
training_fraction_split= 0.8 ,
validation_fraction_split= 0.1 ,
test_fraction_split= 0.1 ,
model_display_name= "baseline-classification-model" ,
disable_early_stopping= False ,
)
技术支持
参数基本不言自明。代码执行需要一段时间(取决于计算资源)。
如果前往控制台“MODEL DEVELOPMENT > TRAINING”选项卡并点击任务名称,您可查看实时训练进度。下图显示训练处于预处理阶段:
查看结果
训练完成后,回到训练选项卡并点击模型名称。这次会显示与模型相关的性能指标:
如您所见,即使作为基线模型,指标也非常不错,均高于 0.90。
部署 AutoML 模型并生成预测
现在我们只需一行代码即可部署该 model:
endpoint = model. deploy( machine_type= "n1-standard-4" )
技术支持
deploy 方法仅需要一个参数——用于推理的机器类型。由于只要上线部署就会产生额外费用,我不会实际运行上述代码。
不过,如果您运行了它,deploy 方法会返回一个可供发送请求的 Endpoint 对象:
prediction = endpoint. predict(
[
{
"Area" : "30099" ,
"Perimeter" : "638.8209999999999" ,
"MajorAxisLength" : "237.14191130827916" ,
"MinorAxisLength" : "162.3034300714102" ,
"AspectRation" : "1.4611022774068396" ,
"Eccentricity" : "0.7290928631259719" ,
"ConvexArea" : "30477" ,
"EquivDiameter" : "195.76321681302556" ,
"Extent" : "0.8036043251902283" ,
"Solidity" : "0.9875972044492568" ,
"roundness" : "0.9268374259664279" ,
"Compactness" : "0.8255108332939839" ,
"ShapeFactor1" : "0.007878730566074592" ,
"ShapeFactor2" : "0.002256976927384019" ,
"ShapeFactor3" : "0.6814681358857279" ,
"ShapeFactor4" : "0.9956946453228307" ,
}
]
)
print ( prediction)
技术支持
它的 predict 方法接受一个样本列表进行预测。样本必须以 JSON 格式提供。
您也可以通过控制台部署模型。前往“MODEL REGISTRY”选项卡,会看到已列出的模型。点击其名称并选择“DEPLOY & TEST”选项卡:
点击“DEPLOY TO ENDPOINT”按钮会跳转至单独页面,您可在其中配置用于部署模型的机器。但在此之前,您可以在部署按钮下方的区域进行测试:
在 Vertex AI 中训练与部署自定义模型
在 Vertex AI 中部署自定义模型比 AutoML 模型更具挑战,也更昂贵,因为除了 Workbench 与部署成本之外,还会涉及一些Docker 容器 。如果您准备好了,那就开始吧!
Vertex AI 自定义训练的高层概览
自定义训练从自定义模型训练脚本开始。在该脚本中,我们可以做任何事,只要它:
从 GCS 存储桶加载数据
使用某个 ML 框架(TF、PyTorch、Scikit-learn、XGBoost)训练模型
可选地,对模型进行超参数调优
将训练或调优后的模型保存回 GCS 存储桶。
随后,需要将该训练脚本打包为 Docker 容器并推送至 Google Container Registry。之后,我们可以通过 Vertex AI 的 Python SDK 或控制台来训练该自定义模型。
为训练代码创建目录结构
首先,按照这份 Google Codelab 的推荐创建目录结构。在 workbench 中通过新建 launcher 切换到终端:
然后,新建名为“dry-beans”的目录并进入:
$ mkdir dry- beans
$ cd dry- beans/
技术支持
在 dry-beans 内创建 trainer 目录,并在其中创建 train.py 文件:
$ mkdir trainer
$ touch trainer/ train. py
技术支持
创建 Dockerfile
接着,新建一个 Dockerfile:
$ touch Dockerfile
技术支持
打开文件并粘贴以下内容:
FROM gcr. io/ deeplearning- platform- release/ tf2- cpu. 2 - 6
WORKDIR /
COPY trainer / trainer
RUN pip install xgboost== 1.6 .2
ENTRYPOINT [ "python" , "-m" , "trainer.train" ]
技术支持
该 Dockerfile 使用 Google Container Registry 提供的官方深度学习镜像(预装 TensorFlow)。文件会复制我们的 trainer 目录并安装 XGBoost。最后会运行我们的 Python 脚本。
编写训练脚本
脚本需要从我们的 GCP 存储桶加载 Dry Beans 数据集,在其上训练一个 XGBoost 分类器,并将模型保存回存储桶。为此我编写了一个简单脚本,完成上述任务,已放在这个 GitHub gist (为节省篇幅,此处不贴出)。
将 gist 中的代码复制到 train.py。然后回到终端,安装 XGBoost(所选 Workbench 未预装),并运行脚本:
$ pip install xgboost== 1.6 .2
$ python trainer/ train. py
技术支持
构建 Docker 镜像
如果脚本运行无误,继续在终端输入这两个变量:
$ PROJECT_ID= 'vertexai-tutorial-423010'
$ IMAGE_URI= "gcr.io/$PROJECT_ID/dry-beans:v1"
技术支持
这些变量将在构建容器时使用,执行:
$ docker build . / - t $IMAGE_URI
技术支持
构建需要一些时间。完成后运行容器,确认一切正常:
$ docker run $IMAGE_URI
技术支持
Model trained successfully!
Model uploaded successfully!
技术支持
如果您看到以上成功信息,容器就可以推送了:
$ docker push $IMAGE_URI技术支持
创建自定义训练任务
到这里大部分工作已完成。现在可切换至控制台,使用刚推送的容器创建自定义训练任务。进入“MODEL REGISTRY”选项卡并点击“CREATE”:
训练方法选择“No managed dataset”和“Custom training”。在下一步(Model details)中,为模型命名——dry-beans-classifier。
在训练容器面板中:
选择我们推送的自定义镜像作为容器,并选择 cloud-ai-platform 存储桶作为模型输出。然后点击继续,直到到达“Compute and pricing”面板:
选择一台标准 n1、4 CPU 的机器,最后点击“START TRAINING”。然后切换到控制台的“TRAINING”选项卡。
此时您会看到两种情况之一:
训练失败状态
训练进行中状态
我遇到的是第一种情况,让我们点击模型名称排查原因:
错误提示我超出了允许的自定义训练 CPU 数量。我进一步调查后,结果相当令人失望。
通常,GCP 会为任一计算区域提供至少 20 个 CPU 配额,但检查我的配置文件后发现配额只有 1。这意味着我无法运行任何自定义训练任务,因为 Google 提供的机器至少需要两个 CPU。
我尝试按照这篇 StackOverflow 贴 中的答案提升配额,但没有成功。系统提示新的 Vertex AI 用户仅允许 1 个 CPU 单元。若想提升配额,需要提交支持工单,而这并非免费(需要付费支持合约)。
因此,如果您也不走运,可以先尝试该 SO 贴中的方法。对部分用户有效;若仍无效,唯一选项就是联系支持。
但如果您够幸运,训练顺利完成,那么就可以按照我们对 AutoML 模型的步骤进行部署。
结语
Vertex AI 是一个功能庞大的平台。在本教程中,我们只触及了皮毛,但已经覆盖了平台最重要的构件。掌握存储桶、workbench 与训练任务的创建后,您将有足够能力继续探索平台的其余部分。
如果您想进一步了解 Google Cloud 服务,推荐阅读:
尽管大多数人将 Google 与搜索引擎联系在一起,但该公司在数据科学领域同样根基深厚,持续推出旨在最大化数据价值的前沿产品与解决方案。其中一款产品 Vertex AI 于 2021 年发布,旨在简化企业级的机器学习流程。
在本教程中,我们将学习如何开始使用 Google 的 Vertex AI 平台,以及如何用它覆盖机器学习生命周期中的各类任务。完成后,我们将部署一个可用于分类任务预测请求的模型。
什么是 Vertex AI?
一个典型的机器学习生命周期包含多个阶段:
所有这些阶段及其子阶段都需要不同的工具集和多学科团队协作。
Google Cloud 的 Vertex AI 将这一整套流程精简并统一到单一平台中。
虽然大规模 ML 应用需要经验丰富的专家,但 Vertex AI 让各个技能水平的用户都能受益:
本节还有很多内容未提及,您将在接下来的教程中亲自实践它们。
什么是 Google Cloud Services?
在开始探索平台之前,我们需要先了解其“母体”——Google Cloud 服务。Google Cloud Services 提供了广泛的云计算解决方案,包括存储、网络、数据库、分析与机器学习能力。
这些服务与 Vertex AI 协同工作,统一您的机器学习工作流。以下是常与 Vertex AI 搭配使用的服务拆解:
数据存储与管理
计算资源
访问 cloud.google.com,您随时可通过 Google 账号使用 Google Cloud 服务。若从未使用过,点击“Get started for free”开始免费试用。
否则,直接前往 console.cloud.google.com,我们就可以开始了。
为 Vertex AI 设置 Google Cloud Console
免责声明:如果您打算跟随教程实操,请预留 25-30 美元的 Vertex AI 费用。我们将使用最便宜的配置。
访问 Google Cloud Console 后,您很可能会看到如下欢迎页:
页面显示了您的工作区名称;我的为
ibexprogramming.com。我们要做的第一件事是创建一个项目。Google Cloud 项目是用于管理特定任务资源的高层组织单元。如下 GIF 演示了创建流程:
项目创建完成后,选择它,确保页面顶部工具条显示如下:
接下来,您需要创建一个结算账号,因为启用 Vertex AI 服务需要结算信息。别担心——在使用付费资源前不会扣费。前往 https://console.cloud.google.com/billing:
如果您像我一样还没有账号,点击“Create account”并按指引完成操作。我们将在下一部分将此结算账号与项目关联。
随后返回 https://console.cloud.google.com/,点击页面底部的“View all products”按钮:
下一页会列出为您的项目提供的所有 Google Cloud 服务。搜索“Vertex AI”(Ctrl + F),并将其固定到菜单以便访问,然后点击该服务:
这会带您进入 Vertex AI 的dashboard。系统可能会弹窗询问是否启用 Vertex AI API——请选择“Enable”。如果未弹出,您也可以点击“Enable all API permissions”按钮来启用。
现在,我们已准备好向 Vertex AI 上传数据集。
在 Vertex AI 中上传数据集
向 Vertex AI 添加数据集的方式多种多样。本节我们为简便起见使用本地 CSV 文件。
下载示例数据集
本文将使用来自 UCI 机器学习库的Dry Bean 数据集。其中包含 1.3 万条豆类样本及其 15 个数值测量。
我们的任务是将其分类为七种豆类:Seker、Barbunya、Bombay、Cali、Dermosan、Horoz 和 Sira。
下载完成后,将 ZIP 中的 Excel 文件保存到本地目录:
随后,我们可以用 pandas 读取该文件并另存为 CSV:
注意,
read_excel需要您通过 PIP 安装openpyxl库。很好,我们已经将数据集读取为 DataFrame。将其另存为 CSV:
创建云存储桶
如前所述,我们需要一个 Google Storage Bucket 来存放原始数据。按照下方 GIF 导航至该产品的控制台:
GIF 显示,开始使用存储服务前,我们需要关联一个结算账号,即使用刚创建的那个。然后,您就可以创建一个全局唯一名称的存储桶:
找到唯一名称后,连续点击“Continue”直至创建完成——所有字段均可保持默认选项。
现在,我们可以导入上一节保存的 CSV 文件了。
将本地 CSV 导入 Vertex AI
回到 Vertex AI 控制台,进入 Datasets 选项卡:
您会看到这里为空,点击“+Create”按钮:
为数据集起一个唯一名称,并选择“tabular”选项:
随后平台会显示数据源选项。选择上传本地 CSV 文件,并在 Cloud Storage 路径中选择您刚创建的存储桶:
数据集成功上传后,您会看到“Analyze”选项卡,显示有关 CSV 的基本元数据。您还会看到“TRAIN NEW MODEL”按钮,用于启动 AutoML 训练任务。
不过我们不会使用该按钮,因为它面向完全的 ML 初学者。相反,我们将使用 Vertex AI Workbench 来配置 Jupyterlab 编码环境与计算资源,以运行 AutoML 与自定义库。
在 Vertex AI Workbench 中配置 Jupyterlab 与计算资源
作为一体化平台,Vertex AI 也提供称为workbenches的开发环境。要创建 workbench,进入其选项卡并按下方 GIF 操作:
每个 workbench 都预装了 Jupyterlab 3。因此,您只需根据预算和需求配置硬件选项。由于我们的数据集较小,为示例我选择了最低配实例,费用约 0.12 美元/小时(建议选择更多 CPU 核心以加速计算)。
我还将空闲关机时间改为 10 分钟,这样若忘记关闭,环境也会自动停止。
workbench 初始化需要一些时间。完成后会出现“OPEN JUPYTERLAB”按钮,点击进入:
您将看到熟悉的 Jupyterlab 界面。在其中创建一个新的 Python 3 笔记本,并按喜好重命名。在第一个单元中,安装/升级 Google Cloud 服务 SDK
google-cloud-aiplatform:然后,使用
gcloud config list列出您账号下可用的项目:gcloud与gsutil是所有 workbench 中可用的终端工具。它们可高效管理您的 Google Cloud 服务。根据上述输出,将以下信息保存为 Python 变量:
别忘了将
BUCKET_URI替换为您自己的存储桶名称。然后导入 aiplatform 子模块并进行初始化:aiplatform将作为与 Vertex AI 交互的 SDK。完成教程或中途休息时,请务必 STOP 实例以避免不必要的费用。
在 Vertex AI 中训练与部署 AutoML 模型
现在,让我们用 AutoML 训练一个模型。正如之前所述,AutoML 会为我们处理繁重工作,并在给定数据集上返回其能训练出的最佳模型。这意味着要充分发挥 AutoML 的效果,您必须确保输入的数据集尽可能高质量。因此,值得在此之前花些时间进行特征工程与预处理。
AutoML 会在内部对数据集进行预处理,但无法修复数据集中所有问题。
不过,本节我们将仅训练一个不做预处理或特征工程的基线 AutoML 模型以求简洁。
从 Google Storage 存储桶加载数据
首先,我们希望从存储桶加载 CSV 数据集,并花些时间探索它。请记住, EDA 非常重要,您可以在我们的Python 探索性数据分析课程中进一步学习!
好消息是,pandas 可以直接从 GCS 路径下载文件。唯一要注意的是,上述代码仅在 Vertex AI workbench 中可行,因为它们已使用您的 Google Cloud 凭据完成了认证。
在 Vertex AI 中用 pandas 探索数据
我们不会对数据集进行深入分析,以免偏离本文重点。因此,我们仅打印一些汇总统计和图表:
共有 15 个数值特征和 1 个目标列——
Class。大约 1.3 万条记录且无缺失值,这会大大简化训练。将特征名保存到一个列表,后续可能会用到:
现在,为几项看起来较重要的特征绘制配对图:
我们看到了一些有趣的趋势——主要是 Bombay(绿色)豆在其物理测量上与其他类别明显分离。
再绘制一个相关系数矩阵:
我们有一些几乎完全相关的特征,这很合理,因为它们都与物理测量相关。但也有一些特征对几乎不相关或仅有很小相关性。
此处我将探索权交给您,可继续深入并尝试为数据集提出一些可验证的问题。
运行 AutoML 训练任务
要启动 AutoML 训练任务,我们首先需要一个与之兼容的数据集对象:
我们使用
TabularDataset.create方法初始化为 ds。Vertex AI 会为其分配自己的名称,可通过resource_name属性访问。接着用
ai.AutoMLTabularTrainingJob类初始化训练任务。它需要两个参数:然后运行该任务的
run方法:参数基本不言自明。代码执行需要一段时间(取决于计算资源)。
如果前往控制台“MODEL DEVELOPMENT > TRAINING”选项卡并点击任务名称,您可查看实时训练进度。下图显示训练处于预处理阶段:
查看结果
训练完成后,回到训练选项卡并点击模型名称。这次会显示与模型相关的性能指标:
如您所见,即使作为基线模型,指标也非常不错,均高于 0.90。
部署 AutoML 模型并生成预测
现在我们只需一行代码即可部署该
model:deploy方法仅需要一个参数——用于推理的机器类型。由于只要上线部署就会产生额外费用,我不会实际运行上述代码。不过,如果您运行了它,
deploy方法会返回一个可供发送请求的Endpoint对象:它的
predict方法接受一个样本列表进行预测。样本必须以 JSON 格式提供。您也可以通过控制台部署模型。前往“MODEL REGISTRY”选项卡,会看到已列出的模型。点击其名称并选择“DEPLOY & TEST”选项卡:
点击“DEPLOY TO ENDPOINT”按钮会跳转至单独页面,您可在其中配置用于部署模型的机器。但在此之前,您可以在部署按钮下方的区域进行测试:
在 Vertex AI 中训练与部署自定义模型
在 Vertex AI 中部署自定义模型比 AutoML 模型更具挑战,也更昂贵,因为除了 Workbench 与部署成本之外,还会涉及一些Docker 容器。如果您准备好了,那就开始吧!
Vertex AI 自定义训练的高层概览
自定义训练从自定义模型训练脚本开始。在该脚本中,我们可以做任何事,只要它:
随后,需要将该训练脚本打包为 Docker 容器并推送至 Google Container Registry。之后,我们可以通过 Vertex AI 的 Python SDK 或控制台来训练该自定义模型。
为训练代码创建目录结构
首先,按照这份 Google Codelab的推荐创建目录结构。在 workbench 中通过新建 launcher 切换到终端:
然后,新建名为“dry-beans”的目录并进入:
在
dry-beans内创建trainer目录,并在其中创建train.py文件:创建 Dockerfile
接着,新建一个 Dockerfile:
打开文件并粘贴以下内容:
该 Dockerfile 使用 Google Container Registry 提供的官方深度学习镜像(预装 TensorFlow)。文件会复制我们的
trainer目录并安装 XGBoost。最后会运行我们的 Python 脚本。编写训练脚本
脚本需要从我们的 GCP 存储桶加载 Dry Beans 数据集,在其上训练一个 XGBoost 分类器,并将模型保存回存储桶。为此我编写了一个简单脚本,完成上述任务,已放在这个 GitHub gist(为节省篇幅,此处不贴出)。
将 gist 中的代码复制到
train.py。然后回到终端,安装 XGBoost(所选 Workbench 未预装),并运行脚本:构建 Docker 镜像
如果脚本运行无误,继续在终端输入这两个变量:
这些变量将在构建容器时使用,执行:
构建需要一些时间。完成后运行容器,确认一切正常:
如果您看到以上成功信息,容器就可以推送了:
创建自定义训练任务
到这里大部分工作已完成。现在可切换至控制台,使用刚推送的容器创建自定义训练任务。进入“MODEL REGISTRY”选项卡并点击“CREATE”:
训练方法选择“No managed dataset”和“Custom training”。在下一步(Model details)中,为模型命名——
dry-beans-classifier。在训练容器面板中:
选择我们推送的自定义镜像作为容器,并选择
cloud-ai-platform存储桶作为模型输出。然后点击继续,直到到达“Compute and pricing”面板:选择一台标准 n1、4 CPU 的机器,最后点击“START TRAINING”。然后切换到控制台的“TRAINING”选项卡。
此时您会看到两种情况之一:
我遇到的是第一种情况,让我们点击模型名称排查原因:
错误提示我超出了允许的自定义训练 CPU 数量。我进一步调查后,结果相当令人失望。
通常,GCP 会为任一计算区域提供至少 20 个 CPU 配额,但检查我的配置文件后发现配额只有 1。这意味着我无法运行任何自定义训练任务,因为 Google 提供的机器至少需要两个 CPU。
我尝试按照这篇 StackOverflow 贴中的答案提升配额,但没有成功。系统提示新的 Vertex AI 用户仅允许 1 个 CPU 单元。若想提升配额,需要提交支持工单,而这并非免费(需要付费支持合约)。
因此,如果您也不走运,可以先尝试该 SO 贴中的方法。对部分用户有效;若仍无效,唯一选项就是联系支持。
但如果您够幸运,训练顺利完成,那么就可以按照我们对 AutoML 模型的步骤进行部署。
结语
Vertex AI 是一个功能庞大的平台。在本教程中,我们只触及了皮毛,但已经覆盖了平台最重要的构件。掌握存储桶、workbench 与训练任务的创建后,您将有足够能力继续探索平台的其余部分。
如果您想进一步了解 Google Cloud 服务,推荐阅读: