使用 Kubeflow Pipelines 2.0 和 MinIO 设置开发机器
工程师喜欢在本地玩耍和学习。 研究哪种工具并不重要:高端存储解决方案、工作流编排引擎还是分布式计算的最新产品。 学习新技术的最好方法是找到一种方法将所有内容都塞到一台机器上,这样您就可以掌握所有内容。
Kubeflow Pipelines 是 Kubeflow 完整发行版的核心组件。 您可以安装 Kubeflow 的完整发行版或仅包含 Kubeflow Pipelines 的独立安装。 在这篇文章中,我将展示如何通过独立安装的 Kubeflow Pipelines (KFP) 和独立安装的 MinIO 来设置开发机器。 KFP 和 MinIO 一起使用效果更好。 使用 KFP,您可以构建和运行用于获取数据和训练模型的管道。 当您为数据和训练模型构建管道时,您将需要一个存储解决方案。 这就是 MinIO 可以提供帮助的地方。
MinIO 是存储 ML 数据和模型的好方法。 使用 MinIO,您可以保存训练集、验证集、测试集和模型,而无需担心规模或性能。 此外,有一天人工智能将会受到监管; 当这一天到来时,您将需要 MinIO 的企业功能(对象锁定、版本控制, 加密 和 合法锁) 以保护您的静态数据并确保您不会意外删除监管机构可能要求的内容。 我们本可以尝试使用 KFP 的 MinIO 实例 - 然而,这不是 ML 数据管道的最佳设计。 您将需要一个完全由您控制的存储解决方案。 下面是我们的 Kubeflow 和 MinIO 部署的图表,说明了每个 MinIO 实例的用途。

我们将安装什么
下面是需要安装的所有内容的列表。 此列表包括核心组件(MinIO 和 KFP)以及依赖项和 SDK。 我希望这篇文章可以作为配置 KFP Pipeline 开发机器的秘诀。 如果这些说明中的任何一个不起作用,请告诉我们。
- Docker 桌面
- Kubernetes
- kubectl(Kubernetes 命令行工具)
- Kubeflow 管道资源
- KFP SDK
- MinIO
- MinIO 访问密钥和秘密密钥
- MinIO SDK
Docker 桌面
您可以在 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 正常工作。
kubectl version --short
您应该看到类似于下图所示的输出。
Client Version: v1.25.9
Kustomize Version: v4.5.7
Server Version: v1.25.9
安装 Kubernetes 并且 kubectl 命令行工具运行后,您就可以安装 Kubeflow Pipelines。
Kubeflow 管道
设置 Kubeflow Pipelines 只需四个简单步骤。 首先,我们需要指定要安装的 KFP 版本。 我们将在下面设置环境变量,后续的 kubectl apply 命令将使用该变量。 这些说明适用于 Kubeflow Pipelines 2.0.0。 您可以在此处查看最新版本。
export PIPELINE\_VERSION=2.0.0
KFP 更喜欢将集群范围的资源与命名空间范围的资源分开安装。 根据环境的不同,集群范围的资源可能需要管理员角色。 命名空间范围的资源可以由管理命名空间的各个团队来部署。 以下命令安装集群范围的资源。
kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/cluster-scoped-resources?ref=\$PIPELINE\_VERSION"
您应该看到指示各种资源创建的输出。 为了简洁起见,此处省略了它,但您应该扫描它并确保没有发生错误。
下一个命令是一个等待命令,它将检查上一个命令的状态。
kubectl wait --for condition=established --timeout=60s crd/applications.app.k8s.io
继续运行 wait 命令,直到收到指示成功的消息,如下所示。
customresourcedefinition.apiextensions.k8s.io/applications.app.k8s.io condition met
命名空间范围的资源的应用命令如下。 它还将显示在集群中创建资源时的输出。 确保没有错误。
kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/env/platform-agnostic?ref=\$PIPELINE\_VERSION"
检查我们的两个 kubectl 应用通过运行以下命令创建的命令的所有 pod。
kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-565d847f94-df8xr 1/1 Running 0 24h
kube-system coredns-565d847f94-zrvmm 1/1 Running 0 24h
kube-system etcd-docker-desktop 1/1 Running 1 24h
kube-system kube-apiserver-docker-desktop 1/1 Running 1 24h
kube-system kube-controller-manager-docker-desktop 1/1 Running 1 24h
kube-system kube-proxy-c6bmz 1/1 Running 0 24h
kube-system kube-scheduler-docker-desktop 1/1 Running 1 24h
kube-system storage-provisioner 1/1 Running 0 24h
kube-system vpnkit-controller 1/1 Running 36 (12m ago) 24h
kubeflow cache-deployer-deployment-8667bd7cc4-pq5nx 1/1 Running 0 24h
kubeflow cache-server-69558cdf5b-mjbd9 1/1 Running 0 24h
kubeflow controller-manager-86bf69dc54-j6qzw 0/1 Running 1 24h
kubeflow metadata-envoy-deployment-596cbdf475-z224k 1/1 Running 0 24h
kubeflow metadata-grpc-deployment-784b8b5fb4-5bhcl 1/1 Running 1 (23h ago) 24h
kubeflow metadata-writer-84474967b6-67c2k 1/1 Running 0 24h
kubeflow minio-65dff76b66-n9l54 1/1 Running 0 24h
kubeflow ml-pipeline-7d8868b6b5-jqt2s 1/1 Running 0 24h
kubeflow ml-pipeline-persistenceagent-55f55fc7bc-5j2sd 1/1 Running 0 24h
kubeflow ml-pipeline-scheduledworkflow-7469b7c4b7-4ccdl 1/1 Running 0 24h
kubeflow ml-pipeline-ui-74cc4f9f89-zpb22 1/1 Running 0 24h
kubeflow ml-pipeline-viewer-crd-57fc94f5fd-b94nn 1/1 Running 0 24h
kubeflow ml-pipeline-visualizationserver-7587fb49f8-tl6ht 1/1 Running 0 24h
kubeflow mysql-c999c6c8-vvb7j 1/1 Running 0 24h
kubeflow proxy-agent-5c9b879c-7tg7z 0/1 Running 3 24h
kubeflow workflow-controller-6c85bc4f95-f9czz 1/1 Running 0 24h
如果您在安装 KFP 后立即检查 Pod,您会发现许多 Pod 仍在启动。 等到所有 Pod 都运行后再继续下一部分。 开始创建管道后,请在管道运行时运行此“get pods”命令。 您将看到 KFP 如何根据管道中的任务创建 Pod。
启动 KFP 用户界面
要在本地计算机上使用 KFP UI,我们必须将本地计算机上未使用的端口转发到 KFP UI 服务的端口 80。 这是使用 kubectl 的 port-forward 命令完成的。 该命令不会返回。 您需要保持其运行,直到使用完 KFP UI。
kubectl port-forward svc/ml-pipeline-ui -n kubeflow 8080:80
导航到本地主机:8080。 您应该会看到 Kubeflow Pipelines 主页。

花一些时间探索所有选项卡。 如果您是 Kubeflow 的新手,请熟悉管道、运行和实验。 这三个概念的详细描述超出了本文的范围,但这里是一个简短的故事:
- 管道是您在代码中创建的描述。 管道类似于面向对象编程中的类。
- Run 是管道的实例,就像对象是类的实例一样。
- 实验是一种标记相关运行的方法,以便您可以在 KFP UI 中看到它们分组在一起。 例如,在解决问题时,您可能会多次运行管道。 使用相同的实验名称标记这些运行会将它们分组在“实验”选项卡中。
安装 MinIO
我喜欢使用 Docker Compose 来安装 MinIO,因为配置位于 YAML 文件中,而且命令很简单。 下面是 Docker Compose YAML。 将此文件命名为“docker-compose.yml”。
version: '3'
services:
minio:
image: quay.io/minio/minio
volumes:
- ./data:/data
ports:
- 9000:9000
- 9001:9001
environment:
MINIO\_ROOT\_USER: 'minio\_user'
MINIO\_ROOT\_PASSWORD: 'minio\_password'
MINIO\_ADDRESS: ':9000'
MINIO\_STORAGE\_USE\_HTTPS: False
MINIO\_CONSOLE\_ADDRESS: ':9001'
command: minio server /data
在与 docker-compose.yml 文件相同的目录中运行以下命令。
docker-compose up -d
这会将 MinIO 安装在 Kubernetes 集群外部的 Docker 容器中。 如果您不想使用 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 安装。 我建议将其安装在 Python 虚拟环境中 - 特别是当您测试 KFP 的预发行版本时。 您可以检查 PyPi 的 KFP 包 的最新版本,或者您可以安装最新的预发行版本,如 下面的命令。
pip install kfp
一旦 KFP 2.0 全面可用,请删除“--pre”开关。
通过列出 KFP 库来仔细检查安装。
pip list | grep kfp
您应该看到下面的三个库。
kfp 2.0.1
kfp-pipeline-spec 0.2.2
kfp-server-api 2.0.0
安装 MinIO Python 包
如果您在虚拟环境中安装了 KFP Python 包,请在同一环境中安装 MinIO。
pip install minio
仔细检查安装。
pip list | grep minio
这将确认 Minio 库已安装并显示您正在使用的版本。
minio 7.1.15
概括
这篇文章提供了一个易于遵循的方法,用于使用 Kubeflow Pipelines 2.0 和 MinIO 创建开发机器。 目标是节省您研究新版本的 Kubeflow 依赖项、安装命令和 SDK 设置的时间和精力。
我们尽一切努力保持这个食谱的准确性。 如果您遇到问题,请通过 sales@minio.org.cn 给我们留言或加入我们的一般Slack频道。
您已准备好开始使用 Kubeflow 和 MinIO 进行编码和构建管道。 查看使用 MinIO 和 Kubeflow v2.0 构建 ML 数据管道 我们使用 Kubeflow 和 MinIO 来构建数据管道。