照片由 Alejandro Lopez 拍摄, 来自 Unsplash
第一部分:MLOps(模型运维)介绍及搭建流水线- 简介
- 1. 问题定义:自行车预测数据集
- 2. 搭建MLOps管道
- 3. MLFlow基础知识:概述
在快节奏的机器学习世界中,开发模型只是拼图的一块。确保模型被正确部署、监控并不断优化,正是 MLOps(机器学习运维)发挥作用的领域。MLOps 是现代 ML 工作流程的支柱,它实现无缝自动化、模型版本控制和生命周期管理——这些都是在实际应用中扩展机器学习的至关重要因素。它帮助组织从孤立的实验过渡到高效的生产系统。
构建和管理机器学习运维(MLOps)管道的关键工具之一是MLFlow。MLFlow是一个开源平台,旨在管理整个机器学习生命周期,提供以流畅的方式跟踪实验、分发模型并简化部署流程。它主要包括四个部分。
- MLFlow 跟踪功能 用于记录和比较实验,
- MLFlow 项目 用于打包便于重复使用的代码,
- MLFlow 模型 用于管理多种部署格式的模型,
- MLFlow 模型注册中心 用于对生产模型进行版本控制及生命周期管理。
在这篇文章中,我们将采用一种实用的方法来使用MLFlow构建从头到尾的机器学习流水线,并将其应用于自行车使用预测的数据集。无论你是新手还是专业人士,本指南将带你完成从数据处理、模型训练到部署和持续监控及改进的所有重要步骤。通过本教程,你将了解如何使你的机器学习流程更简洁,并确保你的模型可以顺利投入生产。
1. 问题描述:自行车骑行预测数据集在深入了解构建MLOps管道的技术细节之前,让我们先了解一下我们要解决的问题是什么以及我们将要使用的数据集是什么。
在许多城市地区,共享单车已经成为一种越来越受欢迎的交通方式。这些系统允许用户短时间租用自行车,提供了一种比汽车更方便和环保的选项。然而,共享单车服务面临的一个关键挑战是,如何有效地管理各站点的自行车数量,以满足波动的需求。如果某个站点自行车太少,用户可能会感到失望;而自行车太多则会导致堆积,浪费资源。
为了应对这一挑战,可以使用预测模型利用历史数据来预测自行车需求量。这有助于运营商优化城市中自行车的分布,确保自行车能在需求最大的地方随时可用,并确保在需求最大的地方有足够的自行车。
在这篇文章里,我们将使用 Bike Sharing Demand Dataset,该数据集包含了真实的自行车共享系统的历史租赁数据等信息。数据集包含了如下特征:
- 日期和时间:租赁发生的具体日期和时间。
- 天气状况:天气情况,如温度、湿度、风速等。
- 季节性因素:季节性因素,包括年份、月份以及当天是否是假期或周末。
- 租赁数量:我们要预测的目标变量,即在任何给定时间租赁的自行车数量。
目标是建立一个能够根据这些特征准确预测未来自行车租赁量的回归模型。这是一类经典的监督学习任务,我们的模型将从历史数据中学习,以便预测未来的需求。
虽然机器学习问题本身可能看起来很简单,但实际操作起来并不容易,将模型部署到生产环境并确保其长时间内表现良好则需要一个强大的MLOps框架。这就是MLFlow大显身手的地方。在本教程中,我们不仅会训练模型,还将展示如何利用MLFlow来追踪、部署和监控模型,确保它在实际环境中仍然有用。
本节结束时,你将理解业务问题和技术挑战背后的原因,为构建可扩展且能投入生产的解决方案打下基础。
2. 设置MLOps流水线为了使用MLFlow构建一个高效的MLOps流水线,让我们从设置环境开始。这包括安装Python,创建一个虚拟环境,并安装所需的库,比如MLFlow,pandas和scikit-learn。让我们一步一步地完成这些步骤,确保您的环境已经准备好。
第一步:安装 Python 环境首先,你需要在你的机器上安装Python(建议使用最新版本)。大多数现代机器学习库都是用Python编写或依赖于Python,并且MLFlow可以很好地与Python配合使用。
- 检查是否已经安装了 Python:
打开终端(或命令行)并键入以下命令:
python --version
运行 python --version
来查看Python版本。
这会显示你机器上安装的 Python 版本。如果你还没装 Python,可以从 Python 的官网 下载并安装最新稳定版本(最好是 3.8 或更高版本)。
- 检查 Python 是否已安装:
安装完 Python 后,运行以下命令来检查 Python 是否正常工作:
运行Python版本命令
python --version
如果安装成功了,你就能看到 Python 的版本号了。
Python 版本的结果
第 2 步:设置虚拟环境.虚拟环境帮助你管理特定项目的依赖,避免与其他项目产生冲突。为每个项目分别创建一个虚拟环境是一个好习惯,这样可以保持清晰和独立。
- Install
virtualenv
:
如果你还没有安装过virtualenv
,可以通过运行以下命令来安装它:
pip install virtualenv
- 创建虚拟环境:
进入你的项目目录,运行:
虚拟环境 mlops-env
(注:这是一个命令行指令 virtualenv mlops-env
)
这将创建一个名为mlops-env
的虚拟环境。你可以用任何名字来替换mlops-env
。
- 启动虚拟环境: 比如你可以使用命令行来做这件事。
在 Windows 上:
.\mlops-env\Scripts\activate
运行该命令以激活虚拟环境 .\mlops-env\Scripts\activate
。
如果你用的是 macOS 或 Linux:
运行 source mlops-env/bin/activate
一旦激活,你的终端会在括号里显示虚拟环境的名字,表明你正在该环境里工作。
激活虚拟环境并查看结果
步骤三:安装 MLFlow 及其他相关依赖在设置好虚拟环境之后,下一步是安装MLFlow以及其它必需的库,例如pandas和scikit-learn。
- 安装MLFlow:
可以通过pip轻松安装MLFlow。请在激活的虚拟环境里运行以下命令:
pip install mlflow # 安装mlflow库
- 安装pandas和scikit-learn:
在此教程中,我们将使用pandas进行数据操作,以及使用scikit-learn来构建并评估我们的机器学习模型。可以使用以下命令安装。
在终端输入以下命令来安装pandas和scikit-learn:
pip install pandas scikit-learn
这样就可以安装这两个库了。
- 验证安装情况:
为了确认所有包都正确安装,您可以检查已安装包的版本情况:
运行命令 python -c "import mlflow; print(mlflow.__version__)"
来查看 mlflow 的版本号。
运行命令 python -c "import pandas as pd; print(pd.__version__)"
来查看 pandas 的版本号。
运行命令 python -c "import sklearn; print(sklearn.__version__)"
来查看 sklearn 的版本号。
安装检查
步骤 4:安装并设置 Jupyter Notebook(可选步骤)如果你更喜欢用 Jupyter 笔记本来做实验,也可以安装 Jupyter。你可以通过以下方式来安装它:
pip install notebook
运行这个命令来安装名为notebook的Python包。
然后,你可以开始Jupyter Notebook,如下命令运行:
Jupyter 笔记本
第5步:组织您的项目:
既然环境已经设置好了,整理项目文件夹是个不错的做法。这里推荐的结构如下:
自行车预测MLOps 项目/
│
├── 数据集/ # 存储数据集的文件夹
├── Jupyter 笔记本/ # Jupyter笔记本(如有)
├── 模型/ # 存储保存的模型
├── 脚本文件/ # 用于训练和测试的Python脚本
├── mlruns/ # MLFlow的跟踪日志
└── README.md 文件 # 项目文档
3. MLFlow 基本概念:概览
现在我们的环境已经设置好了,是时候深入了解MLFlow,这是我们用于管理MLOps管道中机器学习生命周期的核心工具。MLFlow是一个开源平台,旨在简化从开发到部署再到管理整个机器学习模型的过程。它包含四个关键组件,每个组件都专注于模型生命周期的一个关键方面。我们来一一探讨每个组件,看看它们是如何协同工作,共同构建强大的MLOps管道的。
MLFlow 组件MLFlow 主要由四个核心组件组成:
- MLFlow 跟踪功能:用于记录和查询实验,包括代码、数据、模型和指标。
- MLFlow 项目:用于将代码打包成可重复使用和复现的格式。
- MLFlow 模型:用于标准化模型的打包和部署过程。
- MLFlow 模型注册功能:用于管理模型的生命周期和版本。
我们一个一个地来看看这些组件。
MLFlow 跟踪:日志参数、指标和模型文件MLFlow 跟踪功能 可能是 MLFlow 中最常用的功能。它允许你通过捕获每个运行的关键信息,例如,来记录和比较你的机器学习实验结果。
- 参数:模型超参数(例如,学习率,随机森林中的树的数目)。
- 指标:性能指标(例如,准确率等,RMSE,精确度)。
- 产物:输出文件,如模型,可视化和序列化的对象。
每个实验运行都会被追踪到一个集中的位置,你可以比较不同模型和超参数的表现。这种功能在专业环境中尤其重要,因为它可以确保实验的可重复性和良好的记录。
示例:在训练自行车预测模型的过程中,我们可以记录模型的参数(例如,决策树的最大深度),以及诸如 RMSE(均方根误差)和 MAE(平均绝对误差)这样的指标。此外,我们还可以记录 图表,如特征重要性图表或混淆矩阵,这使得模型性能的可视化更加直观。
import mlflow
with mlflow.start_run():
# 记录深度最大值参数
mlflow.log_param("max_depth", 10)
# 记录评估指标
mlflow.log_metric("rmse", 0.35)
# 上传文件
mlflow.log_artifact("feature_importance_plot.png")
MLFlow 项目:让代码可重复使用的打包方法
MLFlow 项目功能允许你将代码打包成易于重复使用的标准格式。它支持定义 环境 和 依赖项,确保你的项目可以在不同的平台上一致执行。每个项目通过一个 MLproject 文件来定义,该文件包含以下内容:
- 入口点(例如,主脚本或要运行的函数)。
- 环境要求,例如所需的Python包或Docker镜像文件。
这对于协作和再现性非常重要。比如,在分享自行车预测模型时,可以利用相同的环境配置在不同的数据集或机器上重新训练模型,而不需要任何额外的手动配置。
name: 自行车预测模型
conda_env: conda.yaml
entry_points:
主入口:
command: "python train.py"
MLFlow 模型管理:部署和管理模型
MLFlow Models 模块提供了一种标准格式来打包机器学习模型,以便它们能够在各种平台上部署。MLFlow 支持不同模型的风味,包括 scikit-learn 、 TensorFlow 以及 PyTorch。一旦模型被保存为 MLFlow 模型格式,就可以通过不同的部署选项轻松提供服务,例如 REST API 或云端服务。
您可以使用MLFlow模型来:
- 保存模型为标准化格式。
- 使用MLFlow自带的服务工具将模型部署成API。
- 使用外部平台(如AWS SageMaker、Azure ML或Docker)来运行模型。
在这个流程中,一旦我们训练了预测模型,我们将使用MLFlow Models打包并部署,从而使从实验到生产的过渡更加轻松。
import mlflow.sklearn
# 存储模型
mlflow.sklearn.log_model(model, "model")
MLFlow 注册:模型版本控制及其生命周期管理
机器学习面临的最大挑战之一是管理模型生命周期管理,尤其是在创建新版本和模型在测试与生产环境之间移动时。MLFlow 模型注册中心提供了一个集中式的仓库,可以在其中注册、版本化并通过不同阶段的推广来管理模型。
- 测试或验证阶段:当模型正在接受测试或验证时,它处于测试或验证阶段。
- 生产阶段:当模型准备用于生产环境时,它处于生产阶段。
- 归档:不再使用的模型可以归档。
注册表功能还允许轻松回退到之前的版本,如果新部署的模型表现不如预期。
例如,一旦我们找到最佳的自行车预测模型,我们将它注册到MLFlow模型仓库中,并将其部署到生产环境中。
结果是通过调用 mlflow.register_model
函数,将路径为 'runs:/<run_id>/model'
的模型注册到了名为 'BikePredictionModel'
的模型版本中。
把MLFlow集成到MLOps管道里带来了许多好处:
- 简化实验追踪:MLFlow 让跟踪、记录和比较实验变得简单,这对于随着时间的推移提升模型性能至关重要。
- 可复现性:利用 MLFlow Projects,你可以打包和分享代码,确保它能在不同的环境中一致运行。
- 高效模型管理:MLFlow Models 标准化了模型的打包方式,使得在生产环境中部署和提供服务变得简单。
- 生命周期管理其:MLFlow 模型注册表帮助管理机器学习模型的生命周期,确保只有经过验证的最佳模型才能进入生产环境。
通过利用这些功能,MLFlow 可以确保您的机器学习工作流可扩展、可重现和可部署,这正是 MLOps 的精髓。
接下来呢?可以阅读第二部分:使用MLFlow的端到端MLOps流水线来了解如何构建机器学习模型(包括预处理、特征工程、模型训练、评估和超参数调整等)。