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 流水线
- 如何在笔记本和每个流水线步骤中自动对数据进行版本
所需条件
- 您拥有所有者权限的有效 GCP 项目
这是一个侧重于 Kubeflow 的高级 Codelab。如需了解更多背景信息和平台简介,请参阅 Kubeflow 简介文档。对于不相关的概念,我们仅会略作介绍,但是会提供相应代码块供您复制和粘贴。
2. 设置环境
设置 GCP 项目
请按照以下步骤创建 GCP 项目或配置现有 GCP 项目。如果您打算使用现有 GCP 项目,请确保该项目满足下述最低要求。第一步是在 GCP 控制台中打开资源管理器。
创建新项目或选择现有项目:
请查看以下最低要求:
- 确保您拥有项目的所有者角色。
- 请确保您的项目已启用了结算功能。
- 如果您使用的是 GCP 免费层级或有 300 美元赠金的 12 个月试用期,则无法运行默认的 GCP 安装 MiniKF,因为免费层级提供的资源不足。您需要升级为付费账号。
如需有关设置 GCP 项目的更多帮助,请参阅 GCP 文档。
设置 GCP 项目后,请直接参阅有关如何安装 MiniKF 的说明。
打开您预先分配的 GCP 项目
如需打开预分配的 GCP 项目,请点击下方按钮访问 GCP 控制台,然后打开“首页”面板(位于左上角的汉堡形菜单中)。如果屏幕为空,请在出现提示时点击“是”以创建信息中心。
如果尚未选择项目,请点击选择项目:
选择您的项目。您只能设置一个:
3. 安装 MiniKF
创建一个包含 MiniKF 的计算实例
在 GCP Marketplace 中,搜索“MiniKF”。
选择 Arrikto 的 MiniKF 虚拟机:
点击 LAUNCH 按钮,然后选择您的项目:
在配置和部署窗口中,为您的 MiniKF 实例选择名称和可用区,并保留默认选项。然后点击部署按钮:
等待 MiniKF Compute 实例启动:
登录 MiniKF
MiniKF 虚拟机启动后,点击 SSH 按钮进行连接并登录。按照屏幕上的说明运行 minikf
命令,该命令将开始部署 Minikube、Kubeflow 和 Rok。这需要几分钟才能完成。
登录 Kubeflow
安装完成且所有 Pod 都准备就绪后,访问 MiniKF 信息中心。使用 MiniKF 用户名和密码登录 Kubeflow:
Chrome 用户会看到此屏幕:
Firefox 用户会看到此屏幕:
Safari 用户将看到此屏幕:
登录 Rok
登录 Kubeflow 后,点击汉堡图标打开左侧菜单。点击 Snapshots,然后使用 MiniKF 用户名和密码登录 Rok。
恭喜!您已在 GCP 上成功部署了 MiniKF。您现在可以创建笔记本、编写机器学习代码、运行 Kubeflow 流水线,并使用 Rok 实现数据版本控制和可再现性。
4. 从笔记本中运行流水线
在本部分中,您将运行狗品种识别示例,这是一个 Udacity AI 纳米学位的项目。在给定狗狗的图片后,最终模型将提供狗的品种估算值。
在 Kubeflow 集群中创建笔记本服务器
前往 Kubeflow 中心信息中心上的笔记本链接。
点击新服务器。
为您的笔记本服务器指定一个名称。
确保您已选择以下 Docker 映像(请注意,映像标记可能会有所不同):
gcr.io/arrikto/jupyter-kale:f20978e
添加一个大小为 5GB 的新空数据卷,并将其命名为 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 可确保您在开发期间安装的所有库都能进入流水线。
运行下一个单元以安装缺少的库:
点击 Restart 图标来重启笔记本内核:
再次运行安装了正确库的 imports
单元,然后观察其是否成功运行。
将笔记本转换为 Kubeflow 流水线中的流水线
点击笔记本左侧窗格中的 Kubeflow 图标以启用 Kale:
点击 Kale Deployment 面板中的滑块来启用 Kale:
探索笔记本中每个单元的依赖项。查看多个笔记本单元如何成为单个流水线步骤的一部分(如单元格左侧的色条所示),以及流水线步骤如何与之前的步骤关联(如单元格上方的“取决于”标签所示)。例如,下图显示了属于同一流水线步骤的多个单元。它们具有相同的红色,并且依赖于之前的流水线步骤。
点击 Compile and Run 按钮:
现在,Kale 将笔记本转换为 Kubeflow 流水线流水线,从而接管并构建笔记本。此外,由于 Kale 与 Rok 集成,可截取当前笔记本数据卷的快照,因此您可以查看快照的进度。Rok 负责数据版本控制和复制整个环境,就像您点击 Compile and Run 按钮时一样。这样,您就有了一个时光机来存储数据和代码,并且您的流水线将在开发代码的同一环境中运行,而无需构建新的 Docker 映像。
流水线已编译并上传到 Kubeflow 流水线。现在,点击链接以转到 Kubeflow Pipelines 界面并查看运行情况。
Kubeflow Pipelines 界面将在新标签页中打开。等待运行完成。
恭喜!您刚刚从笔记本开始,在 Kubeflow 流水线中运行了一个端到端流水线!
5. 使用超参数调节进行迁移学习
检查结果
查看 cnn-from-scratch 步骤的日志。(点击 Kubeflow 流水线界面图表中的步骤,然后点击日志标签页。)在此步骤中,您将从头开始训练卷积神经网络 (CNN)。请注意,经过训练的模型准确率极低,除此之外,此步骤需要很长时间才能完成。
查看 cnn-vgg16 步骤的日志。在这一步中,您对预训练的 VGG-16 模型(由视觉几何组 (VGG) 训练的神经网络)使用了迁移学习。准确率远高于上一个模型,但我们还可以做得更好。
现在,看一下 cnn-resnet50 步骤的日志。在这一步中,您在预训练的 ResNet-50 模型上使用了迁移学习。准确度要高得多。因此,您在此 Codelab 的其余部分都将使用此模型。
超参数调节
返回 Kubeflow 界面中的笔记本服务器,然后打开名为 dog-breed-katib.ipynb
的笔记本(位于路径 data/kale/examples/dog-breed-classification/
中)。在此笔记本中,您将使用 Katib 在 ResNet-50 模型上运行一些超参数调节实验。请注意,该笔记本的开头有一个用于声明参数的单元:
在笔记本的左侧窗格中,启用使用 Katib 进行惠普调节,以运行超参数调节:
然后点击 Set up Katib Job(设置 Katib 作业)以配置 Katib:
定义每个参数的搜索空间并定义目标:
点击 Compile and Run Katib Job 按钮:
观看 Katib 实验的进度:
点击查看以查看 Katib 实验:
点击完成以查看 Kubeflow 流水线 (KFP) 中的运行情况:
在 Katib 实验页面中,您将看到新的试验:
在 KFP 界面中,您会看到新的运行作业:
我们来分析一下刚刚发生的事情。以前,Kale 是从笔记本中生成流水线运行作业;现在,它需要创建多个流水线运行作业,其中每个作业都会馈送不同的参数组合。
Katib 是 Kubeflow 的组件,用于运行通用超参数调节作业。Katib 对其实际运行的作业一无所知(在 Katib 术语中称为试验)。Kale 只关心搜索空间、优化算法和目标。Katib 支持以试验的形式运行简单的作业(即 Pod),但 Kale 实现了 shim,让试验在 Kubeflow 流水线中实际运行流水线,然后从流水线运行中收集指标。
随着 Katib 实验开始生成试验,您将在 Katib 界面中看到更多试验:
此外,KFP 界面中还有更多运行:
Katib 实验完成后,您可以在 Katib 界面中查看所有试验:
KFP 界面中的所有运行作业:
如果您返回笔记本,则会在 Kale 面板中的 Katib 实验旁边看到一个信息按钮:
点击它,您将看到最佳结果以及生成它的参数:
6. 清理
销毁 MiniKF 虚拟机
在 GCP Console 中导航到 Deployment Manager,并删除 minikf-on-gcp
部署。
7. 恭喜
恭喜,您已成功使用 Kubeflow (MiniKF)、Kale 和 Rok 运行端到端的数据科学工作流!
后续操作
加入 Kubeflow 社区: