MLflow + KitOps 机器学习工程化实战
展示如何集成两大MLOps工具管理AI项目依赖和部署,对ML工程师有实用价值。
展示如何集成两大MLOps工具管理AI项目依赖和部署,对ML工程师有实用价值。
随着人工智能(AI)项目复杂性的增加,管理依赖关系、保持可重现性和高效部署模型成为了关键挑战。这些过程需要能够简化开发、跟踪和部署的工具。KitOps 和 MLflow 这样的工具通过自动化机器学习(ML)项目生命周期的关键方面来简化工作流。KitOps 简化了 AI 项目的设置,而 MLflow 则跟踪和管理机器学习实验。利用这些工具,开发人员可以大规模创建健壮、可扩展且可重现的 ML 管道。
在本指南中,你将学习分步集成 KitOps 和 MLflow 进行端到端模型管理的过程。不过,在开始详细步骤之前,理解为什么集成 KitOps 和 MLflow 很重要是必需的。
KitOps 与 MLflow 的集成使机器学习团队能够更高效地工作。KitOps 为工作流建立了明确定义的框架,而 MLflow 则专注于详细的跟踪和高效的部署。
这两个工具结合在一起,可以让数据科学团队在几分钟内设置 AI 项目、监控和比较实验,以及将模型无缝部署到生产环境。
以下是该集成如何增强 AI/ML 工程师的机器学习项目生命周期:
端到端工作流管理 KitOps 使用 Kitfile 提供结构良好的模块化架构,而 MLflow 跟踪每个实验的细节。它们一起管理整个生命周期——从数据摄入到模型训练、评估和部署。
端到端工作流管理 KitOps 使用 Kitfile 提供结构良好的模块化架构,而 MLflow 跟踪每个实验的细节。它们一起管理整个生命周期——从数据摄入到模型训练、评估和部署。
可重现性和可追踪性 可重现性确保 AI 系统使用相同版本的数据和代码时能复制一致的输出,这使 AI 系统保持可信赖。通过 KitOps,你可以对工作流组件进行版本控制和重用(使用现有容器注册表),而 MLflow 会记录每个实验及其详细的元数据。这种集成使每个实验都可追踪,便于协作。
可重现性和可追踪性 可重现性确保 AI 系统使用相同版本的数据和代码时能复制一致的输出,这使 AI 系统保持可信赖。通过 KitOps,你可以对工作流组件进行版本控制和重用(使用现有容器注册表),而 MLflow 会记录每个实验及其详细的元数据。这种集成使每个实验都可追踪,便于协作。
跨团队协作 机器学习项目通常涉及来自多个团队的多个利益相关者,从数据工程师到 ML 工程师和 DevOps 团队。KitOps 提供了一个促进协作的结构化框架,而 MLflow 提供了一个统一的接口来跟踪进度。它们结合在一起,能够弥合开发和运维之间的差距。
跨团队协作 机器学习项目通常涉及来自多个团队的多个利益相关者,从数据工程师到 ML 工程师和 DevOps 团队。KitOps 提供了一个促进协作的结构化框架,而 MLflow 提供了一个统一的接口来跟踪进度。它们结合在一起,能够弥合开发和运维之间的差距。
生产环境的可扩展性 当项目进入生产环境时,可扩展性成为 ML 团队的优先事项。通过 KitOps 的模块化设计,ML 团队可以轻松扩展项目工作流,而 MLflow 的注册表和部署工具可以大规模处理模型生命周期管理。这个组合非常适合那些希望将 AI 项目运营化的组织。
生产环境的可扩展性 当项目进入生产环境时,可扩展性成为 ML 团队的优先事项。通过 KitOps 的模块化设计,ML 团队可以轻松扩展项目工作流,而 MLflow 的注册表和部署工具可以大规模处理模型生命周期管理。这个组合非常适合那些希望将 AI 项目运营化的组织。
下面的图表概述了使用 KitOps 和 MLflow 启动 AI 项目的步骤。本教程使用从零开始开发的自定义糖尿病 ML 模型。通过 unpack 命令 kit unpack,你可以从 Jozu Hub 拉取示例 ModelKit 并跟随学习。
图表中的每个部分都在以下章节中进行了更详细的说明。
首先,为你的操作系统(OS)安装并设置 KitOps。这取决于操作系统。但核心思路是下载 KitOps 可执行文件并将其添加到操作系统能够检测的路径中。
安装完成后,你可以通过打开新终端并输入命令 kit version 来验证 Kit CLI 是否正确安装。
kit version
------------------------
version: 0.4.0
Commit: 4d208b6cccdefdce2e79d3bea2e54d08d65dee8f
Built: 2024-08-26T15:08:11Z
Go version: go1.21.6
为你的 AI 项目创建一个 ModelKit。这要求你初始化其原生配置文档,称为 Kitfile。要在你的开发目录中为 ModelKit 创建 Kitfile,请使用以下命令:
echo. > Kitfile
打开 Kitfile 并指定所有与 ML 开发相关的文件夹,以便 Kitfile 知道在你打包 ModelKit 镜像时要跟踪什么。这使你能够保持本地开发环境中的结构和工作流。Kitfile 是一个 YAML 文件;这是一个示例。
manifestVersion: v2.0.0
package:
author:
- Chris
description: This project is used to predict if a patient is diabetic or not
name: Diabetes
code:
- description: Jupyter notebook with model training code in Python
path: ./code
datasets:
- description: Pima Indians Diabetes dataset (tabular)
name: data
path: ./datasets
model:
framework: Tensorflow
name: Diabetes_model
path: ./models
version: 0.0.1
description: Diabetes prediction model using Scikit-learn
你可以从零开始构建模型,也可以从 Jozu Hub 的容器注册表获取任何 ModelKit。本指南使用从零开始开发的基础模型。不过,通过 unpack 命令 kit unpack,你可以从 Jozu Hub 拉取示例 ModelKit。
接下来,设置你的 MLflow tracking_uri 和一个实验名称来记录你的模型参数,如下所示。
## MLflow tracking
mlflow.set_tracking_uri(uri="http://127.0.0.1:5000")
## Creat a MLflow experiment
mlflow.set_experiment("KitOps_MLflow_Quickstart")
## Start an MLflow run
with mlflow.start_run():
## log the hyperparameters
mlflow.log_params(params)
## Log the accuracy metrics
mlflow.log_metric("accuracy", test_data_accuracy)
## Set a tag we can use to remind ourselves what this run is for
mlflow.set_tag("Training info","Basic LR model for diabetes data" )
## Infer the model signature
signature = infer_signature(X_train, lr.predict(X_train))
##log the model
model_info = mlflow.sklearn.log_model(
sk_model= lr,
artifact_path= "diabetes_model",
signature = signature,
input_example= X_train,
registered_model_name="tracking-KitOps_MLflow_Quickstart",
)
使用 ModelKit 标签名称在开发目录中打包 Kitfile 以创建 ModelKit 镜像到本地 KitOps 注册表。版本和标签工作流通过将所有内容保存在一个位置来确保代码、数据和模型之间的一致性。命令格式如下:
kit pack . -t jozu.ml/chukoz71/quick- start:Diabetes
在上面的命令中,一个标记为 Diabetes(代表你的标签名称)的 ModelKit 使用 pack 命令 kit pack 打包到一个名为 chukoz71 的 JozuHub 注册表用户
kit pack . -t jozu.ml/chukoz71/quick- start:Diabetes
-----------
Saved configuration: sha256:cbda96a6aa80efebb93fbb008af80f225f76ae44d88891b77423c8e1f4a031d9
Saved model layer: sha256:00b46593828668f174341ac834d748b7f6cc118b300708331cc25cbe9ea66ad0
Saved code layer: sha256:756da1aacd63cd0469e5daed4d82daf402b30b1ea2b6916f7a90575f13dc086c
Saved dataset layer: sha256:f307c84c53603257125f28fe808c42bab5e5c02bf1df6962d8df41418a70d743
Saved manifest to storage: sha256:017c18b0e03e9d2c95586114c7b8e780f97bfb420d03df99310ee1387a7e08f1
Model saved: sha256:017c18b0e03e9d2c95586114c7b8e780f97bfb420d03df99310ee1387a7e08f1
ModelKit 会自动跟踪和存储你在 Kitfile 中指定的目录的更新。在开发的每个阶段,你只需要重新打包 ModelKit 来跟踪更新。从开发阶段开始打包 ModelKit 可以最小化错误、确保一致的做法,甚至在需要时支持轻松回滚。
本地打包后,你可以将 ModelKit 的镜像从本地仓库推送到配置的远程容器注册表。但首先,你必须使用配置的远程注册表的名称标记 ModelKit,以在远程注册表中为镜像创建清晰的参考和目标。然后,将其推送到远程容器注册表,命令格式如下:
kit push . -t "REMOTE_ADDRESS"/"REGISTRY_USER"/"REPOSITORY_USERNAME":"TAG"
在此示例中,上面的命令用于推送标记为 Diabetes(代表你的标签名称)的 ModelKit 到:
Jozu Hub → 你的注册表地址
chukoz71 → 你的注册表用户或组织名称
quick-start → 你的仓库名称
因此,命令将如下所示:kit push -t jozu.ml/chukoz71/quick-start:Diabetes
kit push jozu.ml/chukoz71/quick-start:Diabetes
--------------
Pushed sha256:017c18b0e03e9d2c95586114c7b8e780f97bfb420d03df99310ee1387a7e08f1
之后,登录到你在 Jozu Hub 中的仓库以确认 ModelKit Digest 已成功推送,如下所示。该镜像显示推送日期、ModelKit Digest、标签名称、大小和其他成功推送的证据。
现在,开发人员可以重现你的 ML 工作流或提取只相关的资产进行进一步开发、测试、集成或部署。
将 KitOps 与 MLflow 集成为管理 ML 工作流的复杂性提供了一个全面的解决方案。KitOps 为 ML 流程的设计提供了模块化框架,而 MLflow 提供了一个统一的平台用于实验跟踪、模型版本控制和部署,这保证了可重现性、可追踪性和运营效率。
通过遵循这些步骤,你已经学会了如何使用 KitOps 和 MLflow 在几分钟内启动 AI 项目。你已经探索了使用自定义基础模型、使用 MLflow 记录实验、将模型打包为 ModelKit 并将其推送到远程仓库。要了解更多关于如何部署 ModelKit 的信息,请按照 KitOps 的后续步骤进行操作,并优化你的 AI 模型以适应生产环境。