MLflow分为四个组件:跟踪、项目、模型和模型注册表。您可以单独使用这些组件—例如,您可能想要导出MLflow的模型格式,而不需要使用跟踪或项目—但是它们也被设计成可以很好地协同工作。
MLflow的核心理念是在您的工作流上放置尽可能少的约束:它被设计为与任何机器学习库一起工作,根据约定确定代码的大部分内容,并且需要最小的更改来集成到现有的代码库中。与此同时,MLflow的目标是采用任何以其格式编写的代码库,使其可被多个数据科学家重复和重用。在本页中,我们将描述一个典型的ML工作流以及MLflow适合的位置。

机器学习工作流程

机器学习需要对广泛的数据集、数据准备步骤和算法进行实验,以建立一个最大化某些目标指标的模型。构建了模型之后,还需要将其部署到生产系统中,监视其性能,并不断地对其进行新数据培训,并与替代模型进行比较。
因此,高效的机器学习具有挑战性,原因如下:

  • 跟踪实验是很困难的。当您只是在您的笔记本电脑或交互式笔记本电脑上处理文件时,您如何分辨哪些数据、代码和参数用于获得特定的结果?
  • 复制代码很困难。即使您已经一丝不苟地跟踪了代码版本和参数,您也需要捕获整个环境(例如,库依赖项),以再次获得相同的结果。如果你想让另一个数据科学家使用你的代码,或者你想在另一个平台上大规模运行相同的代码(例如,在云上),这尤其具有挑战性。
  • 没有打包和部署模型的标准方法。每个数据科学团队都为其使用的每个ML库提出了自己的方法,而模型与生成模型的代码和参数之间的联系往往会丢失。
  • 没有中心存储来管理模型(它们的版本和阶段转换)。数据科学团队创建了许多模型。由于缺乏协作和管理模型生命周期的中心位置,数据科学团队在如何管理模型阶段方面面临挑战:从开发到阶段,最后,使用各自的版本、注释和历史,进行归档或生产。

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

MLflow组件

MLflow提供四个组件来帮助管理ML工作流:

  • MLflow Tracking是一个API和UI,用于在运行机器学习代码时记录参数、代码版本、指标和工件,并在以后可视化结果。您可以在任何环境(例如,独立脚本或笔记本)中使用MLflow跟踪,将结果记录到本地文件或服务器上,然后比较多次运行。团队也可以使用它来比较不同用户的结果。
  • MLflow项目是包装可重用数据科学代码的标准格式。每个项目只是一个带有代码的目录或Git存储库,并使用描述符文件或约定来指定其依赖项和如何运行代码。例如,项目可以包含conda。用于指定Python Conda环境的yaml文件。当您在项目中使用MLflow跟踪API时,MLflow会自动记住项目版本(例如,Git提交)和任何参数。您可以轻松地从GitHub或您自己的Git存储库运行现有的MLflow项目,并将它们链接到多步骤工作流中。
  • MLflow模型提供了一种将机器学习模型打包成多种风格的约定,以及各种帮助您部署它们的工具。每个模型都保存为一个目录,其中包含任意文件和一个描述符文件,该文件列出了模型可以使用的几种“风格”。例如,TensorFlow模型可以作为TensorFlow DAG加载,或者作为Python函数应用于输入数据。MLflow提供了许多常见的模型类型多样化的平台部署的工具:例如,任何模型支持“Python函数”味道可以部署到Docker-based其他服务器,云平台Azure毫升和AWS SageMaker等,并作为批处理和用户定义的函数在Apache引发流推理。如果您使用跟踪API输出MLflow模型,MLflow还会自动记住它们来自哪个项目并运行它们。
  • MLflow Registry提供了一个集中的模型存储、一组api和UI,以协作管理MLflow模型的整个生命周期。它提供了模型沿沿性(MLflow实验和运行生成模型)、模型版本控制、阶段转换(例如从阶段到生产或归档)和注释。

    引用产品

    当您在MLflow API中指定产品的位置时,语法取决于您是在调用跟踪、模型还是项目API。对于跟踪API,您可以使用(运行ID,相对路径)元组指定产品位置。对于模型和项目api,您可以通过以下方式指定产品位置:

  • /Users/me/path/to/local/model

  • relative/path/to/local/model
  • /. For example:
    • s3://my_bucket/path/to/model
    • hdfs://:/
    • runs://run-relative/path/to/model
    • models://
    • models://

例如:
Tracking API

  1. mlflow.log_artifacts("<mlflow_run_id>", "/path/to/artifact")

Models API

  1. mlflow.pytorch.log_model("runs:/<mlflow_run_id>/run-relative/path/to/model", registered_model_name="mymodel")
  2. mlflow.pytorch.load_model("models:/mymodel/1")

可扩展性和大数据

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

  • 单个MLflow运行可以在分布式集群上执行,例如,使用Apache Spark。您可以在您选择的分布式基础设施上启动运行,并将结果报告给跟踪服务器以进行比较。MLflow包括一个内置的API来启动运行在Databricks上。
  • MLflow支持使用不同参数并行启动多个运行,例如,用于超参数调优。您可以简单地使用Projects API来启动多次运行,使用Tracking API来跟踪它们。
  • MLflow项目可以从分布式存储系统(如AWS S3和DBFS)获取输入,并向其写入输出。MLflow可以为只能在本地文件上运行的项目自动地在本地下载这些文件,或者为项目提供分布式存储URI(如果它支持的话)。这意味着您可以编写构建大型数据集的项目,比如以100tb的文件为特色。
  • MLflow Model Registry为大型组织提供了一个中心中心,以协作管理完整的模型生命周期。一个组织中的许多数据科学团队开发了数百个模型,每个模型都带有它的实验、运行、版本、产品和阶段转换。中央注册中心有助于跨大型组织中的多个团队发现模型和实现模型的目的。

    示例用例


    MLflow有多种使用方法,无论你是单独工作的数据科学家还是大型组织的一部分:

  • 个人数据科学家可以使用MLflow跟踪在他们的机器上本地跟踪实验,组织项目中的代码以供将来重用,并输出模型,然后生产工程师可以使用MLflow的部署工具部署模型。默认情况下,MLflow跟踪只对本地文件系统读写文件,因此不需要部署服务器。

  • 数据科学团队可以部署一个MLflow跟踪服务器来记录和比较处理同一问题的多个用户之间的结果。通过建立命名参数和度量标准的约定,他们可以尝试不同的算法来解决相同的问题,然后在未来的新数据上再次运行相同的算法来比较模型。此外,任何人都可以下载并运行另一种模式。
  • 大型组织可以使用MLflow共享项目、模型和结果。任何团队都可以使用MLflow项目运行另一个团队的代码,因此组织可以打包其他团队可以使用的有用的培训和数据准备步骤,或者比较来自多个团队在同一任务上的结果。此外,工程团队可以轻松地将工作流程从研发阶段转移到生产阶段。
  • 生产工程师可以以相同的方式从不同的ML库中部署模型,将模型作为文件存储在他们选择的管理系统中,并跟踪模型的运行来源。
  • 研究人员和开源开发者可以将代码以MLflow项目格式发布到GitHub上,这使得任何人都可以轻松地使用MLflow run github.com/..运行他们的代码。命令。
  • ML库开发人员可以以MLflow模型格式输出模型,使其自动支持MLflow内置工具的部署。此外,部署工具开发人员(例如,构建服务平台的云供应商)可以自动支持各种各样的模型。