MLflow 是一个简化机器学习开发的平台,包括跟踪实验、将代码打包以便于可再现的运行以及共享和部署模型。
MLflow 提供了一组轻量级 API,可用于任何现有的机器学习应用程序或库(TensorFlow、PyTorch、XGBoost 等),无论您当前在何处运行 ML 代码(例如:在笔记本电脑、独立应用程序或云平台中)。
机器学习需要对广泛的数据集、数据准备步骤和算法进行试验,以构建最大化某些目标指标的模型。构建模型后,您还需要将其部署到生产系统,监控其性能,并根据新数据不断对其进行重新训练并与需要替代的模型进行比较。
因此,通过机器学习提高生产力可能具有挑战性,原因如下:
此外,尽管单个 ML 库为其中一些问题(例如:模型服务)提供了解决方案,但为了获得最佳结果,您通常需要尝试多个 ML 库。 MLflow 让您可以使用任何库训练、重用和部署模型,并将它们打包成可重复的步骤,其他数据科学家可以将其用作“黑匣子”,甚至无需知道您使用的是哪个库。
MLflow 的核心理念是尽可能少地限制您的工作流程:它旨在与任何机器学习库一起使用,按照惯例(约定)确定有关您的代码的大部分内容,并且只需要最少的更改即可集成到现有的代码库中。 MLflow 的目标是获取以其格式编写的任何代码库,并使其可复现和可重复使用,可供多个数据科学家使用。
MLflow 目前提供四个组件:跟踪(Tracking)、项目(Projects)、模型(Models)和模型注册表(Model Registry)。 您可以单独使用这些组件中的每一个。例如,也许您想以 MLflow 的模型格式导出模型,而不使用 Tracking 或 Projects,但它们也可以很好地协同工作。
当您在 MLflow API 中指定制品的位置时,语法取决于您是调用的 Tracking、Models 还是 Projects 的 API。 对于 Tracking API,您可以使用(运行 ID,相对路径)元组指定制品位置。 对于 Models 和 Projects API,您可以通过以下方式指定制品位置:
/Users/me/path/to/local/model
relative/path/to/local/model
<scheme>/<scheme-dependent-path>
例如:
s3://my_bucket/path/to/model
hdfs://<host>:<port>/<path>
runs:/<mlflow_run_id>/run-relative/path/to/model
models:/<model_name>/<model_version>
models:/<model_name>/<stage>
mlflow-artifacts:/path/to/model
(在 --serve-artifacts
代理模式下运行跟踪服务时)Tracking API 示例:
mlflow.log_artifacts("<mlflow_run_id>", "/path/to/artifact")
Models API 示例:
mlflow.pytorch.log_model("runs:/<mlflow_run_id>/run-relative/path/to/model", registered_model_name="mymodel")
mlflow.pytorch.load_model("models:/mymodel/1")
数据是机器学习获得良好结果的关键,因此, MLflow 旨在扩展到大型数据集、大型输出文件(例如:模型)和大量实验。具体来说,MLflow 支持四个维度的缩放:
无论您是单独工作的数据科学家还是大型组织的一部分,都可以通过多种方式使用 MLflow:
个人数据科学家可以使用 MLflow Tracking 在他们的机器上本地跟踪实验,组织项目中的代码以供将来重用,并输出模型,然后生产工程师可以使用 MLflow 的部署工具进行部署。 MLflow Tracking 默认只是读写文件到本地文件系统,所以不需要部署服务。
数据科学团队可以部署 MLflow Tracking 服务来记录和比较处理同一问题的多个用户的结果。通过设置命名参数和指标的约定,他们可以尝试不同的算法来解决相同的问题,然后在新数据上再次运行相同的算法来比较未来的模型。此外,任何人都可以下载并运行另一个模型。
大型组织可以使用 MLflow 共享项目、模型和结果。任何团队都可以使用 MLflow Projects运行另一个团队的代码,因此,组织可以打包其他团队可以使用的有用的训练和数据准备步骤,或者比较多个团队在同一任务上的结果。此外,工程团队可以轻松地将工作流程从研发转移到生产阶段。
生产工程师可以以相同的方式部署来自不同 ML 库的模型,将模型作为文件存储在他们选择的管理系统中,并跟踪运行模型的来源。
研究人员和开源开发人员可以以 MLflow Project 的格式将代码发布到 GitHub,使任何人都可以轻松地使用 mlflow run github.com/...
命令运行他们的代码。
ML 库开发人员可以输出 MLflow 模型格式的模型,让它们使用 MLflow 的内置工具自动支持部署。此外,部署工具开发人员(例如,构建服务平台的云供应商)可以自动支持多种模型。