使用 Dagger.io 和 KitOps 构建 MLOps 管道 使用 Dagger 和 KitOps 构建 MLOps 管道的步骤 与 MLOps 集成 接下来会发生什么? 结论

2025-06-07

使用 Dagger.io 和 KitOps 构建 MLOps 管道

使用 Dagger 和 KitOps 构建 MLOps 管道的步骤

与 MLOps 集成

接下来会发生什么?

结论

行业分析师称,超过 85% 的机器学习模型永远无法投入生产。原因很简单,就是数据科学家、机器学习工程师和 DevOps 工程师之间的沟通脱节。将机器学习模型从概念转化为生产需要稳健、可扩展且高效的流程。

典型的机器学习生命周期涉及从各种数据源提取原始数据、数据预处理、模型训练、超参数调整、模型评估和模型部署的迭代过程。大多数机器学习项目都以模型部署阶段结束,这会导致多个问题:

  • 由于数据和模型漂移,机器学习模型变得适得其反。
  • 没有用于持续部署的持续集成和自动化管道。
  • 没有模型监控来查看您的模型在生产环境中的表现。

为了解决这个问题,我们使用了 MLOps 流水线,它融合了版本控制、CI/CD(持续集成和持续交付)、模型监控和集成测试。在本文中,我们将向您展示如何使用Dagger.ioKitOps创建 ML 流水线,将您的 AI 项目投入生产。

使用 Dagger,您可以将整个管道定义为代码,无缝集成监控功能,并实现 CI/CD。KitOps 简化了模型及其依赖项的打包,同时提供了版本控制管理等功能。

TL;DR

  • MLOps 管道改进您的机器学习应用程序,将监控、版本控制、CI/CD 和自动化纳入您的管道。
  • Dagger.io 和 KitOps 简化了构建 MLOps 管道的过程。
  • KitOps 使各个团队能够轻松地将模型、代码和数据集等工件组件解压到不同的目录中。
  • Dagger.io 可以与现有的 CI 平台集成,例如 GitHub Actions、CircleCI 和 GitLab CI。

使用 Dagger 和 KitOps 构建 MLOps 管道的步骤

先决条件

要学习本教程,您需要以下内容:

首先,您必须确保已在本地安装 Kit CLI。安装完成后,运行以下命令验证安装是否成功:

kit version
Enter fullscreen mode Exit fullscreen mode

您应该会看到如图所示的输出:

KitOps 版本

登录你的 Jozu Hub 账户并创建一个仓库。这里我创建了一个名为 的空仓库llm_repo

创建了一个名为 llm_repo 的空存储库。

您可以通过运行以下命令使用 JozuHub 验证您的本地终端:

kit login jozu.ml
Enter fullscreen mode Exit fullscreen mode

这将提示您输入用户名和密码。您的用户名是用于创建 Jozu Hub 帐户的电子邮件地址,密码则为该电子邮件地址。

解压模型套件

成功登录后,请在本地解压一个示例 ModelKit。您也可以从软件包注册表中获取任何 ModelKit。本教程使用Jozu的 Phi3 模型 枢纽
通过运行下面显示的代码来解压模型:

kit unpack  jozu.ml/jozu/phi3:3.8b-mini-instruct-4k-q4_K_M
Enter fullscreen mode Exit fullscreen mode

解压 ModelKit 后,您将看到一个文件列表:Kitfile、 Phi3 模型和一些markdown文档。

初始文件夹结构

解压后创建的 Kitfile 显示在下面的代码片段中。

manifestVersion: 1.0.0
package:
  name: phi3
  version: 3.0.0
  description: The Phi-3-Mini-4K-Instruct is a 3.8B parameters, lightweight, state-of-the-art open model
  authors: [Microsoft Corporation]
model:
  name: Phi-3-mini-4k-instruct-q4
  path: Phi-3-mini-4k-instruct-q4.gguf
  license: MIT License
  description: medium, balanced quality - recommended
code:
  - path: LICENSE
    description: License file.
  - path: README.md
    description: Readme file.
  - path: CODE_OF_CONDUCT.md
    description: Code of conduct file.
  - path: NOTICE.md
    description: Notice file.
  - path: SECURITY.md
    description: Security file.
Enter fullscreen mode Exit fullscreen mode

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

|-- models
        |-- Phi-3-mini-4k-instruct-q4.gguf
|-- docs
        |-- README.md
        |-- CODE_OF_CONDUCT.md
        |-- NOTICE.md
        |-- SECURITY.md
        |-- LICENSE
|-- kitfile
Enter fullscreen mode Exit fullscreen mode

修改 Kitfile 以反映目录结构。

manifestVersion: 1.0.0
package:
  name: phi3
  version: 3.0.0
  description: The Phi-3-Mini-4K-Instruct is a 3.8B parameters, lightweight, state-of-the-art open model
  authors: [Microsoft Corporation]
model:
  name: Phi-3-mini-4k-instruct-q4
  path: models/Phi-3-mini-4k-instruct-q4.gguf
  license: MIT License
  description: medium, balanced quality - recommended
code:
  - path: docs/LICENSE
    description: License file.
  - path: docs/README.md
    description: Readme file.
  - path: docs/CODE_OF_CONDUCT.md
    description: Code of conduct file.
  - path: docs/NOTICE.md
    description: Notice file.
  - path: docs/SECURITY.md
    description: Security file.
Enter fullscreen mode Exit fullscreen mode

本地测试模型

您可以在本地快速运行模型,以加快集成和实验速度。为此,您可以运行以下命令:

kit dev start
Enter fullscreen mode Exit fullscreen mode

这将启动一个开发服务器,您可以在其中测试您的模型、更改其参数并在 Web 浏览器中查看结果。

KitOps 开发服务器

现在您的模型已在本地运行,请将它们与 MLOps 集成。

与 MLOps 集成

安装 Dagger

您必须在本地安装 Dagger。您可以按照本指南进行操作。安装完成后,运行以下命令验证安装是否成功。

type dagger
Enter fullscreen mode Exit fullscreen mode

通过运行以下命令登录 Dagger Cloud:

dagger login
Enter fullscreen mode Exit fullscreen mode

这会提示你注册 Dagger Cloud。设置完成后,你必须按照本指南在 Dagger 上安装 Kit 。

dagger install github.com/jozu-ai/daggerverse/kit
Enter fullscreen mode Exit fullscreen mode

初始化 Dagger 模块

首先,确保你的 Docker 守护进程正在运行。初始化 Dagger 模块最简单的方法是在本地终端执行以下命令:

dagger init --sdk=python --source=./dagger
Enter fullscreen mode Exit fullscreen mode

您还可以指定 SDK,其语言可以是 Go、Python 或 TypeScript。使用 --source 标志指定源代码目录。这将为您创建一些文件,例如dagger.json、LICENSE和一个 dagger 文件夹,其中包含位于 的源代码模板dagger/src/main/__init__.py、一个dagger/pyproject.toml文件和一个dagger/sdk用于本地开发的文件夹。

初始化 Dagger 模块后,使用Daggerverse将其与 Kitfile 集成

使 Kitfile 更加 Dagger 化

Daggerverse 让发现和分享功能丰富的 Dagger 模块变得轻而易举。为了简单起见,本文将使用Daggerverse 中的Kit 模块。

在您的 中**dagger/src/__init__.py**使用下面的代码片段修改您的 ****Dagger 函数。

import dagger
from dagger import dag, function, object_type

@object_type
class KitopsDagger:
    @function
    def kit() -> dag.Kit:
        return (
            dag.kit()
        )
    @function
    async def version() -> str:
        return await (
            dag.kit()
            .version()
        )
    @function
    async def registry() -> str:
        return await (
            dag.kit()
            .registry()
        )
    @function
    def auth(username: str, password: dagger.Secret) -> dag.Kit:
        return (
            dag.kit()
            .with_auth(username, password)
        )
    @function
    def pack(directory: dagger.Directory, reference: str) -> dag.Kit:
        return (
            dag.kit()
            .pack(directory, reference)
        )

    @function
    async def push(reference: str) -> None:
        return await (
            dag.kit()
            .push(reference)
        )
Enter fullscreen mode Exit fullscreen mode

此模块包含 Dagger 函数,用于向 Jozu Hub 注册表进行身份验证、打包 ModelKit 并将其推送到注册表。使用以下命令将您的 Jozu Hub 密码导出到终端:

export PASSWORD=<your-jozuhub-password>
Enter fullscreen mode Exit fullscreen mode

要运行 Dagger 管道,请在终端上执行以下命令:

dagger -m github.com/jozu-ai/modelkit-factory/modules/kit@be110f46791083f69c44a509a7d2a667da50d6e3 call --registry jozu.ml with-auth --username <your-jozuhub-email> --password env:<your-jozuhub-password> pack --directory . --reference jozu.ml/<your-jozuhub-username>/<your-jozuhub-repository>:<tag> --kitfile Kitfile push --reference jozu.ml/<your-jozuhub-username>/<your-jozuhub-repository>:<tag>
Enter fullscreen mode Exit fullscreen mode

接下来会发生什么?

执行 Dagger 流水线后,已部署的模型将被打包成 ModelKit,并推送到 Jozu Hub 注册表。在 Dagger Cloud 的 UI 上,您可以可视化您的流水线、查看日志,并了解流水线每一步的运行情况。

匕首云

此部署的时间取决于模型的大小。管道运行完成后,您将在 Jozu Hub 注册表中看到您的软件包。

类似地,您可以通过在终端上运行以下命令将推送的 ModelKit 解压到单独的位置:

kit unpack jozu.ml/<your-jozu-username>/<your-jozu-repo>:<tag> --model -d <path-to-create>
Enter fullscreen mode Exit fullscreen mode

将工作流与 CI/CD 管道集成

想象一下,每当您更改数据集、代码或模型时,都需要重复所有这些步骤。这会减慢您的开发速度,并使协作变得麻烦。手动部署效率低下、容易出错,并且难以扩展。

GitHub Actions 和 Jenkins 等 CI/CD 流水线在软件部署和发布的自动化过程中发挥着至关重要的作用。让我们将 Dagger 函数与 GitHub Actions 集成,以实现 ModelKit 的自动打包和推送到容器注册表。

创建一个文件**.github/workflows/master.yml***并使用下面的代码片段修改你的* Dagger 函数。

name: dagger
on:
  push:
    branches: [master]
jobs:
  run-dagger:
    name: Run Dagger Pipeline
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Install Kit
        uses: jozu-ai/gh-kit-setup@v1.0.0
      - name: Run kit unpack
        run: |
            kit version
            kit unpack jozu.ml/jozu/phi3:3.8b-mini-instruct-4k-q4_K_M --model -d models/Phi-3-mini-4k-instruct-q4.gguf

      - name: Call Dagger Function
        uses: dagger/dagger-for-github@v6
        with:
          version: "latest"
          verb: call --registry jozu.ml
          module: github.com/jozu-ai/daggerverse/kit
          args: with-auth --username $JOZU_EMAIL --password env:JOZU_PASS pack --directory . --reference jozu.ml/emmanueloffisongetim/llm_repo:$TAG --kitfile Kitfile push --reference jozu.ml/emmanueloffisongetim/llm_repo:$TAG
          cloud-token: ${{ secrets.DAGGER_CLOUD_TOKEN }}
        env:
            KIT_PAT: ${{ secrets.KIT_PAT }}
            JOZU_PASS: ${{ secrets.JOZU_PASSWORD }}
            JOZU_EMAIL: ${{ secrets.JOZU_EMAIL }}
            TAG: champion
Enter fullscreen mode Exit fullscreen mode

每当您进行更改并将其推送到主分支时,都会触发 CI/CD 流水线。此流水线会检出GitHub 仓库,安装 Kit,将 Phi3 模型解压到 Kitfile 中指定的目录中,并在 Dagger Cloud 上运行 Dagger 流水线。

理想情况下,本地构建的模型过于庞大,无法推送到 GitHub。因此,在 CI/CD 流水线中解压模型是一种更高效的做法。推送到主分支后,您将看到类似下图的输出。让我们修改流水线,并将“ latest ”标签版本推送到 Jozu Hub。

GitHub Actions 运行

如果您检查 Jozu Hub 注册表,您将看到 ModelKit 的新版本,这意味着您的部署已成功。

结论

使用合适的工具可以轻松构建有效的 MLOps 流水线。通过集成 Dagger 和 KitOps,您可以简化模型开发、版本控制和部署,从而更轻松地在生产环境中扩展和维护机器学习模型。

KitOps 在打包模型、管理依赖项和自动化工作流方面发挥着关键作用。Dagger.io 让您可以轻松地将流水线定义为代码并监控 MLOps 流水线。这不仅提高了部署速度和可靠性,还增强了团队协作。

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

文章来源:https://dev.to/kitops/building-an-mlops-pipeline-with-daggerio-and-kitops-566m
PREV
简化数据科学家和应用程序开发人员之间协作的工具
NEXT
我辞去了生意,开始开发开源开发工具