通过惠普调整从笔记本到 Kubeflow 流水线:数据科学之旅

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 并进行超参数调节
  • 如何在笔记本中以及每个流水线步骤中自动对数据进行版本控制

所需条件

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

2. 设置环境

设置 GCP 项目

请按照以下步骤创建 GCP 项目或配置现有 GCP 项目。如果您计划使用现有 GCP 项目,请确保该项目满足以下最低要求。第一步是在 GCP Console 中打开资源管理器。

创建新项目或选择现有项目:

99b103929d928576.png

检查是否满足以下最低要求:

如需有关设置 GCP 项目的更多帮助,请参阅 GCP 文档

设置好 GCP 项目后,请直接参阅有关安装 MiniKF 的说明。

打开预分配的 GCP 项目

如需打开预分配的 GCP 项目,请点击下方按钮前往 GCP Console,然后打开左上角汉堡菜单中的“首页”面板。如果屏幕为空,请在提示中点击“是”以创建信息中心。

3fdc4329995406a0.png

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

e8952c0b96067dea.png

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

fe25c1925487142.png

3. 安装 MiniKF

创建包含 MiniKF 的计算实例

在 GCP Marketplace 中,搜索“MiniKF”。

选择 Arrikto 的 MiniKF 虚拟机:

d6b423c1911ea85a.png

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

7d07439db939b61c.png

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

7d5f7d17a80a1930.png

等待 MiniKF 计算实例启动:

5228086caadc44c6.png

登录 MiniKF

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

774e83c3e96cf7b3.png

登录 Kubeflow

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

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

Chrome 用户会看到以下界面:

6258e0f09e46a6c2.png

Firefox 用户会看到以下界面:

8cff90ce2f0670bd.png

Safari 用户会看到以下界面:

1c6fd768d71c0a92.png

登录 Rok

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

16171f35a935a9af.png

80aad6ba5d298a7e.png

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

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

在本部分中,您将运行“狗品种识别”示例,这是 Udacity AI Nanodegree 中的一个项目。给定一张狗的图片,最终模型将提供对狗的品种的估计。

在 Kubeflow 集群中创建笔记本服务器

前往 Kubeflow 中央信息中心上的 Notebooks 链接。

60825e935fd0f39b.png

点击新服务器

f9303c0a182e47f5.png

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

a2343f30bc9522ab.png

请确保您已选择以下 Docker 映像(请注意,映像标记可能有所不同):

gcr.io/arrikto/jupyter-kale:f20978e

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

8544d9b05826b316.png

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

28c024bcc55cc70a.png

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

52f1f8234988ceaa.png

下载数据和笔记本

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

ab9ac96f1a1f0d09.png

在终端窗口中,运行以下命令以进入 data 文件夹,并下载您将在实验的剩余部分中使用的笔记本和数据:

cd data/
git clone https://github.com/kubeflow-kale/kale

克隆的代码库包含一系列精选示例,其中包含数据和带注释的笔记本。

在边栏中,前往文件夹 data/kale/examples/dog-breed-classification/ 并打开笔记本 dog-breed.ipynb

2bc436465522f65b.png

探索“犬种识别”示例的机器学习代码

目前,请不要运行下载数据集的单元格,因为您将使用刚刚克隆的代码库中包含的一些较小的数据集。如果您是在家中自行运行此示例,可以随时下载数据集。

运行 imports 单元格以导入所有必需的库。请注意,由于缺少库,代码会失败

5e2b97ab2512f139.png

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

运行下一个单元格以安装缺失的库:

c483da77943a6f01.png

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

376b5203209c2c91.png

再次运行 imports 单元格,确保已安装正确的库,并查看其是否成功运行。

将笔记本转换为 Kubeflow Pipelines 中的流水线

点击笔记本左侧窗格中的 Kubeflow 图标,启用 Kale:

7b96241f2ab6c389.png

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

804cfbf9d76b7e23.png

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

fcd0fb351cdfb359.png

点击编译并运行按钮:

18f2f6f0e12393d5.png

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

de1b88af76df1a9a.png

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

e0b467e2e7034b5d.png

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

21a9d54a57f3e20c.png

39e6fa39516d2773.png

恭喜!您刚刚在 Kubeflow Pipelines 中运行了一个端到端流水线,从笔记本开始!

5. 通过超参数调节进行迁移学习

检查结果

查看 cnn-from-scratch 步骤的日志。(在 Kubeflow Pipelines 界面中点击图表中的相应步骤,然后点击日志标签页。)在此步骤中,您从头开始训练了一个卷积神经网络 (CNN)。请注意,训练后的模型准确率非常低,而且此步骤耗时很长。

62bf0835e9896c67.png

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

2b45072da65e20ae.png

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

a1dc84ea48a87820.png

超参数调节

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

87b9f6c98dc1823e.png

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

a518eba74d341139.png

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

f4e34fff6a93aa60.png

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

cfc6b7bcdc685a02.png

点击 Compile and Run Katib Job 按钮:

f9c1ab0a6a3c5e8d.png

查看 Katib 实验的进度:

f3514011876564db.png

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

ab2f5a5edd48e8dc.png

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

410a843b6f044a4b.png

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

a511dca519580133.png

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

43dd34ee2b75018d.png

我们来分析一下刚刚发生了什么。之前,Kale 从笔记本生成一个流水线运行,现在它正在创建多个流水线运行,每个流水线运行都以不同的实参组合为输入。

Katib 是 Kubeflow 的组件,用于运行通用超参数调优作业。Katib 对其正在实际运行的作业(在 Katib 术语中称为“试验”)一无所知。Kale 只关心搜索空间、优化算法和目标。Katib 支持将简单的作业(即 Pod)作为试验运行,但 Kale 实现了一个 shim,让试验实际上在 Kubeflow Pipelines 中运行流水线,然后从流水线运行中收集指标。

随着 Katib 实验生成试验,您将在 Katib 界面中看到更多试验:

3e854d3d4bb766c.png

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

ffd30dcefa739962.png

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

9096ae9caa77e42a.png

KFP 界面中的所有运行:

7acc64dfee4f35a3.png

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

95b092180d71dc80.png

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

3b0ce47e548e5afb.png

6. 清理

销毁 MiniKF 虚拟机

在 GCP Console 中前往 Deployment Manager,然后删除 minikf-on-gcp 部署。

7. 恭喜

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

后续操作

加入 Kubeflow 社区:

深入阅读