为了账号安全,请及时绑定邮箱和手机立即绑定

使用Jenkins流水线自动化部署AI项目

想象你构建了一个“完美的机器学习模型”,却发现不得不面对繁琐且容易出错的过程,手动打包你的代码,将容器镜像推送到注册表,每次更改代码后还得重启服务器。如果没有持续集成/持续部署(CI/CD) 流程,这将成为开发人员和机器学习工程师每天的苦活。

CI/CD 是 DevOps 中的一个概念,通过自动化构建、测试和部署模型来减轻开发人员和机器学习工程师的手动任务负担。通过自动构建、测试和版本控制您的模型以及其依赖项(如数据集、代码和配置等),CI/CD 让大团队能无缝协作和部署,从而减少错误或冲突的风险。

Jenkins 是一个开源的 CI/CD 平台,它能够帮助构建、测试和部署 AI 项目。它还有一个用户界面,可以直观地追踪流水线的运行。本文将教你如何自动部署你的 AI 项目使用 Jenkins 流水线。

简述
  • KitOps 允许团队轻松地将模型、代码和数据集等工件组件解包并分别存放在不同的目录中。
  • Jenkins 让你可以通过一个可视化的界面来跟踪管道运行并监控你的 AI 项目管道。
  • Jenkins 和 KitOps 简化了构建和部署 AI 项目的全过程。
基于Jenkins管道部署AI项目的步骤:
先决条件

要继续,你需要以下这些。

检查KitOps是否已安装

安装完成后,可以通过在本地终端试试以下命令来验证KitOps是否安装成功:
<command>

版本号

点一下全屏 再点一下退出全屏

创建一个 Jozu Hub 项目

登录到您的 Jozu Hub 账户并创建一个名为 jenkins_repo 的空的仓库。在这里面,我创建了一个空仓库。

Jenkins 代码库 JozuHub

你可以通过运行以下命令来认证你的终端到JozuHub。

在命令行输入 `kit login jozu.ml`

全屏 / 退出全屏

这里要求您输入用户名,即您用于注册 Jozu Hub 账户的电子邮件地址,以及密码。

让我们开始解包 ModelKit 模型

登录 Jozu Hub 后,你可以从他们的包注册表中获取任何可用的ModelKit(模型套件)。首先,从Jozu Hub下载并解压Qwen模型。

在你的本地终端上,运行这个命令

    kit unpack jozu.ml/jozu/qwen2-0.5b:0.5b-instruct-q2_K

这是一个解包特定包或模型的命令。

全屏 退出全屏

当你打开一个ModelKit时,你会看到一些文件:Kitfile,一个Qwen模型,一个许可文件Markdown格式的文档

当前的目录结构如下:

    |-- Kitfile
    |-- qwen2-0_5b-instruct-q2_k.gguf
    |-- README.md
    |-- LICENSE
(Kitfile文件用于项目配置,README.md和LICENSE文件是常见的项目说明和许可文件)

点击这里进入全屏模式,点击这里退出全屏模式

解压 ModelKit 后生成的 Kitfile 如下。

    manifestVersion: 1.0.0
    package:
      name: qwen2-0.5B
      version: 2.0.0
      description: 指令调优的0.5B大型语言模型。
      authors: [阿里云]
    model:
      name: qwen2-0_5b-instruct-q2_k
      path: qwen2-0_5b-instruct-q2_k.gguf
      license: Apache 2.0
      description: 0.5B版本的指令调优q2_k模型。
    code:
      - path: LICENSE
        description: 许可证文件。
      - path: README.md
        description: 说明文件。

切换全屏模式/退出全屏模式

创建一些新的文件夹,比如modelsdocs,并调整目录结构如下:

    |-- Kitfile  # 初始化文件
    |-- models  # 模型文件夹
      |-- qwen2-0_5b-instruct-q2_k.gguf  # 模型文件
    |-- docs  # 文档文件夹
      |-- LICENSE  # 许可证文件
      |-- README.md  # 说明文件

全屏模式(进入/退出)

修改Kitfile以反映更新后的目录结构。在更新后的Kitfile中,模型路径更新为models/qwen2-0_5b-instruct-q2_k.gguf。LICENSE和README.md的路径也分别更新为docs/LICENSEdocs/README.md

    manifestVersion: 1.0.0
    package:
      name: qwen2-0.5B
      version: 2.0.0
      description: 0.5B 指令调优的Qwen2大型语言模型。
      authors: [阿里云]
    model:
      name: qwen2-0_5b-instruct-q2_k
      path: models/qwen2-0_5b-instruct-q2_k.gguf
      license: Apache 2.0
      description: 0.5B-instruct-q2_k.
    code:
      - path: docs/LICENSE
        description: 许可证文件。
      - path: docs/README.md
        description: README文件。

点击此处切换到全屏 点击此处退出全屏

现在你的Kitfile、模型(model)和依赖都已经准备好了,让我们用Jenkins构建CI/CD / 流水线。在继续之前,请先检查一下Jenkins是否已安装。

确认 Jenkins 是否已安装

安装 Jenkins 后,为了验证本地安装是否正确,可以在浏览器中输入 [http://localhost:8080](http://localhost:8080)。你会看到一个类似下面图片的页面。根据你的操作系统,管理员密码的路径也会有所不同。

查看Jenkins验证

输入管理员密码之后,系统将提示您创建管理员用户。创建该用户后,您将看到Jenkins主页:

Jenkins 首页

在Jenkins中创建凭证

你可以创建Jenkins凭据,以安全地输入你的Jozu Hub用户名和密码。导航到管理Jenkins → 凭据 → 全局凭据,然后创建两个凭据,一个是类型为密码文本(Secret Text),包含Jozu Hub用户名。

创建用户名和密码

为你的Jozu Hub密码创建另一个凭证身份,如下面的图片所示。

设置密码

创建凭证之后,构建你的流水线。

来吧,搭建你的流水线

在 Jenkins 用户界面上,点击 新建项目,并按照链接中的教程创建一个流水线。如下图所示,将新建的流水线命名为 kitops_pipeline

如图所示,点击创建Jenkins流水线创建Jenkins流水线

创建完成后,您可以配置您的流水线并选择您的 GitHub 项目。在项目的URL后面,添加您在GitHub上创建仓库的链接。

Jenkins 构建流水线设置

选择 GitHub 挂钩触发器作为构建触发条件。

设置Jenkins管道

在管道定义下,配置您的Jenkins管道,以从GitHub仓库中获取Jenkinsfile。指定您的仓库URL、您当前正在使用的分支,以及Jenkinsfile的名称。

在Jenkinsfile中配置Jenkins管道 - 从Jenkinsfile构建

创建你自己的GitHub webhook

在你的 GitHub 仓库设置里,添加一个 webhook 以连接到 Jenkins。将 负载 URL 设置为 JENKINS_URL/github-webhook/,将 JENKINS_URL 替换为你自己的 Jenkins 服务器的 URL。然后,选择 仅当代码推送时触发,以便仅在推送代码时发送通知,然后保存设置。

为了查看图片,请点击链接:图片

既然你已经创建了 webhook,每次你向 GitHub 推送代码时,它会寻找要运行的 Jenkinsfile 并运行你的 Jenkins 管道。不过,如果你现在推送代码,它会出现一个错误。这个错误是因为配置寻找要运行的 Jenkinsfile,但这个文件并不存在。

创建你的Jenkins文件

在你的根目录下创建一个名为Jenkinsfile的文件。这个文件包含了登录Jozu Hub、打包ModelKit并将其推送到远程仓库里的步骤。

在 Jenkinsfile 中写入以下代码:

    pipeline {
        agent any 
        environment {
            USERNAME = credentials('USERNAME')
            PASSWORD = credentials('PASSWORD')
        }
        stages {
            stage('安装KitOps') {
                steps {
                    cleanWs()
                    git(url: 'https://github.com/Techtacles/kitops-jenkins.git', branch: 'master')
                    ls
                    sh 'wget https://github.com/jozu-ai/kitops/releases/latest/download/kitops-linux-x86_64.tar.gz'
                    sh 'tar -xzvf kitops-linux-x86_64.tar.gz'
                    sh './kit version'
                }
            }
            stage('登录到Jozu Hub') {
                steps {
                    sh './kit login jozu.ml -u $USERNAME -p $PASSWORD'
                    echo '成功登录到Jozu Hub'
                }
            }
            stage('向远程仓库打标签并推送') {
                steps {
                    sh './kit unpack jozu.ml/jozu/qwen2-0.5b:0.5b-instruct-q2_K --model -d models/qwen2-0.5b-instruct-q2_K.gguf'
                    sh './kit pack . -t jozu.ml/<your-jozu-username>/<your-jozu-repo>:latest'
                    sh './kit push jozu.ml/<your-jozu-username>/<your-jozu-repo>:latest'
                }
            }
        }
    }

进入全屏 退出全屏

上述代码片段定义了一个Jenkinsfile,包括三个阶段;第一个阶段安装Kitops的最新版本,第二个阶段使用之前配置的用户名和密码登录JozuHub,最后一个阶段为Modelkit打标签并推送到JozuHub。

当你把代码推送到 GitHub 之后,Jenkins 构建流水线就开始了。

一张Jenkins 流水线的图片

此脚本会登录您的Jozu Hub,将模型解包到models/ (模型文件夹),将ModelKit打包,并将其推送到远程仓库。

一旦管道部署完成,进入 Jozu Hub 并检查你创建的仓库。你会发现一个新的 ModelKit 已经添加到了仓库中。

这图是JozuHub上的最终图片,点击这里查看

最后:

每次你做出更改时都要手动部署AI项目真是让人沮丧。使用Jenkins和KitOps,你可以利用它们自动化模型及其依赖项的构建、测试和部署过程。

KitOps 在打包模型和管理依赖方面起着关键作用。Jenkins 可以自动部署每次的更改,从而实现更快且更可靠的部署,并提高团队合作效率。

如果你有关于将KitOps与团队集成有任何疑问,请加入Discord参与讨论,并在指引中开始使用KitOps吧!

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消