1. 简介
| Kubeflow 是一种面向 Kubernetes 的机器学习工具包。该项目旨在让您可以在 Kubernetes 上以可移植、可扩缩的方式轻松部署机器学习 (ML) 工作流。其目标是提供一种简单直接的方法,将机器学习领域的同类最佳开源系统部署到各种基础架构中。 |
Kubeflow 部署是什么样的?
Kubeflow 部署是指:
- 可移植 - 可在任何 Kubernetes 集群上运行,无论该集群位于 Google Cloud Platform (GCP)、本地还是跨提供商。
- 可伸缩 - 可以利用波动的资源,并且仅受分配给 Kubernetes 集群的资源数量的限制。
- 可组合 - 通过服务工作器增强,可在离线或低质量网络上运行。
它是一种将松散耦合的微服务组织为单个单元并将其部署到各种位置(无论是笔记本电脑还是云端)的方式。
此 Codelab 将引导您使用 MiniKF 创建自己的 Kubeflow 部署,并在 Jupyter 笔记本中运行 Kubeflow Pipelines 工作流。
构建内容
在此 Codelab 中,您将使用 Kubeflow Pipelines 构建复杂的数据科学流水线,而无需使用任何 CLI 命令或 SDK。您无需具备任何 Kubernetes 或 Docker 知识。完成上述步骤后,您的基础设施将包含:
- 自动安装以下各项的 MiniKF (Mini Kubeflow) 虚拟机:
- Kubernetes(使用 Minikube)
- Kubeflow
- Kale,一种将通用 Jupyter 笔记本转换为 Kubeflow Pipelines 工作流的工具 ( GitHub)
- 用于数据版本控制和可重现性的 Arrikto Rok
学习内容
- 如何使用 MiniKF 安装 Kubeflow
- 如何在不使用任何 CLI 命令或 SDK 的情况下将 Jupyter 笔记本转换为 Kubeflow 流水线
- 如何通过点击按钮从笔记本内部运行 Kubeflow Pipelines
- 如何在笔记本和每个流水线步骤中自动对数据进行版本控制
所需条件
- 您拥有所有者权限的有效 GCP 项目
本 Codelab 是一篇高级 Codelab,重点介绍 Kubeflow。如需了解更多背景信息和平台简介,请参阅 Kubeflow 简介文档。对于不相关的概念,我们仅会略作介绍;对于不相关的代码,我们会予以提供,以便您复制和粘贴。
2. 设置环境
设置您的 GCP 项目 ID 和集群名称
如需查找项目 ID,请访问 GCP Console 的“首页”面板,该面板位于左上角的汉堡菜单中。如果屏幕为空,请在提示中点击“是”以创建信息中心。

如果尚未选择项目,请点击选择项目:

然后选择您的项目。您应该只拥有一个:

3. 安装 MiniKF
创建计算实例
在 GCP Marketplace 中,搜索“MiniKF”。
选择 Arrikto 的 MiniKF 虚拟机。

点击在 Compute Engine 上启动按钮,然后选择您的项目。

在配置和部署窗口中,为 MiniKF 实例选择一个名称,然后保留默认选项。然后,点击部署按钮。

等待 MiniKF 计算实例启动。

登录 MiniKF
当 MiniKF 虚拟机启动后,点击 SSH 按钮进行连接和登录。按照屏幕上的说明运行命令 minikf,该命令将启动 Minikube、Kubeflow 和 Rok 的部署。这需要几分钟才能完成。

登录 Kubeflow
安装完成后,并且所有 pod 都已准备就绪,请访问 MiniKF 信息中心。使用 MiniKF 用户名和密码登录 Kubeflow。


Chrome 用户会看到以下界面:

Firefox 用户会看到以下界面:

Safari 用户会看到以下界面:

登录 Rok
登录 Kubeflow 后,点击汉堡图标打开左侧菜单。前往 Snapshot Store,然后使用 MiniKF 用户名和密码登录 Rok。


恭喜!您已成功在 GCP 上部署 MiniKF!您现在可以创建笔记本、编写机器学习代码并运行 Kubeflow Pipelines。使用 Rok 进行数据版本控制和重现。
4. 从笔记本内部运行流水线
在本部分中,您将运行 Titanic 示例,这是一项 Kaggle 竞赛,旨在预测哪些乘客在泰坦尼克号沉船事故中幸存下来。
创建笔记本服务器
在 Kubeflow 中央信息中心内,找到笔记本服务器链接。

点击新服务器。

为您的笔记本服务器指定名称。

请确保您已选择此图片:
gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop
添加一个大小为 5 GB 的新空数据卷,并将其命名为 data。

点击启动以创建笔记本服务器。

当笔记本服务器可用时,点击连接以连接到该服务器。

下载数据和笔记本
系统随即会打开一个新标签页,其中显示 JupyterLab 着陆页。在 JupyterLab 中创建新终端。

在终端窗口中,运行以下命令以进入 data 文件夹,并下载您将在本实验的剩余部分中使用的笔记本和数据。
cd data/ git clone -b kubecon-workshop https://github.com/kubeflow-kale/examples
此代码库包含一系列精选示例,其中包含数据和带注释的笔记本。在边栏中找到文件夹 data/examples/titanic-ml-dataset/ 并打开笔记本 titanic_dataset_ml.ipynb。

探索 Titanic 挑战赛的机器学习代码
逐步运行笔记本。请注意,该代码因缺少库而失败。

返回到终端并安装缺少的库。
pip3 install --user seaborn

点击刷新图标,重启笔记本内核。

再次运行该单元格,确保已安装正确的库,并查看运行结果是否成功。
将笔记本转换为 Kubeflow 流水线
点击左侧窗格中的 Kubeflow 图标,启用 Kale。

探索单元格级依赖项。了解多个单元格如何成为单个流水线步骤的一部分,以及流水线步骤如何依赖于之前的步骤。

点击编译并运行按钮。

查看快照的进度。

查看流水线运行的进度。

点击该链接前往 Kubeflow Pipelines 界面并查看运行情况。

等待该流水线完成。


恭喜!您刚刚从笔记本中运行了一个端到端 Kubeflow 流水线!
5. 使用卷快照实现可重现性
检查结果
查看倒数第二个流水线步骤 Results 的日志。请注意,所有预测因素的得分均为 100%。经验丰富的数据科学家会立即发现此情况可疑。这很好地表明,我们的模型无法泛化,而是与训练数据集过拟合。这很可能是由于模型所使用的数据存在问题。

重现之前的状态
幸运的是,Rok 会负责数据版本控制,并重现您点击 Compile and Run 按钮时的整个环境。这样,您就拥有了数据和代码的时间机器。因此,我们先恢复流水线在训练其中一个模型之前的状态,看看会发生什么情况。查看 randomforest 步骤,然后点击 Artifacts。

按照 Markdown 中的步骤操作,即点击相应链接,在 Rok 界面中查看快照。

复制 Rok 网址。

前往 Notebook 服务器链接。

点击新服务器。

粘贴您之前复制的 ROK 网址,然后点击自动填充按钮。

为笔记本指定名称。

请确保您已选择此图片:
gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop
点击启动以创建笔记本服务器。

当笔记本服务器可用时,点击连接以连接到该服务器。

请注意,笔记本会在您生成的流水线步骤的确切单元格中打开。

在后台,Kale 通过导入所有库并加载上一步中的变量,恢复了笔记本的状态。
调试先前状态
向此单元格添加一个 print 命令:
print(acc_random_forest)
按 Shift + Return 运行活动单元,以重新训练随机森林并打印得分。为 100。

现在,我们来看看训练数据中是否存在异常情况。如需探索并解决此问题,请选择上一个单元格,然后点击加号图标 (+),在随机森林 Markdown 上方添加一个单元格。

添加以下文本并执行相应单元格,以打印训练集。
train_df

糟糕!包含训练标签的列(“Survived”)被错误地包含为输入特征!模型已学会专注于“Survived”特征,而忽略其余特征,从而污染输入。此列与模型的目标完全一致,但在预测期间不存在,因此需要从训练数据集中移除,以便模型从其他特征中学习。
添加 bug 修复
如需移除此列,请修改相应单元格以添加以下命令:
train_df.drop('Survived', axis=1, inplace=True)
train_df

启用 Kale,并确保移除 Survived 标签的单元格属于 featureengineering 流水线步骤(它应具有相同的轮廓颜色)。
点击 Compile and Run 按钮,再次运行流水线。
点击该链接前往 Kubeflow Pipelines 界面并查看运行情况。
等待结果步骤完成,然后查看日志以查看最终结果。现在,您可以获得切合实际的预测得分了!

6. 清理
销毁 MiniKF 虚拟机
在 GCP Console 中前往 Deployment Manager,然后删除 minikf-1 部署。
7. 恭喜
恭喜,您已成功使用 Kubeflow (MiniKF)、Kale 和 Rok 运行了端到端数据科学工作流!
后续操作
加入 Kubeflow 社区:
