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

1. 简介

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

Kubeflow 部署是怎样的?

Kubeflow 部署是:

  • 可移植 - 适用于任何 Kubernetes 集群,无论该集群位于 Google Cloud Platform (GCP) 上、本地,还是跨提供商。
  • 可扩缩 - 可以使用不断波动的资源,并且仅受到分配给 Kubernetes 集群的资源数量的限制。
  • Composable - 您可以从一组精选的机器学习框架和库中进行选择,将独立的步骤配置到完整的机器学习工作流中。

Kubeflow 让您能够将松散耦合的微服务组织为一个单元,并将其部署到各种位置,包括笔记本电脑、本地或云端。

此 Codelab 将引导您使用 MiniKF 创建自己的 Kubeflow 部署,然后运行包含超参数调节的 Kubeflow 流水线工作流,以训练和部署模型。所有这些操作都可以在 Jupyter 笔记本中执行。

构建内容

在此 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 项目

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

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

99b103929d928576

请查看以下最低要求:

  • 确保您拥有项目的所有者角色
  • 请确保您的项目已启用了结算功能。
  • 如果您使用的是 GCP 免费层级或有 300 美元赠金的 12 个月试用期,则无法运行默认的 GCP 安装 MiniKF,因为免费层级提供的资源不足。您需要升级为付费账号

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

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

打开您预先分配的 GCP 项目

如需打开预分配的 GCP 项目,请点击下方按钮访问 GCP 控制台,然后打开“首页”面板(位于左上角的汉堡形菜单中)。如果屏幕为空,请在出现提示时点击“是”以创建信息中心。

3fdc4329995406a0

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

e8952c0b96067dea.png

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

fe25c1925487142.png

3. 安装 MiniKF

创建一个包含 MiniKF 的计算实例

在 GCP Marketplace 中,搜索“MiniKF”。

选择 Arrikto 的 MiniKF 虚拟机:

d6b423c1911ea85a.png

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

7d07439db939b61c

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

7d5f7d17a80a1930

等待 MiniKF Compute 实例启动:

5228086caadc44c6

登录 MiniKF

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

774e83c3e96cf7b3

登录 Kubeflow

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

251b0bcdbf6d3c71

9d49d899bb0b5bd1

Chrome 用户会看到此屏幕:

6258e0f09e46a6c2

Firefox 用户会看到此屏幕:

“8cff90ce2f0670bd”

Safari 用户将看到此屏幕:

1c6fd768d71c0a92

登录 Rok

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

16171f35a935a9af

80aad6ba5d298a7e

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

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

在本部分中,您将运行狗品种识别示例,这是一个 Udacity AI 纳米学位的项目。在给定狗狗的图片后,最终模型将提供狗的品种估算值。

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

前往 Kubeflow 中心信息中心上的笔记本链接。

60825e935fd0f39b

点击新服务器

f9303c0a182e47f5.png

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

a2343f30bc9522ab.png

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

gcr.io/arrikto/jupyter-kale:f20978e

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

8544d9b05826b316

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

28c024bcc55cc70a

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

52f1f8234988ceaa

下载数据和笔记本

系统随即会打开一个显示 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

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

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

c483da77943a6f01.png

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

376b5203209c2c91

再次运行安装了正确库的 imports 单元,然后观察其是否成功运行。

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

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

7b96241f2ab6c389

点击 Kale Deployment 面板中的滑块来启用 Kale:

804cfbf9d76b7e23

探索笔记本中每个单元的依赖项。查看多个笔记本单元如何成为单个流水线步骤的一部分(如单元格左侧的色条所示),以及流水线步骤如何与之前的步骤关联(如单元格上方的“取决于”标签所示)。例如,下图显示了属于同一流水线步骤的多个单元。它们具有相同的红色,并且依赖于之前的流水线步骤。

fcd0fb351cdfb359.png

点击 Compile and Run 按钮:

18f2f6f0e12393d5

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

de1b88af76df1a9a.png

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

e0b467e2e7034b5d.png

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

21a9d54a57f3e20c

39e6fa39516d2773

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

5. 使用超参数调节进行迁移学习

检查结果

查看 cnn-from-scratch 步骤的日志。(点击 Kubeflow 流水线界面图表中的步骤,然后点击日志标签页。)在此步骤中,您将从头开始训练卷积神经网络 (CNN)。请注意,经过训练的模型准确率极低,除此之外,此步骤需要很长时间才能完成。

62bf0835e9896c67

查看 cnn-vgg16 步骤的日志。在这一步中,您对预训练的 VGG-16 模型(由视觉几何组 (VGG) 训练的神经网络)使用了迁移学习。准确率远高于上一个模型,但我们还可以做得更好。

2b45072da65e20ae

现在,看一下 cnn-resnet50 步骤的日志。在这一步中,您在预训练的 ResNet-50 模型上使用了迁移学习。准确度要高得多。因此,您在此 Codelab 的其余部分都将使用此模型。

a1dc84ea48a87820.png

超参数调节

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

87b9f6c98dc1823e

在笔记本的左侧窗格中,启用使用 Katib 进行惠普调节,以运行超参数调节:

a518eba74d341139.png

然后点击 Set up Katib Job(设置 Katib 作业)以配置 Katib:

f4e34fff6a93aa60.png

定义每个参数的搜索空间并定义目标:

cfc6b7bcdc685a02.png

点击 Compile and Run Katib Job 按钮:

f9c1ab0a6a3c5e8d.png

观看 Katib 实验的进度:

f3514011876564db.png

点击查看以查看 Katib 实验:

ab2f5a5edd48e8dc.png

点击完成以查看 Kubeflow 流水线 (KFP) 中的运行情况:

410a843b6f044a4b

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

a511dca519580133.png

在 KFP 界面中,您会看到新的运行作业:

43dd34ee2b75018d

我们来分析一下刚刚发生的事情。以前,Kale 是从笔记本中生成流水线运行作业;现在,它需要创建多个流水线运行作业,其中每个作业都会馈送不同的参数组合。

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

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

3e854d3d4bb766c

此外,KFP 界面中还有更多运行:

ffd30dcefa739962.png

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

9096ae9caa77e42a

KFP 界面中的所有运行作业:

7acc64dfee4f35a3

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

95b092180d71dc80

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

3b0ce47e548e5afb.png

6. 清理

销毁 MiniKF 虚拟机

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

7. 恭喜

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

后续操作

加入 Kubeflow 社区:

深入阅读