使用 MiniKF 和 Kale 从笔记本到 Kubeflow 流水线

1. 简介

Kubeflow 是适用于 Kubernetes 的机器学习工具包。该项目致力于使机器学习 (ML) 工作流在 Kubernetes 上的部署变得简单、可移植且可扩缩。我们的目标是提供一种简单直接的方法,将用于机器学习的卓越开源系统部署到各种基础架构中。

Kubeflow 部署是怎样的?

Kubeflow 部署是:

  • 可移植 - 适用于任何 Kubernetes 集群,无论该集群位于 Google Cloud Platform (GCP) 上、本地,还是跨提供商。
  • 可扩缩 - 可以使用不断波动的资源,并且仅受限于分配给 Kubernetes 集群的资源数量。
  • 可组合 - 与 Service Worker 结合使用,可以离线或在低质量网络上工作。

它是一种将松散耦合的微服务组织为单个单元并将它们部署到不同位置(无论是笔记本电脑还是云端)的方法。

此 Codelab 将引导您使用 MiniKF 创建自己的 Kubeflow 部署,并在 Jupyter 笔记本中运行 Kubeflow 流水线工作流。

构建内容

在此 Codelab 中,您将使用 Kubeflow 流水线构建复杂的数据科学流水线,而无需使用任何 CLI 命令或 SDK。您无需掌握任何 Kubernetes 或 Docker 知识。完成后,您的基础架构将包含:

  • MiniKF (Mini Kubeflow) 虚拟机会自动安装:
  • Kubernetes(使用 Minikube)
  • Kubeflow
  • Kale,用于将通用 Jupyter 笔记本转换为 Kubeflow 流水线工作流的工具 ( GitHub)
  • Arrikto Rok:提供数据版本控制和可重现性

学习内容

  • 如何使用 MiniKF 安装 Kubeflow
  • 如何在不使用任何 CLI 命令或 SDK 的情况下将 Jupyter 笔记本转换为 Kubeflow 流水线
  • 只需点击一下按钮,即可从笔记本内运行 Kubeflow 流水线
  • 如何在笔记本中和每个流水线步骤中自动进行数据版本控制

所需条件

这是一个侧重于 Kubeflow 的高级 Codelab。如需了解更多背景信息和平台简介,请参阅 Kubeflow 简介文档。对于不相关的概念,我们仅会略作介绍,但是会提供相应代码块供您复制和粘贴。

2. 设置环境

设置您的 GCP 项目 ID 和集群名称

如需查找项目 ID,请访问 GCP Console 的“首页”面板(位于左上角的汉堡形菜单中)。如果屏幕为空,请在出现提示时点击“是”以创建信息中心。

打开 GCP 控制台

3fdc4329995406a0

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

e8952c0b96067dea.png

然后选择您的项目。您只能设置一个:

fe25c1925487142.png

3. 安装 MiniKF

创建计算实例

在 GCP Marketplace 中,搜索“MiniKF”。

选择 Arrikto 的 MiniKF 虚拟机。

d6b423c1911ea85a.png

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

b5eeba43053db4bd.png

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

dc401e2bb5a884d9.png

等待 MiniKF 计算实例启动。

5228086caadc44c6

登录 MiniKF

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

774e83c3e96cf7b3

登录 Kubeflow

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

251b0bcdbf6d3c71

9d49d899bb0b5bd1

Chrome 用户会看到此屏幕:

6258e0f09e46a6c2

Firefox 用户会看到此屏幕:

“8cff90ce2f0670bd”

Safari 用户将看到此屏幕:

1c6fd768d71c0a92

登录 Rok

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

a683198ac4ba900d.png

80aad6ba5d298a7e

恭喜!您已在 GCP 上成功部署了 MiniKF!您现在可以创建笔记本、编写机器学习代码并运行 Kubeflow 流水线。使用 Rok 实现数据版本控制和可重现性。

4. 从笔记本内运行流水线

在本部分中,您将运行“泰坦尼克号”示例,这是一项 Kaggle 比赛,旨在预测哪些乘客在泰坦尼克号沉船事故中幸存。

创建笔记本服务器

前往 Kubeflow 中央信息中心上的笔记本服务器链接。

4115cac8d8474d73

点击新服务器

f9303c0a182e47f5.png

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

a2343f30bc9522ab.png

确保您已选择此图片:

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

添加一个大小为 5GB 的新空数据卷,并将其命名为 data

8544d9b05826b316

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

28c024bcc55cc70a

笔记本服务器可用后,点击连接进行连接。

2f06041475f45d3

下载数据和笔记本

系统随即会打开一个显示 JupyterLab 着陆页的新标签页。在 JupyterLab 中创建一个新终端。

2482011174f7bc75

在终端窗口中,运行以下命令以导航到 data 文件夹,并下载笔记本以及您将在本实验剩余部分使用的数据。

cd data/
git clone -b kubecon-workshop https://github.com/kubeflow-kale/examples

此代码库包含一系列精选示例,其中包含数据和带注释的笔记本。在边栏中导航到文件夹 data/examples/titanic-ml-dataset/,然后打开笔记本 titanic_dataset_ml.ipynb

c85baf68b36c63b2.png

探索泰坦尼克号挑战的机器学习代码

逐步运行笔记本。请注意,代码会失败,因为缺少库。

bf2451fd7407e334.png

返回终端并安装缺少的库。

pip3 install --user seaborn

d90593b21425dd12.png

点击 Refresh 图标以重启笔记本内核。

a21f5f563b36ce4d.png

再次运行单元并在安装正确的库后,看看它是否成功运行。

将笔记本转换为 Kubeflow 流水线

点击左侧窗格中的 Kubeflow 图标即可启用 Kale。

3f4f9c93b187b105

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

15cca32444c1f12e

点击 Compile and Run 按钮。

bde5cef34f00e258.png

查看快照的进度。

9408f46abb2493f5

查看流水线运行的进度。

9edbde68032f5e4b.png

点击链接以转到 Kubeflow Pipelines 界面并查看运行作业。

a81646a22584e1b9.png

等待此过程完成。

44bee7dc0d24ec21

d377b6d574a4970.png

恭喜!您刚刚从笔记本开始运行了端到端 Kubeflow 流水线!

5. 使用卷快照的可再现性

检查结果

查看倒数第二个流水线步骤 Results 的日志。请注意,所有预测项的分数均为 100%。经验丰富的数据科学家会立即发现这很可疑。这表明我们的模型没有泛化,而是对训练数据集进行了过拟合。这可能是由模型使用的数据存在问题所致。

2a594032c2dd6ff6

重现之前的状态

幸运的是,当您点击 Compile and Run 按钮时,Rok 负责数据版本控制和复制整个环境。这样,您就有了一个时光机来存储您的数据和代码。让我们在训练其中一个模型之前恢复流水线的状态,看看发生了什么。查看 randomforest 步骤,然后点击 Artifacts

4f25ca4560711b23

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

e533bc781da9355a.png

复制 Rok 网址。

d155d19731b5cedd.png

前往笔记本服务器链接。

aafeab01f3ef0863.png

点击新服务器

f2265a64e8f9d094.png

粘贴您之前复制的 Rok 网址,然后点击 Autofill 按钮。

9ba4d4128a3bdeea

为笔记本指定一个名称。

7685c3bf35fc74b2

确保您已选择此图片:

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

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

28c024bcc55cc70a

笔记本服务器可用后,点击连接进行连接。

34955a64ae316de1

请注意,笔记本会在已生成的流水线步骤所在的单元打开。

a1f7c81f349e0364.png

在后台,Kale 通过导入所有库并加载前面步骤中的变量来恢复笔记本的状态。

调试先前状态

在此单元格中添加打印命令:

print(acc_random_forest)

Shift + Return 运行活动单元,以重新训练随机森林并输出得分。结果是 100。

e2a8a3b5465fcb5d.png

现在,是时候查看训练数据中是否存在奇怪之处了。若要探索和解决此问题,请选择上一个单元格,然后点击加号 (+) 图标,在 Random Forest 标记上方添加一个单元格。

d1077f32dff9620f.png

添加以下文本并执行该单元,以输出训练集。

train_df

2854798ff01aed4e

糟糕!带有训练标签(“Survived”)的列被错误地添加为输入特征!模型已经学会关注“幸存者”而忽略其余部分,从而污染输入。此列与模型的目标完全匹配,并且在预测期间不存在,因此需要从训练数据集中移除此列,让模型从其他特征中学习。

添加 bug 修复

要移除此列,请修改单元格以添加如下命令:

train_df.drop('Survived', axis=1, inplace=True)
train_df

9e76c16a862b566

启用 Kale,并确保移除 Survived 标签的单元格是特征工程流水线步骤的一部分(应具有相同的轮廓颜色)。

点击 Compile and Run 按钮以再次运行流水线。

点击链接以转到 Kubeflow Pipelines 界面并查看运行作业。

等待 results 步骤完成,并查看日志以查看最终结果。现在,您有了切合实际的预测分数!

8c6a9676b49e5be8.png

6. 清理

销毁 MiniKF 虚拟机

在 GCP Console 中导航到 Deployment Manager,并删除 minikf-1 部署。

7. 恭喜

恭喜,您已成功使用 Kubeflow (MiniKF)、Kale 和 Rok 运行端到端的数据科学工作流!

后续操作

加入 Kubeflow 社区:

深入阅读