机器学习管理平台 MLFlow

最近工做很忙,博客一直都没有更新。抽时间给你们介绍一下Databrick开源的机器学习管理平台-MLFlowhtml

谈起Databrick,相信即便是不熟悉机器学习和大数据的工程湿们也都有所了解,它由Spark的创始人开办的,主要为用户提供在云端使用Spark来进行机器学习的能力。那么此次Databrick开源的MLFlow究竟能提供什么样的功能呢?python

首先咱们来看一看当前机器学习所遇到的挑战:git

  • 使用的软件工具繁多,一个机器学习的项目基本上数据收集和准备,模型训练,模型部署的不断迭代过程,这个过程当中的每一步都有不少不一样的工具和选择。单就模型训练来讲,咱们就有scikit-learn,pytorch,spark,tensorflow,R 等等诸多选择。它们各自具备不一样的优缺点和适用场合,对于数据科学家而言,要管理和适用这么多的工具,确实很是困难。
  • 很难跟踪和重现数据处理,代码运行,参数调试的过程和结果。
  • 很难对模型进行产品化,部署模型很困难。
  • 当数据规模增加的时候,很难扩展和伸缩。

MLFlow的目标是但愿可以解决这些问题,但愿支持任何的机器学习库,能够在本机或者云端运行,并解决可伸缩性的问题github

MLFlow采用了开源的策略,基于API和模块化的设计。他主要有如下三个功能模块:web

  • Tracking 跟踪和记录
  • Project 项目管理
  • Models 模型管理

咱们分别来看看这三块:机器学习

Tracking

MLFlow的追踪功能相似APM,记录应用运行过程当中所产生的各类数据。主要记录参数(Parameters),指标(Metrics),模型的持久化对象(Artifact)等内容。这一部分实际上功能的实现很简单。你们能够参考它的代码 ide

例如,对于参数的记录代码:模块化

def log_param(self, key, value):
    # TODO: prevent keys from containing funky values like ".."
    fn = os.path.join(self.run_dir, "parameters", key)
    dir_util.mkpath(os.path.dirname(fn))
    with open(fn, "w") as f:
        f.write("%s\n" % value)

我想说,要解决追踪的问题,业内已经有不少成熟的工具,各类APM产品,甚至Splunk,ELK都是不错的选择。工具

Project

项目管理主要是为了解决机器学习中诸多不一样工具的问题。其实解决的方法也很简单,就是用一些元数据来描述项目,并把项目用一个合理的目录结构来管理,结构以下:post

例如上图的例子,把一个conda的python项目用一个yaml文件来描述,记录了名字是什么,参数是什么,有哪些依赖运行命令是什么,而后就能够用mlflow的API或者命令行客户端来调用。

对于这个问题,我想说的是,为何不适用容器呢?容器是一个很好的封装各类不用运行环境和运行工具的选择。比起上面的方案,我认为要强许多,况且,还要支持云端,容器才是最佳实践!

项目管理的代码在这里 ,功能也很少。

MLFlow能够直接运行在github上的项目,也就是用github做为项目管理的仓库。

这里的亮点是能够运行拥有多个步骤的工做流,每个步骤都是一个项目,相似一个数据处理管道(data pipeline)。利用Tracking API,不一样项目步骤之间能够传递数据和模型(Artifact)。这也许是为何该项目叫MLFlow吧。

Models

MLFlow利用相似对项目管理的相同哲学管理模型,使用元数据来描述不一样工具所产生的不一样模型。

上图是一个模型的例子。模型支持不一样的口味(Flavors),包含Python,Scikit-Learn,Tensorflow和Spark ML。用户也能够定制本身个性化的口味(感受像是在作菜)。

模型这比部分还支持了部署的功能,也就是说能够把模型部署到不一样的平台,这个功能仍是很好的。主要支持本地部署,Microsoft AzureML,AWS Sagemaker和Apache Spark。

固然,MLFlow并不能很好的解决不一样工具所产生的模型不兼容的问题,你并不能把一个tensorflow的模型部署到Saprk上。若是有人对这一部分感兴趣,能够去关注一下这个项目:Mleap

另外MLFlow使用Flask提供web服务,有UI功能。当前还在Alpha阶段。但愿它的将来能有好的发展,给数据科学家们提供一个好用的平台。

参考

相关文章
相关标签/搜索