《架构师》2018年7月
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

Spark团队开源新作:全流程机器学习平台MLflow

作者Matei Zaharia 译者 无明

AI前线导读:在昨天开幕的Spark+AI Summit大会上,Spark和Mesos的核心作者兼Databrick首席技术专家Matei Zaharia宣布推出开源机器学习平台MLflow,这是一个能够覆盖机器学习全流程(从数据准备到模型训练到最终部署)的新平台,旨在为数据科学家构建、测试和部署机器学习模型的复杂过程做一些简化工作。Matei表示,研究工作主要围绕着“如何为开发者提供类似谷歌TFX、Facebook FBLearner Flow等平台类似的好处,但是要以开放的方式——不仅在开源的意义上开放,而且是可以使用任何工具和算法的意义上开放"的想法展开。

Matei为MLflow撰写了一篇介绍文章,AI前线对文章进行了编译。这个全新的机器学习平台到底有何新特性?让我们来一探究竟。

每个做过机器学习开发的人都知道机器学习的复杂性,除了软件开发中常见的问题之外,机器学习还存在很多新的挑战。作为一家大数据解决方案公司,Databricks与数百家使用机器学习的公司合作,所以能够清楚地了解他们的痛点,比如工具太过复杂、难以跟踪实验、难以重现结果、难以部署模型。由于这些挑战的存在,机器学习开发必须变得与传统软件开发一样强大、可预测和普及。为此,很多企业已经开始构建内部机器学习平台来管理机器学习生命周期。例如,Facebook、谷歌和优步分别构建了FBLearner Flow、TFX和Michelangelo来进行数据准备、模型训练和部署。但这些内部平台存在一定的局限性:典型的机器学习平台只支持一小部分内置算法或单个机器学习库,并且被绑定在公司内部的基础设施上。用户无法轻易地使用新的机器学习库,或与社区分享他们的工作成果。

Databricks认为应该使用一种更好的方式来管理机器学习生命周期,于是他们推出了MLflow,一个开源的机器学习平台。

MLflow:开放式机器学习平台

MLflow的灵感来源于现有的机器学习平台,但以开放性作为主要设计目标:

1.开放接口:MLflow可与任何机器学习库、算法、部署工具或编程语言一起使用。它基于REST API和简单的数据格式(例如,可将模型视为lambda函数)而构建,可以使用各种工具,而不只是提供一小部分内置功能。用户可以很容易地将MLflow添加到现有的机器学习代码中,并在组织中共享代码,让其他人也能运行这些代码。

2.开源:MLflow是一个开源项目,用户和机器学习库开发人员可以对其进行扩展。此外,利用MLflow的开放格式,可以轻松地跨组织共享工作流步骤和模型。

Mlflow目前仍处于alpha阶段,但它已经提供了一个可用的框架来处理机器学习代码。接下来将详细介绍MLflow和它的组件。

MLflow的组件(alpha版)

MLflow的alpha版本包含了三个组件:

MLflow的跟踪组件支持记录和查询实验数据,如评估度量指标和参数。MLflow的项目组件提供了可重复运行的简单包装格式。最后,MLflow的模型组件提供了用于管理和部署模型的工具。

MLflow的跟踪组件

MLflow的跟踪组件提供了一组API和用户界面,用于在运行机器学习代码时记录参数、代码版本、度量指标和输出文件,以便在后续进行可视化。通过几行简单的代码就可以跟踪参数、度量指标和文件:

importmlflow

#Logparameters(key-valuepairs)
mlflow.log_param("num_dimensions",8)
mlflow.log_param("regularization",0.1)

#Logametric;metricscanbeupdatedthroughouttherun
mlflow.log_metric("accuracy",0.1)
...
mlflow.log_metric("accuracy",0.45)

#Logartifacts(outputfiles)
mlflow.log_artifact("roc.png")
mlflow.log_artifact("model.pkl")

用户可使用跟踪组件(通过独立脚本或notebook)将结果记录到本地文件或服务器上,然后通过Web UI来查看和比较多次运行结果。团队也可以使用这些工具来比较不同用户的运行结果。

MLflow的项目组件

MLflow的项目组件提供了一种用于打包可重用代码的标准格式。项目可以是一个包含代码的目录或Git仓库,并使用一个描述符文件来描述依赖关系以及如何运行代码。MFflow项目通过一个叫作MLproject的YAML文件进行定义。

name:MyProject
conda_env:conda.yaml
entry_points:
main:
parameters:
data_file:path
regularization:{type:float,default:0.1}
command:"pythontrain.py-r{regularization}{data_file}"
validate:
parameters:
data_file:path
command:"pythonvalidate.py{data_file}"

项目可以通过Conda来指定依赖关系。一个项目可能包含多个带有命名参数的运行入口。用户可以使用mlflow run命令行工具来运行项目,项目代码可以在本地,也可以在Git仓库里:

mlflowrunexample/project-Palpha=0.5
mlflowrungit@github.com:databricks/mlflow-example.git-P
        alpha=0.5

MLflow将自动为项目设置合适的环境并运行它。另外,如果在项目中使用了MLflow Tracking API, MLflow将记住执行过的项目版本(即Git的提交操作)和参数,这样就可以很轻松地重新运行完全相同的代码。

无论是在企业还是在开源社区,项目格式让共享可重用代码变得更加容易。结合MLflow的跟踪组件,MLflow项目为可重现性、可扩展性和实验提供了很好的工具。

MLflow的模型组件

MLflow的模型组件提供了一种将机器学习模型打包成多种格式的规范,这些格式被称为“flavor”。MLflow提供了多种工具来部署不同flavor的模型。每个MLflow模型被保存成一个目录,目录中包含了任意模型文件和一个MLmodel描述符文件,文件中列出了相应的flavor。

time_created:2018-02-21T13:21:34.12
        flavors:
          sklearn:
sklearn_version:0.19.1
pickled_model:model.pkl
          python_function:
loader_module:mlflow.sklearn
pickled_model:model.pkl

在这个例子中,模型可以与支持sklearn或python_function的工具一起使用。

MLflow提供了将常见模型部署到不同平台的工具。例如,任何支持python_function的模型都可以部署到基于Docker的REST服务器或云平台上(如Azure ML和AWS SageMaker),也可以作为Apache Spark的用户定义函数,用于进行批量和流式推断。如果使用Tracking API将MLflow模型输出为文件,MLflow还会自动记住它们是由哪个项目运行生成的。

MLflow入门

要使用MLflow,请按照mlflow.org上的说明进行操作,或使用Github上的alpha版代码。

在Databricks上托管MLflow

如果要使用MLflow的托管版本,可以在databricks.com/mlflow注册。Databricks上的MLflow与Databricks Unified Analytics平台集成,包括Notebooks、Jobs, Databricks Delta和Databricks安全模型,为用户提供了安全、生产就绪的方式大规模地运行现有的MLflow作业。

后续计划

MLflow刚刚展露头角,因此还有很多事情要做。后续计划引入新组件(如监控)、与其他库的集成以及扩展已发布的组件(例如支持更多环境类型)。

MLflow官网 http://www.mlflow.org

MLflow GitHub地址 https://github.com/databricks/mlflow