概念

MLflow分为三个部分:跟踪项目模型。您可以自己使用这些组件中的每一个 - 例如,您可能希望以MLflow的模型格式导出模型而不使用跟踪或项目 - 但它们也可以很好地协同工作。
MLflow的核心理念是在您的工作流程中尽可能少地设置约束:它可以与任何机器学习库一起使用,按惯例确定代码的大部分内容,并且只需要很少的更改即可集成到现有的代码库中。与此同时,MLflow旨在采用以其格式编写的任何代码库,并使其可由多个数据科学家重现和重用。在这个页面上,我们描述了典型的ML工作流程以及MLflow适合的位置。

机器学习工作流程

机器学习需要尝试各种数据集,数据准备步骤和算法,以构建最大化某些目标指标的模型。构建模型后,还需要将其部署到生产系统,监控其性能,并不断对新数据进行重新训练,并与其他模型进行比较。
因此,通过机器学习提高效率可能具有挑战性,原因如下:

  • 跟踪实验很困难。当您只是处理笔记本电脑上的文件或交互式笔记本时,如何判断哪些数据,代码和参数可以获得特定结果?
  • 重现代码很困难。即使您仔细跟踪代码版本和参数,也需要捕获整个环境(例如,库依赖项)以再次获得相同的结果。如果您希望其他数据科学家使用您的代码,或者您希望在另一个平台(例如,在云中)大规模运行相同的代码,则这尤其具有挑战性。
  • 没有标准的方法来打包和部署模型。每个数据科学团队为其使用的每个ML库提出自己的方法,并且模型与产生它的代码和参数之间的链接经常丢失。

此外,虽然各个ML库提供了一些问题的解决方案(例如,模型服务),但为了获得最佳结果,您通常需要尝试多个ML库。MLflow允许您使用任何库来训练,重用和部署模型,并将它们打包成可重复的步骤,其他数据科学家可以将其用作“黑匣子”,甚至无需知道您正在使用哪个库。

MLflow组件

MLflow提供三个组件来帮助管理ML工作流程:
MLflow Tracking是一个API和UI,用于在运行机器学习代码时记录参数,代码版本,度量和输出文件,以及以后可视化结果。您可以在任何环境(例如,独立脚本或笔记本)中使用MLflow Tracking将结果记录到本地文件或服务器,然后比较多次运行。团队还可以使用它来比较来自不同用户的结果。
MLflow Projects是打包可重用数据科学代码的标准格式。每个项目只是一个包含代码或Git存储库的目录,并使用描述符文件或简单约定来指定其依赖关系以及如何运行代码。例如,项目可以包含conda.yaml用于指定Python Conda环境的文件。在项目中使用MLflow Tracking API时,MLflow会自动记住执行的项目版本(例如,Git commit)和任何参数。您可以从GitHub或您自己的Git存储库轻松运行现有的MLflow项目,并将它们链接到多步骤工作流程。
MLflow模型提供多种包装机器学习模型的约定,以及各种帮助您部署它们的工具。每个模型都保存为包含任意文件的目录和描述文件,该文件列出了可以使用模型的几种“风格”。例如,TensorFlow模型可以作为TensorFlow DAG加载,也可以作为Python函数加载到输入数据。MLflow提供了将许多常见模型类型部署到不同平台的工具:例如,任何支持“Python函数”风格的模型都可以部署到基于Docker的REST服务器,云平台(如Azure ML和AWS SageMaker),以及Apache Spark中的用户定义函数,用于批处理和流式推理。如果您使用Tracking API输出MLflow模型,MLflow还会自动记住哪个项目并运行它们。

可扩展性和大数据

数据是在机器学习中获得良好结果的关键,因此MLflow旨在扩展到大型数据集,大型输出文件(例如,模型)和大量实验。具体来说,MLflow支持三维扩展:

  • 单个MLflow运行可以在分布式集群上执行,例如,使用 Apache Spark。您可以在所选的分布式基础架构上启动运行,并将结果报告给Tracking Server以进行比较。MLflow包含一个内置API,可在Databricks上启动运行。
  • MLflow支持与不同参数并行启动多个运行,例如,用于超参数调整。您只需使用Projects API启动多次运行,使用Tracking API跟踪它们。
  • MLflow Projects可以从分布式存储系统(如AWS S3和DBFS)获取输入和写入输出。MLflow可以在本地自动下载此类文件,以用于只能在本地文件上运行的项目,或者如果支持,则为项目提供分布式存储URI。这意味着您可以编写构建大型数据集的项目,例如创建100 TB文件。

示例用例

无论您是单独工作的数据科学家还是大型组织的一员,您都可以通过多种方式使用MLflow:
个人数据科学家可以使用MLflow跟踪在其机器上本地跟踪实验,在项目中组织代码以供将来重用,以及生产工程师随后可以使用MLflow的部署工具部署的输出模型。MLflow Tracking默认情况下只读取和写入文件到本地文件系统,因此无需部署服务器。
数据科学团队可以部署MLflow跟踪服务器来记录和比较处理同一问题的多个用户的结果。通过设置用于命名其参数和度量的约定,他们可以尝试不同的算法来解决相同的问题,然后再次对新数据运行相同的算法以比较未来的模型。此外,任何人都可以下载并运行另一个模型。
大型组织可以使用MLflow共享项目,模型和结果。任何团队都可以使用MLflow项目运行另一个团队的代码,因此组织可以打包其他团队可以使用的有用培训和数据准备步骤,或者比较同一任务中许多团队的结果。此外,工程团队可以轻松地将工作流程从研发转移到生产阶段。
生产工程师可以以相同的方式部署来自不同ML库的模型,将模型作为文件存储在他们选择的管理系统中,并跟踪模型的运行来源。
研究人员和开源开发人员可以使用MLflow项目格式向GitHub发布代码,使任何人都可以使用该命令轻松运行代码 。mlflow run github.com/...
ML Library Developers可以输出MLflow Model格式的模型,让它们使用MLflow的内置工具自动支持部署。此外,部署工具开发人员(例如,构建服务平台的云供应商)可以自动支持各种模型。