MLOps 是机器学习的重要组成部分,它有助于自动化机器学习模型的训练和部署。这种自动化可以加快模型开发与部署的进程,并帮助确保模型被正确部署。MLOps 还可以用于监控机器学习模型的性能,并主动识别需要在生产环境中解决的问题。
截至 2022 年,MLOps 的生态包含多种工具和服务,帮助组织自动化构建、训练和部署机器学习模型。这些工具和服务被设计为协同工作,使 MLOps 过程更高效、更易于管理。MLflow 就是我们将在本文中探讨的一款重要工具。
MLflow 是一个面向端到端机器学习生命周期的开源平台。它让数据科学家能够跟踪实验、复现实验运行,并将模型以端点形式对外提供。在本文中,我们将深入介绍 MLflow 是什么,以及如何利用这一优秀的开源平台来跟踪和部署您的机器学习实验。
如果您想更深入了解 MLOps,请查看我们的机器学习、流水线、部署与 MLOps 教程 。
什么是 MLflow
MLflow 是一个用于管理端到端机器学习生命周期的开源平台。它提供一个中心化的位置,用于跟踪实验、共享代码与模型,并将模型部署到生产。MLflow 还包含多个针对主流 ML 工具包的内置算法与软件包。它的四个主要功能包括:
MLflow Tracking 。跟踪机器学习实验,以记录、分析和比较结果与参数。
MLflow Projects 。将机器学习代码打包成可复用的形式,便于复现并与其他数据科学家共享,或迁移到生产环境。
MLflow Models 。管理并部署来自不同机器学习库的模型到多种模型服务与推理平台,如 Amazon Sagemaker。
MLflow Model Registry 。提供一个集中式模型仓库,以协作管理 MLflow 模型的全生命周期,包括模型版本、阶段转换与注释。
图片来源: https://www.databricks.com/wp-content/uploads/2021/02/mlflow-components2.png
MLflow 不绑定于任何单一库。由于所有功能都可以通过 REST API 和命令行界面访问,您可以在任意编程语言中搭配任何机器学习库使用它。项目中内置了 Python API、R API 和 Java API,方便您调用。
MLflow 的关键概念
MLflow Tracking
当您运行机器学习代码时,MLflow Tracking 组件提供 API 和图形用户界面(UI),用于记录参数、代码版本、指标和输出文件。之后,您可以可视化这些日志结果。借助 MLflow Tracking,您还可以通过 Python、REST、R API 和 Java API 来记录与查询实验。
MLflow Tracking 围绕运行(run)的概念组织。每个运行都会记录关键信息和元数据,如开始与结束时间、源文件、参数、制品、指标、标签等。
无论代码在哪里执行,您都可以通过 MLflow 的 Python、R 或 Java API 来记录运行。例如,您可以在独立程序、远程云主机或交互式笔记本中进行记录。
同样地,您可以将单个运行组织成实验(experiment),即为特定目的而分组的运行集合。可以通过命令行界面(CLI)、mlflow.create_experiment() 方法或 REST API 来创建实验。用户也可以在 MLflow UI 中创建实验。
如有需要,您可以将 MLflow 运行的记录保存到本地文件、上传到兼容 SQLAlchemy 的数据库,或远程上传到跟踪服务器。MLflow Python API 默认将运行日志保存在程序运行位置的 mlruns 目录下的本地文件中。之后,您可以启动 mlflow ui 应用来查看记录的运行。
图片来源: https://mlflow.org/docs/latest/_images/scenario_1.png
MLflow Projects
MLflow Projects 提供一种可复用、可复现的方式来组织您的机器学习代码。您可以在任何机器学习库和开发环境中使用项目。每个项目由一个目录构成,其中包含描述项目环境与参数的 MLproject 文件,以及一组包含机器学习代码的文件。
MLflow 目前支持以下类型的项目环境:
Conda 环境,
Virtualenv 环境,
Docker 容器,
系统环境。
通过添加一个 MLProject 文件(本质上是一个 YAML 文件),您可以更细粒度地控制 MLflow 项目。下面是一个 MLProject 文件示例:
来源: https://mlflow.org/docs/latest/projects.html#overview
当项目不包含 MLproject 文件时,MLflow 会采用一些默认约定,例如:
项目名称为目录名。
使用 Conda 环境,并在同一目录中的 conda.yaml 文件中指定。
任何 .py 或 .sh 文件都可以作为入口点。
默认情况下,入口点不包含任何参数。
图片来源
MLflow Models
MLflow Model 是一种标准化格式,用于打包机器学习模型,以便在流水线下游的各种工具中使用。这可能包括通过 REST API 进行实时服务,或进行批量推理。MLflow Model 是 MLflow 的关键组件之一。它规定了一种协议,使模型能够以若干不同的“风味(flavor)”进行保存,每种风味都可被一组特定的下游工具理解。
每个 MLflow Model 实际上是一个目录,目录底部包含一个 MLmodel 文件,并可定义模型可被查看的多个风味,同时还存放任意文件。这些文件统称为 MLflow Model。
MLflow Models 的强大之处在于风味的使用,它为部署工具理解模型提供了标准。这样,开发者无需将每个工具与每个库逐一集成,就能构建可与任意 ML 库模型交互的工具。MLflow 所有内置部署工具支持的一种“标准”风味是“Python Function”,它规定了如何将模型作为 Python 函数运行。
使用 Scikit-learn 风味的 MLflow Models 目录示例:
图片来源: https://mlflow.org/docs/latest/models.html
MLflow 原生支持以下库(作为模型风味):
Scikit-learn
TensorFlow
PyTorch
Keras
Spark MLlib
XGBoost
LightGBM
CatBoost
Spacy
Fastai
Statsmodels
Prophet
Python function(通用)
R function(通用)
在此查看完整列表
MLflow Model Registry
MLflow Model Registry 是一个用于存储和版本化机器学习模型的中央仓库。它提供跟踪模型谱系、比较模型与部署模型的方式。
MLflow Model Registry 组件由一组 API 和用户界面构成,用于协作管理 MLflow 模型的整个生命周期。
如果您希望使用 Model Registry,并通过用户界面(UI)或应用程序编程接口(API)访问模型注册表,则需要使用由数据库支持的后端存储。
使用 MLflow UI 注册模型:
图片来源: https://mlflow.org/docs/latest/model-registry.html#concepts
MLflow Pipelines(实验性)
MLflow Pipelines 是一项新功能,目前仍处于实验阶段。
MLflow Pipelines 是一个带有明确约定的框架,用于构建 MLOps 工作流,从而简化并标准化机器学习应用的开发与投产。借助 MLflow Pipelines,数据科学家可以更轻松地遵循行业标准来构建面向生产的机器学习交付物,从而将更多时间投入到高质量模型的构建中。
MLflow Pipelines 还使机器学习工程师和 DevOps 团队能够将这些模型无缝嵌入应用并发布到生产环境。
MLflow Pipelines 为常见的机器学习问题类型(如回归与分类)以及 MLOps 操作(如批量评分)提供具备生产质量的流水线模板。流水线以 git 仓库的形式组织,使用基于 YAML 的配置文件与 Python 代码。这为开发者提供了一种声明式的 ML 应用构建方式,减少样板代码。
MLflow Pipelines 还为流水线步骤实现了感知缓存的执行器。这样可以确保仅在相应代码或配置发生变化时才执行步骤。因此,数据科学家、机器学习工程师和 DevOps 团队都能够在各自专长领域快速迭代。此外,执行流水线并检查其输出既可通过 API 实现,也可通过 MLflow 提供的命令行界面(CLI)实现。
借助现代工具,在生产环境中部署机器学习模型看似简单,但往往事与愿违:模型在生产中的表现不如开发阶段。
如果您想学习如何在 Python 中设计经得起时间考验的机器学习工作流,请查看我们的用 Python 设计机器学习工作流 课程。
MLflow 与 Kubeflow
既然您已经了解了 MLflow,我们来回答该领域一个常见问题:MLflow 与 Kubeflow 有何不同?
首先,什么是 Kubeflow?
Kubeflow 是一个开源项目,包含精选的工具与框架。Kubeflow 的主要目标是让可移植、可扩展的机器学习工作流的开发、部署和管理变得容易。
Kubeflow 构建在 Kubernetes 之上——Kubernetes 是一个用于运行和编排容器的开源平台。Kubernetes 旨在在不同环境中一致运行,这是 Kubeflow 运作方式的关键。
想要进一步了解 Kubeflow,请阅读我们的Kubeflow 详解教程 。
比较 MLflow 与 Kubeflow,这两个项目唯一的相似之处是它们都是开源的,但服务的需求完全不同。Kubeflow 是一个开源的容器编排系统,用于在 Kubernetes 上开发、部署和管理机器学习应用。另一方面,MLflow 是一个用于实验跟踪与模型版本化/部署的 Python 库,与具体的编排环境无关。
MLflow 教程
使用 MLflow 非常简单。只需几行代码即可将 MLflow 日志功能集成到您现有的代码中。但首先,您需要使用 pip 安装 MLflow。
pip install mlflow
技术支持
让我们编写一个简单的 Python 脚本,训练一个逻辑回归模型,并使用 MLflow 记录指标和模型。以下是 MLflow 的官方示例,来源见此 。
import numpy as np
from sklearn. linear_model import LogisticRegression
import mlflow
import mlflow. sklearn
if __name__ == "__main__" :
X = np. array( [ - 2 , - 1 , 0 , 1 , 2 , 1 ] ) . reshape( - 1 , 1 )
y = np. array( [ 0 , 0 , 1 , 1 , 1 , 0 ] )
lr = LogisticRegression( )
lr. fit( X, y)
score = lr. score( X, y)
print ( "Score: %s" % score)
mlflow. log_metric( "score" , score)
mlflow. sklearn. log_model( lr, "model" )
print ( "Model saved in run %s" % mlflow. active_run( ) . info. run_uuid)
技术支持
输出:
>>> Score: 0.6666666666666666
>>> Model saved in run 9def2bd1c55b4f0985aa5c050b8f71cd
您可以在与该 Python 文件相同的目录下,在命令行中输入 `mlflow ui` 启动 MLflow UI。
mlflow ui
技术支持
然后访问 https://localhost:5000 ,您将看到如下页面:
可以看到这里只有一条记录,即我们在上面脚本中训练并记录的模型。点击名称,您将看到详细页面:
立刻提升您的能力!
今天就报名 Python 机器学习科学家
掌握获得机器学习科学家职位所需的关键技能。您将在强化 Python 编程技能的同时,配备监督学习、无监督学习与深度学习的工具箱。您将学习:
如何进行特征处理,
如何训练机器学习模型,
超参数调优
自然语言处理(NLP)
图像处理
常用库 Spark 与 Keras
结语
MLflow 是一个开源平台,也是管理端到端机器学习生命周期的优秀工具。它由 Databricks(知名的 Apache Spark 平台背后的公司)创建,旨在与任何机器学习库、算法或语言配合使用。
MLflow 为机器学习开发者和数据科学家带来了诸多益处。它提供一个中心化的平台来跟踪实验并管理机器学习项目。这对协作非常有价值,因为它允许不同团队成员了解他人的工作并比较结果。
MLflow 可以自动化机器学习工作流,从数据预处理到模型训练再到部署。这能节省时间与精力,并让结果更易复现。
总的来说,MLflow 是管理机器学习项目的有力工具。它可以帮助您跟踪实验、自动化工作流并优化模型。如果您正在从事机器学习项目,绝对值得一试 MLflow。
如果您想提升技能并理解机器学习的基础及其在商业世界中的应用,请在 DataCamp 查看我们的面向商业的机器学习 课程。
MLOps 是机器学习的重要组成部分,它有助于自动化机器学习模型的训练和部署。这种自动化可以加快模型开发与部署的进程,并帮助确保模型被正确部署。MLOps 还可以用于监控机器学习模型的性能,并主动识别需要在生产环境中解决的问题。
截至 2022 年,MLOps 的生态包含多种工具和服务,帮助组织自动化构建、训练和部署机器学习模型。这些工具和服务被设计为协同工作,使 MLOps 过程更高效、更易于管理。MLflow 就是我们将在本文中探讨的一款重要工具。
MLflow 是一个面向端到端机器学习生命周期的开源平台。它让数据科学家能够跟踪实验、复现实验运行,并将模型以端点形式对外提供。在本文中,我们将深入介绍 MLflow 是什么,以及如何利用这一优秀的开源平台来跟踪和部署您的机器学习实验。
如果您想更深入了解 MLOps,请查看我们的机器学习、流水线、部署与 MLOps 教程。
什么是 MLflow
MLflow 是一个用于管理端到端机器学习生命周期的开源平台。它提供一个中心化的位置,用于跟踪实验、共享代码与模型,并将模型部署到生产。MLflow 还包含多个针对主流 ML 工具包的内置算法与软件包。它的四个主要功能包括:
图片来源: https://www.databricks.com/wp-content/uploads/2021/02/mlflow-components2.png
MLflow 不绑定于任何单一库。由于所有功能都可以通过 REST API 和命令行界面访问,您可以在任意编程语言中搭配任何机器学习库使用它。项目中内置了 Python API、R API 和 Java API,方便您调用。
MLflow 的关键概念
MLflow Tracking
当您运行机器学习代码时,MLflow Tracking 组件提供 API 和图形用户界面(UI),用于记录参数、代码版本、指标和输出文件。之后,您可以可视化这些日志结果。借助 MLflow Tracking,您还可以通过 Python、REST、R API 和 Java API 来记录与查询实验。
MLflow Tracking 围绕运行(run)的概念组织。每个运行都会记录关键信息和元数据,如开始与结束时间、源文件、参数、制品、指标、标签等。
无论代码在哪里执行,您都可以通过 MLflow 的 Python、R 或 Java API 来记录运行。例如,您可以在独立程序、远程云主机或交互式笔记本中进行记录。
同样地,您可以将单个运行组织成实验(experiment),即为特定目的而分组的运行集合。可以通过命令行界面(CLI)、mlflow.create_experiment() 方法或 REST API 来创建实验。用户也可以在 MLflow UI 中创建实验。
如有需要,您可以将 MLflow 运行的记录保存到本地文件、上传到兼容 SQLAlchemy 的数据库,或远程上传到跟踪服务器。MLflow Python API 默认将运行日志保存在程序运行位置的 mlruns 目录下的本地文件中。之后,您可以启动 mlflow ui 应用来查看记录的运行。
图片来源: https://mlflow.org/docs/latest/_images/scenario_1.png
MLflow Projects
MLflow Projects 提供一种可复用、可复现的方式来组织您的机器学习代码。您可以在任何机器学习库和开发环境中使用项目。每个项目由一个目录构成,其中包含描述项目环境与参数的 MLproject 文件,以及一组包含机器学习代码的文件。
MLflow 目前支持以下类型的项目环境:
通过添加一个 MLProject 文件(本质上是一个 YAML 文件),您可以更细粒度地控制 MLflow 项目。下面是一个 MLProject 文件示例:
来源: https://mlflow.org/docs/latest/projects.html#overview
当项目不包含 MLproject 文件时,MLflow 会采用一些默认约定,例如:
图片来源
MLflow Models
MLflow Model 是一种标准化格式,用于打包机器学习模型,以便在流水线下游的各种工具中使用。这可能包括通过 REST API 进行实时服务,或进行批量推理。MLflow Model 是 MLflow 的关键组件之一。它规定了一种协议,使模型能够以若干不同的“风味(flavor)”进行保存,每种风味都可被一组特定的下游工具理解。
每个 MLflow Model 实际上是一个目录,目录底部包含一个 MLmodel 文件,并可定义模型可被查看的多个风味,同时还存放任意文件。这些文件统称为 MLflow Model。
MLflow Models 的强大之处在于风味的使用,它为部署工具理解模型提供了标准。这样,开发者无需将每个工具与每个库逐一集成,就能构建可与任意 ML 库模型交互的工具。MLflow 所有内置部署工具支持的一种“标准”风味是“Python Function”,它规定了如何将模型作为 Python 函数运行。
使用 Scikit-learn 风味的 MLflow Models 目录示例:
图片来源: https://mlflow.org/docs/latest/models.html
MLflow 原生支持以下库(作为模型风味):
MLflow Model Registry
MLflow Model Registry 是一个用于存储和版本化机器学习模型的中央仓库。它提供跟踪模型谱系、比较模型与部署模型的方式。
MLflow Model Registry 组件由一组 API 和用户界面构成,用于协作管理 MLflow 模型的整个生命周期。
如果您希望使用 Model Registry,并通过用户界面(UI)或应用程序编程接口(API)访问模型注册表,则需要使用由数据库支持的后端存储。
使用 MLflow UI 注册模型:
图片来源: https://mlflow.org/docs/latest/model-registry.html#concepts
MLflow Pipelines(实验性)
MLflow Pipelines 是一项新功能,目前仍处于实验阶段。
MLflow Pipelines 是一个带有明确约定的框架,用于构建 MLOps 工作流,从而简化并标准化机器学习应用的开发与投产。借助 MLflow Pipelines,数据科学家可以更轻松地遵循行业标准来构建面向生产的机器学习交付物,从而将更多时间投入到高质量模型的构建中。
MLflow Pipelines 还使机器学习工程师和 DevOps 团队能够将这些模型无缝嵌入应用并发布到生产环境。
MLflow Pipelines 为常见的机器学习问题类型(如回归与分类)以及 MLOps 操作(如批量评分)提供具备生产质量的流水线模板。流水线以 git 仓库的形式组织,使用基于 YAML 的配置文件与 Python 代码。这为开发者提供了一种声明式的 ML 应用构建方式,减少样板代码。
MLflow Pipelines 还为流水线步骤实现了感知缓存的执行器。这样可以确保仅在相应代码或配置发生变化时才执行步骤。因此,数据科学家、机器学习工程师和 DevOps 团队都能够在各自专长领域快速迭代。此外,执行流水线并检查其输出既可通过 API 实现,也可通过 MLflow 提供的命令行界面(CLI)实现。
借助现代工具,在生产环境中部署机器学习模型看似简单,但往往事与愿违:模型在生产中的表现不如开发阶段。
如果您想学习如何在 Python 中设计经得起时间考验的机器学习工作流,请查看我们的用 Python 设计机器学习工作流课程。
MLflow 与 Kubeflow
既然您已经了解了 MLflow,我们来回答该领域一个常见问题:MLflow 与 Kubeflow 有何不同?
首先,什么是 Kubeflow?
Kubeflow 是一个开源项目,包含精选的工具与框架。Kubeflow 的主要目标是让可移植、可扩展的机器学习工作流的开发、部署和管理变得容易。
Kubeflow 构建在 Kubernetes 之上——Kubernetes 是一个用于运行和编排容器的开源平台。Kubernetes 旨在在不同环境中一致运行,这是 Kubeflow 运作方式的关键。
想要进一步了解 Kubeflow,请阅读我们的Kubeflow 详解教程。
比较 MLflow 与 Kubeflow,这两个项目唯一的相似之处是它们都是开源的,但服务的需求完全不同。Kubeflow 是一个开源的容器编排系统,用于在 Kubernetes 上开发、部署和管理机器学习应用。另一方面,MLflow 是一个用于实验跟踪与模型版本化/部署的 Python 库,与具体的编排环境无关。
MLflow 教程
使用 MLflow 非常简单。只需几行代码即可将 MLflow 日志功能集成到您现有的代码中。但首先,您需要使用 pip 安装 MLflow。
让我们编写一个简单的 Python 脚本,训练一个逻辑回归模型,并使用 MLflow 记录指标和模型。以下是 MLflow 的官方示例,来源见此。
输出:
>>> Score: 0.6666666666666666
>>> Model saved in run 9def2bd1c55b4f0985aa5c050b8f71cd
您可以在与该 Python 文件相同的目录下,在命令行中输入 `mlflow ui` 启动 MLflow UI。
然后访问 https://localhost:5000,您将看到如下页面:
可以看到这里只有一条记录,即我们在上面脚本中训练并记录的模型。点击名称,您将看到详细页面:
立刻提升您的能力!
今天就报名 Python 机器学习科学家
掌握获得机器学习科学家职位所需的关键技能。您将在强化 Python 编程技能的同时,配备监督学习、无监督学习与深度学习的工具箱。您将学习:
结语
MLflow 是一个开源平台,也是管理端到端机器学习生命周期的优秀工具。它由 Databricks(知名的 Apache Spark 平台背后的公司)创建,旨在与任何机器学习库、算法或语言配合使用。
MLflow 为机器学习开发者和数据科学家带来了诸多益处。它提供一个中心化的平台来跟踪实验并管理机器学习项目。这对协作非常有价值,因为它允许不同团队成员了解他人的工作并比较结果。
MLflow 可以自动化机器学习工作流,从数据预处理到模型训练再到部署。这能节省时间与精力,并让结果更易复现。
总的来说,MLflow 是管理机器学习项目的有力工具。它可以帮助您跟踪实验、自动化工作流并优化模型。如果您正在从事机器学习项目,绝对值得一试 MLflow。
如果您想提升技能并理解机器学习的基础及其在商业世界中的应用,请在 DataCamp 查看我们的面向商业的机器学习课程。