使用 Kubeflow Pipelines 2.0 和 MinIO 设置开发机器

工程师喜欢在本地进行实践和学习。无论研究的是什么工具:高端存储解决方案、工作流编排引擎,还是分布式计算的最新成果,都是如此。学习新技术的最佳方法是找到一种方法,将所有内容都塞到一台机器上,以便您可以亲自动手操作。
Kubeflow Pipelines是Kubeflow完整发行版中的核心组件。您可以安装Kubeflow的完整发行版,也可以安装仅包含Kubeflow Pipelines的独立安装版本。在这篇文章中,我将演示如何使用Kubeflow Pipelines(KFP)的独立安装版本和MinIO的独立安装版本来设置开发机器。KFP和MinIO结合使用效果更佳。使用KFP,您可以构建和运行用于获取数据和训练模型的流水线。在您为数据构建流水线并训练模型时,您将需要一个存储解决方案。这就是MinIO可以提供帮助的地方。
MinIO是存储机器学习数据和模型的绝佳方式。使用MinIO,您可以保存训练集、验证集、测试集和模型,而无需担心规模或性能问题。此外,总有一天人工智能会被监管;当这一天到来时,您将需要MinIO的企业级功能(对象锁定、版本控制、加密和法律保留)来确保您数据在静态状态下的安全,并确保您不会意外删除监管机构可能要求的内容。我们本可以尝试使用KFP的MinIO实例——但是,对于机器学习数据流水线来说,这不是最佳设计。您需要一个完全受您控制的存储解决方案。下图是我们的Kubeflow和MinIO部署图,说明了每个MinIO实例的目的。

我们将安装的内容
下面列出了需要安装的所有内容。此列表包括核心组件(MinIO和KFP),以及依赖项和SDK。我希望这篇文章可以作为一份食谱,可以严格按照步骤配置KFP流水线开发机器。如果这些说明中的任何一项不起作用,请告知我们。
- Docker Desktop
- Kubernetes
- kubectl(Kubernetes命令行工具)
- Kubeflow流水线资源
- KFP SDK
- MinIO
- MinIO访问密钥和密钥
- MinIO SDK
Docker Desktop
您可以在Docker的网站上找到适合您操作系统的安装程序,网址为此处。如果您在Mac上安装Docker Desktop,则需要知道您的Mac使用的芯片——Apple或Intel。您可以通过点击Mac左上角的Apple图标,然后点击“关于本机”菜单选项来确定这一点。
Kubernetes
Kubeflow运行在Kubernetes上——因此,您将需要一个正在运行的Kubernetes集群。此外,您必须熟悉Kubernetes命令行工具才能安装和管理Kubeflow。获取Kubernetes及其命令行工具最快的方法是启用Docker Desktop附带的Kubernetes功能。为此,启动Docker Desktop应用程序,然后在右上角点击“设置”图标。

这将带您进入Docker Desktop的设置页面,如下所示。

点击左侧的Kubernetes选项卡,您应该会看到Kubernetes设置页面。

点击“启用Kubernetes”复选框以在您的机器上启动一个Kubernetes集群。点击此复选框后,Docker Desktop需要几分钟才能准备好一个集群,因此您可以去喝杯咖啡。
如果您在任何时候希望删除已在Kubernetes集群中安装的所有部署,请点击“重置Kubernetes集群”按钮。这将删除所有资源并为您提供一个全新的集群。当您尝试使用预发布软件时,您会经常这样做。
kubectl
启用Kubernetes还会为您安装Kubernetes命令行工具(`kubectl`)。在终端窗口中键入以下命令以确保`kubectl`正常工作。
您应该会看到类似于以下所示的输出。
安装Kubernetes并使`kubectl`命令行工具正常工作后,您可以安装Kubeflow Pipelines。
Kubeflow Pipelines
设置Kubeflow Pipelines包括四个简单的步骤。首先,我们需要指定要安装的KFP版本。我们将在下面设置环境变量,后续的`kubectl` apply命令将使用该变量。这些说明适用于Kubeflow Pipelines 2.0.0。您可以此处查看最新版本。
KFP更喜欢将集群范围的资源与命名空间范围的资源分开安装。根据环境的不同,集群范围的资源可能需要管理员角色。命名空间范围的资源可以由管理命名空间的各个团队部署。以下命令安装集群范围的资源。
您应该会看到指示创建各种资源的输出。此处为了简洁起见省略了输出,但您应该扫描它并确保没有发生错误。
下一个命令是一个等待命令,它将检查先前命令的状态。
继续运行等待命令,直到您收到指示成功的消息,如下所示。
命名空间范围的资源的apply命令如下所示。它还会在创建集群中的资源时显示输出。确保没有错误。
通过运行以下命令检查我们两个`kubectl` apply命令创建的所有pod。
如果您在安装 KFP 后立即检查 Pod,您会注意到许多 Pod 仍在启动。请等待所有 Pod 都运行后再继续下一部分。一旦您开始创建 Pipeline,在 Pipeline 运行期间运行此 `get pods` 命令。您将看到 KFP 如何根据 Pipeline 中的任务创建 Pod。
启动 KFP UI
要在本地机器上使用 KFP UI,我们必须将本地机器上的一个未使用的端口转发到 KFP 的 UI 服务的 80 端口。这可以通过使用 kubectl 的 port-forward 命令来完成。此命令不会返回。您需要保持它运行,直到您完成使用 KFP UI。
导航到 localhost:8080。您应该会看到 Kubeflow Pipelines 主页。

花一些时间探索所有选项卡。如果您是 Kubeflow 的新手,那么请熟悉 Pipelines、Runs 和 Experiments。这三个概念的详细描述超出了本文的范围,但以下是简短说明
- Pipelines 是您在代码中创建的描述。Pipelines 类似于面向对象编程中的类。
- Run 是 Pipeline 的一个实例,就像对象是类的实例一样。
- Experiments 是一种标记相关 Runs 的方法,以便您可以在 KFP UI 中将它们分组在一起。例如,您可能有多个 Pipeline 运行,因为您正在解决其中的问题。使用相同的 Experiment 名称标记这些 Runs 将使它们在 Experiments 选项卡中分组在一起。
安装 MinIO
我喜欢使用 Docker Compose 来安装 MinIO,因为配置在 YAML 文件中,并且命令很简单。以下是 Docker Compose YAML。将此文件命名为 `docker-compose.yml`。
在与 `docker-compose.yml` 文件相同的目录中运行以下命令。
这将在 Kubernetes 集群外部的 Docker 容器中安装 MinIO。如果您不想使用 Docker Compose 安装 MinIO,那么这篇 文档 将向您展示如何使用 Docker 命令行安装 MinIO。
MinIO访问密钥和密钥
要使用 MinIO SDK,您将需要一个新的访问密钥和密钥。您可以在 MinIO UI 中获取这些密钥。在浏览器中,转到 localhost:9001。如果您在 docker-compose 文件中为 MinIO 控制台地址指定了不同的端口,请使用该端口。
登录后,导航到“访问密钥”选项卡,然后点击“创建访问密钥”按钮。

这将带您到“创建访问密钥”页面。

您的访问密钥和密钥只有在您点击“创建”按钮后才会保存。因此,在完成此操作之前,请不要离开此页面。不用担心从此屏幕复制密钥。点击“创建”按钮后,您将可以选择将密钥下载到您的文件系统(在 JSON 文件中)。

您现在可以开始使用 MinIO SDK 了。在接下来的两节中,我们将安装 KFP SDK 和 MinIO SDK。
安装 KFP Python 包
KFP Python 包是一个简单的 `pip` install。我建议在 Python 虚拟环境中安装它——尤其是在您测试 KFP 的预发布版本时。您可以在 PyPi 上查看 KFP 包 的最新版本,或者您可以安装如下所示的最新预发布版本。
一旦 KFP 2.0 正式发布,请删除 `--pre` 开关。
通过列出 KFP 库来仔细检查安装。
您应该会看到以下三个库。
安装 MinIO Python 包
如果您在虚拟环境中安装了 KFP Python 包,请在同一环境中安装 MinIO。
双重检查安装。
这将确认 Minio 库已安装并显示您正在使用的版本。
总结
这篇文章提供了一个易于遵循的配方,用于创建带有 Kubeflow Pipelines 2.0 和 MinIO 的开发机器。目标是为您节省研究 Kubeflow 依赖项、安装命令和新版本 SDK 设置的时间和精力。
我们尽一切努力确保此配方准确无误。如果您遇到问题,请通过发送邮件至 hello@min.io 或加入我们 Slack 频道 的讨论告知我们。
您已准备好开始使用 Kubeflow 和 MinIO 编写代码和构建管道。请查看 使用 MinIO 和 Kubeflow v2.0 构建 ML 数据管道,我们将在其中使用 Kubeflow 和 MinIO 构建数据管道。