雷锋网 AI 研习社按:机器学习开发有着远超传统软件开发的复杂性和挑战性,现在,Databricks 开源 MLflow 平台有望解决其中的四大痛点。
据雷锋网 AI 研习社了解,尝试过机器学习开发的同学们都知道,它的复杂性远超软件开发,且伴随着多种全新的挑战。在 Databricks,我们与上百家用到机器学习的公司共事,反复听到如下顾虑:
五花八门的工具。在机器学习生命周期的每个阶段,从数据准备到模型训练,都有成百上千的开源工具。然而,不同于传统的软件开发(每个阶段选择一种工具),在机器学习开发中,你通常想要尝试每种可用的工具(如算法),看是否能提升实验结果。这样一来,需要使用和产品化许多库。
实验难以追踪。机器学习算法中有许多可配置参数,不管你是独立开发者还是处于团队中,都难以追踪每个实验中用于生成模型的参数、代码和数据。
实验结果难以复现。由于缺乏精细的追踪能力,团队在使用相同代码再次实验时往往会陷入困境。不管是数据科学家将训练代码交给工程师用于生产,还是你打算返回到之前的研究对问题进行调试,重现机器学习工作流程都很重要。
机器学习难以部署。将模型转化为产品极具挑战,因为部署工具和模型运行环境(如 REST serving、批推理、移动端应用)太多了。由于没有将模型从库转移到工具中的标准方法,导致每一次新的部署都伴随全新风险。
鉴于上述挑战,毫无疑问,为了使机器学习开发像传统软件开发一样,具有鲁棒性、可预测性以及广泛传播,它必须得到大幅进化。为此,许多组织都开始打造内部机器学习平台来管理机器学习生命周期。例如,Facebook,Google 和 Uber 已经打造 FBLearner Flow,TFX 和 Michelangelo 来管理数据准备、模型训练和部署。然而,即使是这些内部机器学习平台,也存在限制:只支持少量内置算法或者单个 ML 库,并且绑定的是自家公司的基础架构。用户不能轻松利用新的 ML 库,也很难将自己的研究分享到更广的社群。
在 Databricks,我们相信有更好的方式来管理机器学习生命周期,基于此我们推出全新的开源机器学习平台 MLflow。目前,alpha 版本已发布。Github 链接:https://github.com/databricks/mlflow
MLflow 从现有 ML 平台中得到灵感,在设计上拥有以下两项开放理念:
开放的交互界面:MLflow 被设计成支持所有 ML 库、算法、部署工具和语言,它围绕 REST API 和可以从多种工具中应用的简单数据格式(如将模型看作 lambda 函数 )建立,而不是仅支持少量内建功能。这带来一个立竿见影的好处:可以轻易将 MLflow 加入现有代码中,同时,在组内分享可执行的使用任意 ML 库的代码也变得简单。
开源:MLflow 是一个开源项目,用户和工具库开发者能对其进行扩展。另外,如果你希望开源自己的代码,得益于 MLflow 的开放格式,在组织间共享工作流步骤和模型十分简单。
MLflow 现在仍为 alpha 版,但是我们认为该版本在处理 ML 代码上已非常有用,我们也乐意收到大家的反馈。接下来是对 MLflow 以及相关组件的详细介绍。
MLflow alpha 版由以下 3 个组件构成:
MLflow Tracking 是一个 API,当你在运行机器学习代码打算后续可视化时,它是展示参数记录、代码版本、metric 和输出文件的 UI。只需几行简单的代码,你就能够追踪参数,metric 和 artifact:
你可以在任何环境(独立脚本、notebook 等)下使用 MLflow Tracking 将结果记录到本地文件或者服务器,之后再将多次操作进行对比。借助网页 UI,你可以查看和对比多次输出。团队也能使用这些工具来比较不同用户的实验结果。
MLflow Projects 提供打包可重用代码的标准格式。每个 project 只是一个代码目录或 Git 库,使用一个 descriptor 文件来说明其依赖关系以及如何运行代码。MLflow Project 由一个简单的 YAML 文件(MLproject)定义。
project 能借助 Conda 环境来说明其依赖关系。一个 project 可能存在多个调用程序的 entry 点(已经指定参数)。你可以使用 mlflow run 命令工具运行来自本地文件或 Git 库中的 project。
MLflow 将自动为 project 设置正确的环境并运行。另外,如果你在 project 中使用 Tracking API,MLflow 将会记住执行的 project 版本和参数。你能够轻松再运行相同的代码。
project 格式使得分享可重用的代码变得更加简单。配合 MLflow Tracking,MLflow Project 可以为你提供在复现、扩展和实验中极其好用的工具。
MLflow Model 是一种约定,它将机器学习模型打包成多种格式(称为 flavor)。MLflow 提供多种工具来帮助你部署不同 flavor。每个 MLflow Model 作为一个目录保存,包含 arbitrary 文件和一个 MLmodel descriptor 文件(该文件中列出了它适用的 flavor)。
在上面这个例子中,该模型可与支持 sklearn 和 python_function 模型 flavor 的工具一起使用。
MLflow 提供将常见模型部署到不同平台上的工具。例如,任何支持 python_function flavor 的模型都能部署到基于 Docker 的 REST 服务器或 Azure ML、AWS SageMaker 等云平台上。
按照 mlflow.org 的使用说明,或前往 GitHub 查看已经发布的代码。期待大家的反馈。
MLflow 才刚刚起步,所以还有不少工作要做。除了 project 的更新,我们还计划介绍重要的全新组件(如 Monitoring)、库集成和我们已经发布的扩展功能(如对更多环境的支持等)。大家可关注我们的博客以获取更多信息。
via Databricks,雷锋网 AI 研习社编译。