想象你构建了一个“完美的机器学习模型”,却发现不得不面对繁琐且容易出错的过程,手动打包你的代码,将容器镜像推送到注册表,每次更改代码后还得重启服务器。如果没有持续集成/持续部署(CI/CD) 流程,这将成为开发人员和机器学习工程师每天的苦活。
CI/CD 是 DevOps 中的一个概念,通过自动化构建、测试和部署模型来减轻开发人员和机器学习工程师的手动任务负担。通过自动构建、测试和版本控制您的模型以及其依赖项(如数据集、代码和配置等),CI/CD 让大团队能无缝协作和部署,从而减少错误或冲突的风险。
Jenkins 是一个开源的 CI/CD 平台,它能够帮助构建、测试和部署 AI 项目。它还有一个用户界面,可以直观地追踪流水线的运行。本文将教你如何自动部署你的 AI 项目使用 Jenkins 流水线。
简述- KitOps 允许团队轻松地将模型、代码和数据集等工件组件解包并分别存放在不同的目录中。
- Jenkins 让你可以通过一个可视化的界面来跟踪管道运行并监控你的 AI 项目管道。
- Jenkins 和 KitOps 简化了构建和部署 AI 项目的全过程。
要继续,你需要以下这些。
- 一个代码托管平台:创建一个 GitHub 账号。如果没有账号,可以参考此指南进行注册。在 GitHub 上创建一个仓库,稍后本教程会将该仓库与 Jenkins 进行集成。
- KitOps: 这里有一份安装指南。
- Jenkins: 本地安装 Jenkins 请按照这些步骤操作。
- 一个容器注册表: 可以使用 Jozu Hub,GitHub 包注册表 或 DockerHub。本指南将使用 Jozu Hub。
安装完成后,可以通过在本地终端试试以下命令来验证KitOps是否安装成功:
<command>
版本号
点一下全屏 再点一下退出全屏
创建一个 Jozu Hub 项目登录到您的 Jozu Hub 账户并创建一个名为 jenkins_repo 的空的仓库。在这里面,我创建了一个空仓库。
你可以通过运行以下命令来认证你的终端到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: 说明文件。
切换全屏模式/退出全屏模式
创建一些新的文件夹,比如models和docs,并调整目录结构如下:
|-- 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/LICENSE和docs/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凭据,以安全地输入你的Jozu Hub用户名和密码。导航到管理Jenkins → 凭据 → 全局凭据,然后创建两个凭据,一个是类型为密码文本(Secret Text),包含Jozu Hub用户名。
为你的Jozu Hub密码创建另一个凭证身份,如下面的图片所示。
创建凭证之后,构建你的流水线。
来吧,搭建你的流水线在 Jenkins 用户界面上,点击 新建项目,并按照链接中的教程创建一个流水线。如下图所示,将新建的流水线命名为 kitops_pipeline。
如图所示,点击创建Jenkins流水线
创建完成后,您可以配置您的流水线并选择您的 GitHub 项目。在项目的URL后面,添加您在GitHub上创建仓库的链接。
选择 GitHub 挂钩触发器作为构建触发条件。
在管道定义下,配置您的Jenkins管道,以从GitHub仓库中获取Jenkinsfile。指定您的仓库URL、您当前正在使用的分支,以及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 构建流水线就开始了。
此脚本会登录您的Jozu Hub,将模型解包到models/ (模型文件夹),将ModelKit打包,并将其推送到远程仓库。
一旦管道部署完成,进入 Jozu Hub 并检查你创建的仓库。你会发现一个新的 ModelKit 已经添加到了仓库中。
最后:每次你做出更改时都要手动部署AI项目真是让人沮丧。使用Jenkins和KitOps,你可以利用它们自动化模型及其依赖项的构建、测试和部署过程。
KitOps 在打包模型和管理依赖方面起着关键作用。Jenkins 可以自动部署每次的更改,从而实现更快且更可靠的部署,并提高团队合作效率。
共同学习,写下你的评论
评论加载中...
作者其他优质文章