通过 Jenkins Pipeline 部署 AI 项目
通过 Jenkins 流水线部署 AI 项目的步骤
结论
请注意,本文自 2024 年 11 月 20 日首次发布以来已更新。
想象一下,你构建了一个“完美的机器学习模型”,却不得不面对繁琐且容易出错的手动打包代码、将容器镜像推送到镜像仓库以及每次修改后重启服务器的过程。如果没有持续集成/持续部署 (CI/CD),这将成为开发人员和机器学习工程师的日常苦差事。
CI/CD 是一种 DevOps 理念,它通过自动化模型的构建、测试和部署,减轻了开发人员和机器学习工程师的手动操作负担。通过自动构建、测试模型及其依赖项(数据集、代码和配置)并进行版本控制,CI/CD 使大型团队能够无缝协作和部署,从而最大限度地降低出错或冲突的风险。
Jenkins是一个开源的 CI/CD 平台,可以简化 AI 项目的构建、测试和部署。它还拥有一个用户界面,能够以可视化的方式跟踪流水线的运行情况。本文将介绍如何通过 Jenkins 流水线自动部署 AI 项目。
太长不看
- KitOps enables teams to easily unpack artifact components such as models, code, and datasets to different directories.
- Jenkins lets you track pipeline runs and monitor your AI pipelines through a visual interface.
- Jenkins and KitOps simplify the process of building and deploying AI projects.
通过 Jenkins 流水线部署 AI 项目的步骤
先决条件
要完成此操作,您需要以下物品:
- 代码托管平台:创建一个 GitHub 帐户。如果您还没有帐户,可以按照此指南创建一个。在 GitHub 上创建一个仓库。本教程稍后会将此仓库与 Jenkins 集成。
- KitOps:以下是安装KitOps的 指南。
- Linux 环境:本教程专为 Linux 环境设计,您可以通过创建虚拟机或使用 Amazon Linux AMI启动 Amazon EC2实例来完成。如果您希望使用其他操作系统,则需要相应地调整 Jenkinsfile 中的命令。
- Jenkins:按照以下步骤在您的本地计算机、虚拟机或您选择的操作系统上安装 Jenkins 。
- 容器镜像仓库:您可以使用Jozu Hub、GitHub Package镜像仓库或DockerHub。本指南将使用 Jozu Hub。
验证 KitOps 是否已安装
安装完成后,请在本地终端运行以下命令来验证 KitOps 是否已安装:
kit version
创建 Jozu Hub 存储库
登录您的 Jozu Hub 帐户并创建一个存储库。这里,我创建了一个名为jenkins_repo 的空存储库。
您可以通过运行以下命令,使用 JozuHub 对您的本地终端进行身份验证:
kit login jozu.ml
系统会提示您输入用户名,用户名是创建 Jozu Hub 帐户时使用的电子邮件地址和密码。
拆开模型套件
登录 Jozu Hub 后,您可以从其软件包注册表中获取任何可用的模型套件。首先从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 文件。
manifestVersion: 1.0.0
package:
name: qwen2-0.5B
version: 2.0.0
description: The instruction-tuned 0.5B Qwen2 large language model.
authors: [Alibaba Cloud]
model:
name: qwen2-0_5b-instruct-q2_k
path: qwen2-0_5b-instruct-q2_k.gguf
license: Apache 2.0
description: 0.5B-instruct-q2_k.
code:
- path: LICENSE
description: License file.
- path: README.md
description: Readme file.
创建一些新文件夹,例如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: The instruction-tuned 0.5B Qwen2 large language model.
authors: [Alibaba Cloud]
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: License file.
- path: docs/README.md
description: Readme file.
现在您的 Kitfile、模型和依赖项都已准备就绪,让我们使用 Jenkins 构建 CI/CD 流水线。在继续操作之前,请先验证 Jenkins 是否已安装。
确认 Jenkins 已安装
安装 Jenkins 后,请访问 http://:8080 验证本地安装[http://localhost:8080](http://localhost:8080)。您将看到一个类似于下图的页面。根据您的操作系统,页面上会显示管理员密码的路径。
输入管理员密码后,系统会提示您创建管理员用户。创建用户后,您应该会看到 Jenkins 主屏幕:
创建 Jenkins 凭证
您可以创建 Jenkins 凭据,以便安全地输入您的 Jozu Hub 用户名和密码。导航至“管理 Jenkins”→“凭据”→“全局凭据”,然后创建两个凭据。第一个凭据类型为“秘密文本”,其中包含 Jozu Hub 用户名。
同样地,创建另一个 Jozu Hub 密码凭据,如下图所示。
创建凭证后,构建您的管道。
创建你的 GitHub Webhook
在 GitHub 仓库设置中,添加一个 Webhook 以连接 Jenkins。将Payload URL设置为`<JENKINS_URL>` JENKINS_URL/github-webhook/,并将`JENKINS_URL`替换为您的 Jenkins 服务器 URL。然后,选择“仅推送事件”以仅在代码推送时触发通知,并保存配置。
现在你的 webhook 已经创建好了,每次你向 GitHub 推送代码时,它都会查找 Jenkinsfile 文件,然后运行你的 Jenkins 流水线。如果你现在推送代码,将会抛出一个错误。这个错误是因为配置需要 Jenkinsfile 文件来运行代码,而该文件并不存在。
创建你的 Jenkinsfile
在根目录下创建一个名为Jenkinsfile 的文件。该文件包含登录 Jozu Hub、打包 ModelKit 以及将 ModelKit 推送到远程仓库的步骤。
请将以下代码写入您的Jenkinsfile:
pipeline {
agent any
environment {
USERNAME = credentials('USERNAME')
PASSWORD = credentials('PASSWORD')
}
stages {
stage('install kitops') {
steps {
cleanWs()
git(url: 'https://github.com/Techtacles/kitops-jenkins.git', branch: 'master')
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('Login to JozuHub'){
steps {
sh './kit login jozu.ml -u $USERNAME -p $PASSWORD'
echo 'Successfully logged in to jozuhub'
}
}
stage('Tagging and pushing to remote repository'){
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。根据您的操作系统,安装 KitOps 的命令可能有所不同。请按照以下步骤在您的操作系统中安装 KitOps 。
一旦你将代码推送到 GitHub,Jenkins 流水线就会启动。
该脚本登录到您的 Jozu Hub,将模型解压到models/目录中,打包 ModelKit,然后将其推送到远程存储库。
构建您的流程
在 Jenkins 用户界面中,转到“新建项目”并创建一个流水线。下图所示的流水线被命名为kitops_pipeline。
创建完成后,配置您的流水线并选择您的 GitHub 项目。在项目 URL 中,添加指向您在 GitHub 上创建的仓库的链接。
选择 GitHub hook 触发器作为构建触发器。
在流水线定义中,配置 Jenkins 流水线以从 GitHub 仓库获取 Jenkinsfile。指定仓库 URL、当前正在开发的分支以及 Jenkinsfile 的名称作为脚本路径。
流程完成后,请导航至 Jozu Hub 并检查您创建的存储库。您会发现一个新的 ModelKit 已推送至该存储库。
结论
每次修改后都要手动部署 AI 项目,这非常令人沮丧。借助 Jenkins 和 KitOps,您可以自动构建、测试和部署生产环境中的模型及其依赖项。
KitOps 在打包模型和管理依赖项方面发挥着关键作用。Jenkins 可帮助您在每次变更时自动部署,从而实现更快、更可靠的部署并改善团队协作。
如果您对将 KitOps 集成到您的团队有任何疑问,请加入Discord上的讨论,并立即开始使用 KitOps!
文章来源:https://dev.to/jozu/deploying-ai-projects-through-a-jenkins-pipeline-394b












