1. 简介
| Kubeflow 是一种面向 Kubernetes 的机器学习工具包。该项目旨在让您可以在 Kubernetes 上以可移植、可扩缩的方式轻松部署机器学习 (ML) 工作流。其目标是提供一种简单直接的方法,将机器学习领域的同类最佳开源系统部署到各种基础架构中。 |
Kubeflow 部署是什么样的?
Kubeflow 部署是指:
- 可移植 - 可在任何 Kubernetes 集群上运行,无论该集群位于 Google Cloud Platform (GCP)、本地还是跨提供商。
- 可伸缩 - 可以使用波动的资源,并且仅受分配给 Kubernetes 集群的资源数量限制。
- 可组合 - 使您能够从精选的机器学习框架和库中进行选择,将各个独立步骤配置为完整的机器学习工作流。
借助 Kubeflow,您可以将松散耦合的微服务整理为一个单元,并将其部署到各种位置,包括笔记本电脑、本地或云端。
此 Codelab 将引导您使用 MiniKF 创建自己的 Kubeflow 部署,然后运行包含超参数调优的 Kubeflow Pipelines 工作流来训练和提供模型。您可以在 Jupyter 笔记本中完成所有这些操作。
构建内容
在此 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 项目
请按照以下步骤创建 GCP 项目或配置现有 GCP 项目。如果您计划使用现有 GCP 项目,请确保该项目满足以下最低要求。第一步是在 GCP Console 中打开资源管理器。
创建新项目或选择现有项目:

检查是否满足以下最低要求:
- 确保您拥有项目的所有者角色。
- 确保您的项目已启用结算功能。
- 如果您使用的是 GCP 免费层级或含 $300 赠金的 12 个月试用期,请注意,您无法运行 MiniKF 的默认 GCP 安装,因为免费层级提供的资源不足。您需要升级为付费账号。
如需有关设置 GCP 项目的更多帮助,请参阅 GCP 文档。
设置好 GCP 项目后,请直接参阅有关安装 MiniKF 的说明。
打开预分配的 GCP 项目
如需打开预分配的 GCP 项目,请点击下方按钮前往 GCP Console,然后打开左上角汉堡菜单中的“首页”面板。如果屏幕为空,请在提示中点击“是”以创建信息中心。

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

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

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

点击启动按钮,然后选择您的项目:

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

等待 MiniKF 计算实例启动:

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

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


Chrome 用户会看到以下界面:

Firefox 用户会看到以下界面:

Safari 用户会看到以下界面:

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


恭喜!您已成功在 GCP 上部署 MiniKF。现在,您可以创建笔记本、编写机器学习代码、运行 Kubeflow Pipelines,并使用 Rok 进行数据版本控制和重现。
4. 从笔记本内部运行流水线
在本部分中,您将运行“狗品种识别”示例,这是 Udacity AI Nanodegree 中的一个项目。给定一张狗的图片,最终模型将提供对狗的品种的估计。
在 Kubeflow 集群中创建笔记本服务器
前往 Kubeflow 中央信息中心上的 Notebooks 链接。

点击新服务器。

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

请确保您已选择以下 Docker 映像(请注意,映像标记可能有所不同):
gcr.io/arrikto/jupyter-kale:f20978e
添加一个大小为 5 GB 的新空数据卷,并将其命名为 data。

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

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

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

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

探索“犬种识别”示例的机器学习代码
目前,请不要运行下载数据集的单元格,因为您将使用刚刚克隆的代码库中包含的一些较小的数据集。如果您是在家中自行运行此示例,可以随时下载数据集。
运行 imports 单元格以导入所有必需的库。请注意,由于缺少库,代码会失败:

通常,您应创建一个新的 Docker 映像,以便能够将此笔记本作为 Kubeflow 流水线运行,并包含新安装的库。幸运的是,Rok 和 Kale 可确保您在开发期间安装的任何库都能进入流水线,这得益于 Rok 的快照技术以及 Kale 将这些快照卷装载到流水线步骤中。
运行下一个单元格以安装缺失的库:

点击重启图标,重启笔记本内核:

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

点击 Kale 部署面板中的滑块,启用 Kale:

探索笔记本中的每个单元格依赖项。如需了解多个笔记本单元格如何成为单个流水线步骤的一部分(如单元格左侧的彩色条所示),以及流水线步骤如何依赖于之前的步骤(如单元格上方的 depends on 标签所示),请观看此视频。例如,下图显示了属于同一流水线步骤的多个单元格。它们具有相同的红色,并且依赖于之前的流水线步骤。

点击编译并运行按钮:

现在,Kale 会接管并构建您的笔记本,方法是将笔记本转换为 Kubeflow Pipelines 流水线。此外,由于 Kale 与 Rok 集成以拍摄当前笔记本数据卷的快照,因此您可以观看快照的进度。Rok 会负责数据版本控制,并重现您点击 Compile and Run 按钮时的整个环境。这样一来,您就拥有了数据和代码的时间机器,并且流水线将在您开发代码的同一环境中运行,而无需构建新的 Docker 映像。

流水线已编译并上传到 Kubeflow Pipelines。现在,点击该链接前往 Kubeflow Pipelines 界面并查看运行情况。

Kubeflow Pipelines 界面会在新标签页中打开。等待运行完成。


恭喜!您刚刚在 Kubeflow Pipelines 中运行了一个端到端流水线,从笔记本开始!
5. 通过超参数调节进行迁移学习
检查结果
查看 cnn-from-scratch 步骤的日志。(在 Kubeflow Pipelines 界面中点击图表中的相应步骤,然后点击日志标签页。)在此步骤中,您从头开始训练了一个卷积神经网络 (CNN)。请注意,训练后的模型准确率非常低,而且此步骤耗时很长。

查看 cnn-vgg16 步骤的日志。在此步骤中,您对预训练的 VGG-16 模型(由 Visual Geometry Group [VGG] 训练的神经网络)使用了迁移学习。该模型的准确率比之前的模型高得多,但我们仍可进一步提升。

现在,查看 cnn-resnet50 步骤的日志。在此步骤中,您对预训练的 ResNet-50 模型使用了迁移学习。准确度更高。因此,您将在本 Codelab 的剩余部分中使用此模型。

超参数调节
返回到 Kubeflow 界面中的笔记本服务器,然后打开名为 dog-breed-katib.ipynb(位于路径 data/kale/examples/dog-breed-classification/)的笔记本。在此笔记本中,您将使用 Katib 对 ResNet-50 模型运行一些超参数调优实验。请注意,您在笔记本开头有一个用于声明参数的单元格:

在笔记本的左侧窗格中,启用 HP Tuning with Katib 以运行超参数调优:

然后点击 Set up Katib Job 以配置 Katib:

为每个形参定义搜索空间,并定义一个目标:

点击 Compile and Run Katib Job 按钮:

查看 Katib 实验的进度:

点击查看即可查看 Katib 实验:

点击完成,即可在 Kubeflow Pipelines (KFP) 中查看运行:

在 Katib 实验页面中,您将看到新的试验:

在 KFP 界面中,您将看到新的运行:

我们来分析一下刚刚发生了什么。之前,Kale 从笔记本生成一个流水线运行,现在它正在创建多个流水线运行,每个流水线运行都以不同的实参组合为输入。
Katib 是 Kubeflow 的组件,用于运行通用超参数调优作业。Katib 对其正在实际运行的作业(在 Katib 术语中称为“试验”)一无所知。Kale 只关心搜索空间、优化算法和目标。Katib 支持将简单的作业(即 Pod)作为试验运行,但 Kale 实现了一个 shim,让试验实际上在 Kubeflow Pipelines 中运行流水线,然后从流水线运行中收集指标。
随着 Katib 实验生成试验,您将在 Katib 界面中看到更多试验:

以及 KFP 界面中的更多运行:

Katib 实验完成后,您可以在 Katib 界面中查看所有试验:

KFP 界面中的所有运行:

如果您返回笔记本,您会在 Kale 面板中看到 Katib 实验旁边的信息按钮:

点击该结果,您会看到最佳结果以及生成该结果的参数:

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