使用Dagger.io和KitOps搭建MLOps流水线

2024/10/12 21:02:54

本文主要是介绍使用Dagger.io和KitOps搭建MLOps流水线,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

根据行业分析师的说法,超过85%的机器学习模型最终无法进入实际应用。原因很简单,就是数据科学家、机器学习工程师和DevOps工程师之间的沟通障碍。将一个机器学习模型从概念变为实际应用需要一个稳健、可扩展且高效的流程。

典型的机器学习生命周期包括从各种数据源提取原始数据,进行数据预处理工作、模型训练、超参数调优、模型评估以及模型部署的迭代流程。大多数机器学习项目通常在模型部署阶段结束,这通常会导致一些问题。

  • 由于数据和模型漂移,机器学习模型产生了适得其反的效果。
  • 没有持续集成和自动部署的管道。
  • 没有模型监控来观察你训练的模型在实际应用环境中的表现。

为了解决这个问题,我们使用了包含版本控制、CI/CD(持续集成和持续交付)、模型监控和集成测试等的MLOps流水线。这篇文章会展示如何利用Dagger.io和KitOps来创建一个ML管道,帮助您的AI项目顺利进入生产环境。

使用 Dagger,您可以将整个工作流定义为代码,无缝地集成监控和日志,并实现持续集成和持续部署。KitOps 简化了模型及其依赖项的打包过程,并管理版本控制等功能。

![](https://imgapi.imooc.com/6709d289083d9b7908000615.jpg)

TL;DR (即不读全文,直接看结论)
  • MLOps 管道可以提升您的机器学习应用程序的性能,将其监控、版本控制、CI/CD 和自动化融入到管道中。
  • Dagger.io 和 KitOps 简化了搭建 MLOps 管道的过程。
  • KitOps 可以让不同的团队成员轻松地将模型、代码和数据集等工件组件解包到不同的目录中。
  • Dagger.io 能够集成到现有的 CI 平台(如 GitHub Actions、CircleCI 和 GitLab CI)。
使用Dagger和KitOps构建MLOps(机器学习运维)管道的步骤
先决条件

为了跟上本教程,您需要以下内容:

  • 一个容器注册表: 可以使用Jozu Hub,GitHub 包注册表或DockerHub。本指南使用的是Jozu Hub。
  • 代码托管平台: 可以使用GitHub或GitLab。
  • KitOps: 参见安装KitOps的指南。
  • Dagger.io: 按照这些说明安装Dagger.io。将使用Dagger Cloud来帮助您更好地理解Dagger流水线。
  • Docker: 按照此指南中的步骤在本地安装Docker。

首先,你得确保本地安装了Kit命令行工具。安装完成后,然后可以使用以下命令来验证安装:

kit --version

这个套件的版本

切换到全屏查看 结束全屏

你应该看到如下图所示的输出。

KitOps 版本 图片

登录您的Jozu Hub账户并创建一个仓库。这里,我创建了一个空的代码仓库,名叫llm_repo

创建了一个空的仓库,叫做 llm_repo。

你可以通过运行命令来验证你的本地终端是否连接到JozuHub:

# 命令内容保持英文原样

运行 kit 登录 jozu.ml

全屏模式,退出全屏

这会要求你输入用户名和密码。你的用户名是你用来注册 Jozu Hub 账户的 电子邮件地址,而密码则是另一个单独输入的。

拆开 ModelKit 包装:

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

执行 kit unpack: jozu.ml/jozu/phi3:3.8b-迷你指令-4k-q4_K_M

全屏,退出

打开ModelKit安装包后,你会看到如下文件:KitfilePhi3模型,以及一些markdown格式的文档。

初始文件夹

解压后生成的Kitfile如下所示。

    manifestVersion: 1.0.0
    package:
      name: phi3
      version: 3.0.0
      description: Phi-3-Mini-4K-Instruct 是一个拥有 38 亿参数,轻量级且最先进的开源模型
      authors: [Microsoft Corporation]
    model:
      name: Phi-3-mini-4k-instruct-q4
      path: Phi-3-mini-4k-instruct-q4.gguf
      license: MIT 许可证
      description: 中等质量,平衡 - 推荐
    code:
      - path: LICENSE
        description: 许可证文件。
      - path: README.md
        description: README 文件。
      - path: CODE_OF_CONDUCT.md
        description: 行为规范文件。
      - path: NOTICE.md
        description: 说明文件。
      - path: SECURITY.md
        description: 安全指南文件。

点击全屏按钮进入或退出全屏模式

到这个时候,你的目录结构应该像这样:

如下图所示:

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

全屏 / 退出全屏

把Kitfile修改一下,让它反映出目录结构。

    manifestVersion: 1.0.0
    package:
      name: phi3
      version: 3.0.0
      description: Phi-3-Mini-4K-Instruct 是一个拥有 380 亿参数的轻量级、顶尖的开源模型
      authors: [Microsoft Corporation]
    model:
      name: Phi-3-mini-4k-instruct-q4
      path: models/Phi-3-mini-4k-instruct-q4.gguf
      license: MIT License
      description: 中等平衡的质量 - 推荐
    code:
      - path: docs/LICENSE
        description: 许可证文件。
      - path: docs/README.md
        description: 说明文件。
      - path: docs/CODE_OF_CONDUCT.md
        description: 行为准则文件。
      - path: docs/NOTICE.md
        description: 通知文件。
      - path: docs/SECURITY.md
        description: 安全文件。

进入全屏 退出全屏

本地测试:模型

你可以快速地在本地运行你的模型来加快集成和实验过程。你可以通过运行以下命令试试看。

    kit dev start

全屏/退出全屏

这会启动一个可以用来测试和调整你的模型参数的开发服务器,并通过浏览器查看结果。

KitOps 开发服务器

现在你的模型已经在本地跑起来,接下来就把它们和MLOps整合起来。

集成MLOps技术
安装 Dagger

您必须在本地安装 Dagger。为此目的,您可以遵循此指南。安装完成后,您可以运行以下命令来验证安装是否成功。

类型:匕首

切换到全屏模式。退出全屏

要登录 Dagger Cloud,只需运行这个命令。

运行 dagger 登录命令

进入全屏 退出全屏

注册Dagger Cloud账号后,完成设置后,您必须使用此指南在Dagger上安装Kit插件。

    dagger install github.com/jozu-ai/daggerverse/kit

进入全屏,退出全屏

初始化 Dagger 模块

首先,确保Docker守护进程正在运行。最简单的方法是通过在您的本地终端输入如下命令:

运行以下命令初始化dagger, 使用Python SDK并指定源目录./dagger:

dagger init --sdk=python --source=./dagger

全屏模式 退出全屏

你也可以指定SDK,这可以是用Go、Python或TypeScript编写。使用`--source`标志来指定源代码所在的目录。这将创建一些文件,例如**dagger.json**、**LICENSE**和一个dagger文件夹,其中包含`dagger/src/main/__init__.py`文件的源代码模板文件,一个`dagger/pyproject.toml`文件,以及一个供本地开发使用的`dagger/sdk`文件夹。

在初始化 Dagger 模块之后,使用 Daggerverse 将其与 Kit 文件进行集成。

## 增强你的Kitfile

Daggerverse 让发现和分享包含 Dagger 函数的模块变得简单。为了简单起见,本文将使用来自 Daggerverse 的 [**Kit 模块**](https://daggerverse.dev/mod/github.com/jozu-ai/modelkit-factory/modules/kit@be110f46791083f69c44a509a7d2a667da50d6e3#kit.constructor)。

在你的 `dagger/src/__init__.py` 文件中,用下面的代码片段来修改你的 Dagger 函数。

import dagger
from dagger import dag, function, object_type

@对象类型,用于定义一个对象类型

@object_type
class KitopsDagger:

创建并返回一个Kit实例
@function
def kit() -> dag.Kit:
    return (
        dag.kit()
    )

# 异步获取Kit的版本信息
@function
async def version() -> str:
    return await (
        dag.kit()
        .version()
    )

# 异步获取Kit的注册表信息
@function
async def registry() -> str:
    return await (
        dag.kit()
        .registry()
    )

# 使用用户名和密码进行身份验证并返回一个Kit实例
@function
def auth(username: str, password: dagger.Secret) -> dag.Kit:
    return (
        dag.kit()
        .with_auth(username, password)
    )

# 打包指定目录并返回一个Kit实例
@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)
    )
切换到全屏 退出全屏

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

export PASSWORD=<你的jozuhub密码> (请替换为你的实际密码)

进入全屏 退出全屏

要运行您的Dagger管道,在终端中执行以下命令:

请在此处输入实际命令
```sh
# 执行实际的命令
dagger -m github.com/jozu-ai/modelkit-factory/modules/kit@be110f46791083f69c44a509a7d2a667da50d6e3 call --registry jozu.ml 带认证 --username <你的邮箱> --password env:<你的密码> pack --directory . --reference jozu.ml/<你的用户名>/<你的仓库>:<标签> --kitfile Kitfile push --reference jozu.ml/<你的用户名>/<你的仓库>:<标签>

注意:此命令用于将本地目录中的内容打包并推送到指定的仓库,需要替换 <你的邮箱><你的密码><你的用户名><你的仓库><标签> 为实际值。

进入全屏,退出全屏

接下来会怎样?

在执行您的Dagger管道之后,您的部署模型会被打包成一个ModelKit并推送到Jozu Hub注册表中。在Dagger Cloud的UI上,您能够可视化管道,查看日志,了解管道在每个步骤的运行情况。

匕首云

部署所需的时间取决于您的模型大小。当管道运行结束后,您可以在Jozu Hub的注册表中找到您的包。

你也可以在终端运行这个命令,把ModelKit解压到另一个地方。

kit unpack jozu.ml/<你的jozu用户名>/<你的jozu仓库>:<版本号> --model -d <路径>

全屏 退出全屏

将工作流与持续集成和持续部署(CI/CD)管道集成

想象每次更换数据集、代码或模型时,都需要重复这些步骤。这会拖慢你的开发进度并使合作变得复杂。手动部署效率低且容易出错,并且难以扩展和管理。

CI/CD 流水线,如 GitHub Actions 和 Jenkins 等,在自动化软件部署和发布方面起到了至关重要的作用。让我们把 Dagger 函数和 GitHub Actions 整合起来,以便自动打包并将 ModelKits 推送到容器仓库。

创建一个名为 **.github/workflows/master.yml** 的文件,并修改您的 Dagger 函数,并在其中加入以下片段。

    name: dagger
    on:
      push:
        branches: [master]
    jobs:
      run-dagger:
        name: 运行 Dagger 任务
        runs-on: ubuntu-latest
        steps:
          - name: 拉取代码
            uses: actions/checkout@v4
          - name: 安装 Kit
            uses: jozu-ai/gh-kit-setup@v1.0.0
          - name: 解包 Kit
            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: 执行 Dagger 函数
            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 }} # 密钥: KIT_PAT
                JOZU_PASS: ${{ secrets.JOZU_PASSWORD }}
                JOZU_EMAIL: ${{ secrets.JOZU_EMAIL }}
                TAG: champion

进入全屏。退出全屏。

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

理想情况下,本地构建的模型太大以至于无法推送到GitHub。因此,在您的CI/CD管道中解包模型更为有效。当您推送到主分支时,您将看到类似于下方图片的输出内容。我们来修改管道,并将‘latest’标签版本推送到Jozu Hub。

GitHub Actions 状态

如果你检查你的Jozu Hub注册表(Registry),你会看到ModelKit的新版本,这意味着你的部署已经成功。

结尾

使用正确的工具,构建有效的MLOps管道其实很简单。通过集成Dagger和KitOps,你可以将模型开发流程、版本管理和部署简化成,使得扩大和维护生产中的机器学习模型更容易。

KitOps 在打包模型包、管理依赖项和自动化工作流中发挥着关键作用。Dagger.io 是一个简化管道定义和监控的平台,使以代码形式定义管道并监控您的 MLOps 管道情况变得容易。这使得部署更快更可靠,同时团队协作也得到了提升。

如果你有关于将KitOps与你的团队集成有任何疑问,加入Discord和大家一起讨论,并从这里开始今天就开始使用KitOps吧!



这篇关于使用Dagger.io和KitOps搭建MLOps流水线的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程