发布于 2026-01-06 4 阅读
0

如何将 OpenShift 流水线转换为 MLOps 流水线

如何将 OpenShift 流水线转换为 MLOps 流水线

请注意,本文已更新以解决技术错误,原帖发布于 2025 年 12 月 3 日。

数据科学家和机器学习工程师在将模型从实验阶段迁移到生产阶段时,常常面临诸多挑战。机器学习是一个迭代过程,包括从各种来源收集数据、数据处理、模型训练、超参数调优、模型评估和模型部署。每次更改模型或其依赖项(代码、数据集或配置)时都手动执行这些操作,会导致结果不一致,原因如下:

  • 目前还没有持续集成和持续部署系统来自动化这个工作流程。
  • 版本控制的局限性使得跟踪模型迭代过程中的变更变得困难。
  • 实时监控模型的性能很困难。
  • 不同环境下的部署不一致,导致结果难以预测。

鉴于以上原因,MLOps 的需求将持续增长,越来越多的组织也将采用它。MLOps 的快速发展源于组织需要减少 DevOps 团队和机器学习团队之间的摩擦。使用 MLOps 流水线的组织可以通过简化模型部署、监控和扩展来获得竞争优势。构建 MLOps 流水线不必繁琐。借助 KitOps 和 OpenShift 流水线,您可以快速构建机器学习流水线,将 AI 模型投入生产环境。本文将教您如何使用 KitOps 和 OpenShift 轻松构建和部署机器学习模型。

太长不看

  • MLOps 流水线通过集成自动化功能来改进您的机器学习工作流程。
  • KitOps 使各个团队能够轻松地将模型及其依赖项(例如代码和数据集)解包到不同的目录中。
  • OpenShift 流水线和 Quay 让运行 KitOps 打包的 AI 项目变得轻松简单。

使用 OpenShift pipeline 和 KitOps 构建 MLOps 流水线的步骤

前提条件:
要学习本教程,您需要以下物品:

- **A container registry:** You can use [Jozu Hub](https://jozu.ml), [GitHub Package](https://docs.github.com/en/packages/learn-github-packages/introduction-to-github-packages) registry, or [DockerHub](https://hub.docker.com/). This guide will use Jozu Hub. 
- A **c****ode hosting platform:** [Create a GitHub account](https://docs.github.com/en/get-started/start-your-journey/creating-an-account-on-github).
- A [HuggingFace](https://huggingface.co/login) account.
- **KitOps:** Here’s a [guide to install](https://kitops.ml/docs/cli/installation.html)[ing](https://kitops.ml/docs/cli/installation.html) [KitOps](https://kitops.ml/docs/cli/installation.html).
- **OpenShift pipeline:** Create a [developer sandbox](https://developers.redhat.com/developer-sandbox) account.
Enter fullscreen mode Exit fullscreen mode

步骤 1:安装 KitOps
首先,您必须确保本地已安装 Kit CLI。安装完成后,运行以下命令验证安装:

kit version
Enter fullscreen mode Exit fullscreen mode

步骤 2:创建 Jozu Hub 存储库
登录您的 Jozu Hub 帐户并创建一个存储库。在这里,您创建一个名为 . 的空存储库qwen-openshift

创建 Jozu Hub 仓库

要将本地终端验证到 Jozu Hub,请运行以下命令:

kit login jozu.ml
Enter fullscreen mode Exit fullscreen mode

系统会提示您输入用户名和密码。用户名是您创建 Jozu Hub 帐户时使用的电子邮件地址,密码即为用户名和密码。验证成功后,您将从 HuggingFace 下载一个模型。

步骤 3:从 HuggingFace 下载模型
前往HuggingFace 上的Qwen模型页面。您将看到一个文件列表,其中包括模型、LICENSE 文件和 README.md 文件。您可以通过在本地终端运行以下命令来安装所有这些软件包:

curl -L -O https://huggingface.co/Qwen/Qwen2-0.5B-Instruct-GGUF/blob/main/LICENSE
curl -L -O https://huggingface.co/Qwen/Qwen2-0.5B-Instruct-GGUF/blob/main/README.md
wget https://huggingface.co/Qwen/Qwen2-0.5B-Instruct-GGUF/resolve/main/qwen2-0_5b-instruct-q2_k.gguf
Enter fullscreen mode Exit fullscreen mode

这将把软件包安装到当前工作目录中。让我们让目录结构更易于阅读。

目前,您的目录结构应如下所示:

|-- Kitfile
|-- models
  |-- qwen2-0_5b-instruct-q2_k.gguf
|-- docs
  |-- LICENSE
  |-- README.md
Enter fullscreen mode Exit fullscreen mode

创建Kitfile 文件,并将你的软件包整理到两个新文件夹中:models 和 docs。将 Qwen 模型移动到 models 文件夹,将许可证和 Markdown 文档移动到 docs 文件夹。将以下代码复制到你的 Kitfile 文件中:

manifestVersion: 1.0.0
package:
  name: qwen2-0.5B
  version: 2.0.0
  description: The instruction-tuned 0.5B Qwen2 large language model.
  authors: [Emmanuel]
model:
  name: qwen2-0_5b-instruct-q2_k
  path: models/qwen2-0_5b-instruct-q2_k.gguf
  description: The model downloaded from hugging face
code:
  - path: docs/LICENSE
    description: License file.
  - path: docs/README.md
    description: Readme file.
Enter fullscreen mode Exit fullscreen mode

步骤 4:打包模型套件
接下来,您需要打包模型套件。为此,请运行以下命令:

kit pack . -t jozu.ml/<your-Jozu-username>/<your-Jozu-repository-name>:latest
Enter fullscreen mode Exit fullscreen mode

您在上面的步骤 2 中创建了 Jozu 存储库 - qwen-openshift。

将模型套件标记为最新版本。执行kit pack命令后,您应该会看到类似以下的输出:

模型套件打包

步骤 5:推送模型套件
要推送模型套件,请运行以下命令:

kit push jozu.ml/<your-Jozu-username>/<your-Jozu-repository-name>:latest
Enter fullscreen mode Exit fullscreen mode

命令执行完毕后,您应该会看到以下输出:

推广您的模型套件

成功推送至远程仓库后,您可以查看已上传到 Jozu Hub 容器注册表的软件包。

您在 Jozu Hub 的模型套件

将模型依赖项推送到 Jozu Hub 后,使用 OpenShift Pipelines 部署模型。

步骤 6:创建 OpenShift 流水线
Red Hat OpenShift一个平台,可简化大规模应用程序的构建、测试和部署。借助 OpenShift Pipelines,您可以获得一个内置于 Kubernetes 的 CI/CD 框架,该框架允许流水线的每个步骤在各自的容器中运行,从而实现更好的可扩展性。

将 Qwen Modelkit 部署到 OpenShift 流水线非常简单,只需几个步骤即可完成。第一步是创建一个开发者沙箱帐户

创建账户后,请访问您的控制面板,如下图所示。

OpenShift 控制面板

下一步是创建持久卷声明。创建持久卷声明的目的是为了在创建管道时,能够在各个任务之间共享数据。在左上角,切换到管理员。使用此管理员帐户,您将拥有创建持久卷声明所需的足够权限。

管理员页面

切换到管理员配置文件后,导航到存储部分,然后单击“创建持久卷声明”

创建持久卷声明

此时,您可以配置持久卷声明并为其指定存储大小。

配置PVC

创建持久卷声明后,切换回位于左上角的“开发者”配​​置文件。然后,点击“创建管道”开始构建 OpenShift 管道。
您可以通过两种方式创建管道:使用OpenShift Web 控制台上的管道构建器,或使用YAML以编程方式创建。本教程将使用 YAML 视图。
要继续操作,请在管道构建器中打开YAML 视图,并将以下代码粘贴到其中:

apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
  name: kit-pipeline
spec:
  finally:
    - name: login-pack-push-kit
      params:
        - name: SCRIPT
          value: './kit login jozu.ml -u $(params.EMAIL) -p $(params.PASSWORD) && ./kit pack . -t jozu.ml/emmanueloffisongetim/qwen-openshift:latest && ./kit push jozu.ml/emmanueloffisongetim/qwen-openshift:latest'
        - name: VERSION
          value: latest
      taskRef:
        kind: ClusterTask
        name: openshift-client
      workspaces:
        - name: manifest-dir
          workspace: workspace
        - name: kubeconfig-dir
          workspace: workspace
  params:
    - default: <your-password-for-jozu>
      name: PASSWORD
      type: string
    - default: <your-email-address-for-jozu>
      name: EMAIL
      type: string
  tasks:
    - name: git-clone
      params:
        - name: url
          value: 'https://github.com/Techtacles/kitops-openshift'
        - name: revision
          value: master
        - name: refspec
          value: ''
        - name: submodules
          value: 'true'
        - name: depth
          value: '1'
        - name: sslVerify
          value: 'true'
        - name: crtFileName
          value: ca-bundle.crt
        - name: subdirectory
          value: ''
        - name: sparseCheckoutDirectories
          value: ''
        - name: deleteExisting
          value: 'true'
        - name: httpProxy
          value: ''
        - name: httpsProxy
          value: ''
        - name: noProxy
          value: ''
        - name: verbose
          value: 'true'
        - name: gitInitImage
          value: 'registry.redhat.io/openshift-pipelines/pipelines-git-init-rhel8@sha256:48daa3092248256fd0538e4ecbecf2dfe5aff0373c4eed52601f11a9035f872f'
        - name: userHome
          value: /home/git
      taskRef:
        kind: ClusterTask
        name: git-clone
      workspaces:
        - name: output
          workspace: workspace
    - name: install-kit
      params:
        - name: SCRIPT
          value: 'wget https://github.com/jozu-ai/kitops/releases/latest/download/kitops-linux-x86_64.tar.gz && tar -xzvf kitops-linux-x86_64.tar.gz && ls && ./kit version'
        - name: VERSION
          value: latest
      runAfter:
        - git-clone
      taskRef:
        kind: ClusterTask
        name: openshift-client
      workspaces:
        - name: manifest-dir
          workspace: workspace
        - name: kubeconfig-dir
          workspace: workspace
    - name: unpack-kit
      params:
        - name: SCRIPT
          value: 'mkdir models && wget https://huggingface.co/Qwen/Qwen2-0.5B-Instruct-GGUF/resolve/main/qwen2-0_5b-instruct-q2_k.gguf && mv qwen2-0_5b-instruct-q2_k.gguf models'
        - name: VERSION
          value: latest
      runAfter:
        - install-kit
      taskRef:
        kind: ClusterTask
        name: openshift-client
      workspaces:
        - name: manifest-dir
          workspace: workspace
        - name: kubeconfig-dir
          workspace: workspace
  workspaces:
    - name: workspace
Enter fullscreen mode Exit fullscreen mode

在以下代码片段中,请将 `<your_jozu_email_address>` 替换为您的Jozu 邮箱地址,将 `<your_jozu_password>` 替换为您的Jozu 密码。完成这些更改后,点击“创建”按钮生成流程。流程完成后,流程视图应与下图所示一致。

管道视图

管道创建完成后,下一步是运行它。首先,单击“启动管道”。在“工作区”部分,选择“PersistentVolumeClaim”,然后选择您之前创建的卷。完成后,单击“启动”以运行管道。

选择持久卷声明

管道运行完成后,您将能够查看日志和成功图表,以指示管道的状态。

管道运行成功

流水线部署完成后,请导航至您在 Jozu Hub 上创建的仓库。在那里,您将找到流水线部署的新镜像。

Jozu Hub 中的图片

部署成功,新部署的镜像已在 Jozu Hub 上验证。

这段代码创建了一个名为qway-openshift-pipeline的 OpenShift 流水线。该流水线执行以下几个任务:安装模型套件、登录 Jozu Hub 代码库、从 HuggingFace 下载模型、打包模型套件并将其推送到 Jozu Hub 注册表。当您访问 OpenShift Web 控制台时,您将看到类似于下图的输出。

创建 OpenShift 流水线

您可以手动触发此流水线,也可以使用 Webhook与 GitHub集成。要手动运行流水线,请单击运行命令。执行后,您将看到如下所示的输出:

运行 OpenShift 流水线

至此,您已成功构建了机器学习管道。下一节将向您展示如何部署和使用从 Huggingface 导入的聊天机器人。

步骤 7:验证部署
OpenShift 默认会创建两个项目。在开发者门户中,点击“ +添加”。在 Git 仓库下,点击“容器镜像”。为您的部署命名。在本例中,部署名称为llama-cpp。此外,还要指定应用程序运行的端口。

创建 OpenShift 部署

从 Jozu Hub 选择要部署的 Qwen ModelKit,然后单击“创建”

部署 Qwen 模型

创建完成后,系统会为您的部署分配一个域。在后台,Kubernetes 部署、Pod、服务账号、自动伸缩组服务都会自动创建。在 Red Hat OpenShift 控制面板中,导航至“拓扑”视图即可查看代表您部署的拓扑图。

部署的可视化表示

接下来,如果您打开分配的域,您将看到已部署的llama-cpp容器。其中包含一个 Web 用户界面,您可以在其中发送提示并查看响应。

结果

在上图中,Qwen 模型被提示讨论“法国大革命”。只需几个步骤,您就成功构建了一个用于聊天机器人的 MLOps 流水线。

结论

使用合适的工具,构建高效的 MLOps 流水线可以很简单。借助 KitOps 和 OpenShift 流水线,您可以自动化构建和部署 MLOps 应用程序。此外,您还可以轻松地可视化模型并实时查看其性能,这非常实用。

KitOps 在打包模型和管理依赖项方面发挥着关键作用。OpenShift 可帮助您在每次变更时自动部署。这可以实现更快、更可靠的部署,并改善团队协作。

如果您对将 KitOps 集成到您的团队有任何疑问,请加入Discord上的讨论,并立即开始使用 KitOps!

文章来源:https://dev.to/jozu/how-to-turn-your-openshift-pipelines-into-an-mlops-pipeline-56na