精华内容
下载资源
问答
  • 2018-06-06 13:57:00
    每个尝试机器学习开发的人都知道这很复杂。除了软件开发中常见的问题之外,机器学习(ML)开发带来了多种新挑战。在Databricks,我们与数百家使用ML的公司合作,我们一再听到同样的担忧:
    1.有无数的工具。

    数百种开源工具涵盖了ML生命周期的每个阶段,从数据准备到模型训练。然而,与团队为每个阶段选择一个工具的传统软件开发不同,在ML中,您通常需要尝试每种可用的工具(例如算法)以查看它是否改进了结果。ML开发人员因此需要使用和生产数十种库。

    2.很难跟踪实验。

    机器学习算法有几十个可配置参数,无论您是单独工作还是团队工作,都很难跟踪哪些参数,代码和数据进入每个实验以生成模型。

    3.很难重现结果。

    如果没有详细的跟踪,团队往往难以获得相同的代码再次工作。无论您是数据科学家将您的培训代码传递给工程师以用于生产,还是回到以前的工作来调试问题,ML工作流程的复制步骤都至关重要。

    4.部署ML很困难。

    由于需要运行的部署工具和环境过多(例如REST服务,批处理推理或移动应用程序),因此将模型迁移到生产可能具有挑战性。没有标准的方法将模型从任何库移动到这些工具中,从而为每个新部署创建新的风险。

    由于这些挑战,显然ML开发必须发展成为与传统软件开发一样强大,可预测和广泛推广的产品。为此,许多组织已经开始构建内部机器学习平台来管理ML生命周期。例如,Facebook,Google和Uber已经建立了FBLearner Flow,TFX和Michelangelo来管理数据准备,模型训练和部署。但是,即使这些内部平台也是有限的:典型的ML平台仅支持一小组内置算法或单个ML库,并且它们与每个公司的基础设施相关联。用户无法轻松利用新的ML库,或与更广泛的社区共享他们的工作。
    在Databricks,我们相信应该有一个更好的方式来管理ML生命周期,所以我们很高兴地宣布MLflow:一个开源的机器学习平台。

    MLflow:开放式机器学习平台

    MLflow的灵感来源于现有的ML平台,但其设计目的有两个方面:
    1.开放接口:

    MLflow被设计用于任何ML库,算法,部署工具或语言。它基于REST API和简单的数据格式(例如,可将模型视为lambda函数)构建,可以使用各种工具,而不是仅提供一小组内置功能。这也很容易将MLflow添加到现有的ML代码中,以便您立即受益,并使用组织中其他人可以运行的任何ML库来共享代码。

    2.开源:

    我们将MLflow作为一个开源项目发布,供用户和库开发人员扩展。此外,如果您希望开源代码,MLflow的开放格式可以轻松地跨组织共享工作流步骤和模型。

    Mlflow目前仍处于初始版,但我们相信它已经提供了一个有用的框架来处理ML代码,我们很乐意听到您的反馈。在这篇文章中,我们将详细介绍MLflow并解释其组件。

    MLflow Alpha发布组件

    MLflow的第一个alpha版本有三个组件:
    img_35f0e928897e28f66a49cb144c82886e.png
    mlflow.png
    MLflow跟踪支持记录和查询实验周围的数据,如评估指标和参数。MLflow项目提供了可重复运行的简单包装格式。最后,MLflow模型提供了管理和部署模型的工具。

    MLflow跟踪

    MLflow跟踪是一个API和用户界面,用于在运行机器学习代码时记录参数,代码版本,指标和输出文件,以便以后可视化它们。通过几行简单的代码,您可以跟踪参数,指标和工件:
    import mlflow
    
    # Log parameters (key-value pairs)
    mlflow.log_parameter("num_dimensions", 8)
    mlflow.log_parameter("regularization", 0.1)
    
    # Log a metric; metrics can be updated throughout the run
    mlflow.log_metric("accuracy", 0.1)
    ...
    mlflow.log_metric("accuracy", 0.45)
    
    # Log artifacts (output files)
    mlflow.log_atrifact("roc.png")
    mlflow.log_artifact("model.pkl")
    
    您可以在任何环境(例如,独立脚本或笔记本)中使用MLflow Tracking将结果记录到本地文件或服务器,然后比较多次运行。使用Web UI,您可以查看和比较多次运行的输出。团队也可以使用这些工具来比较不同用户的结果。

    MLflow项目

    MLflow项目提供了打包可重用数据科学代码的标准格式。每个项目都只是一个包含代码或Git存储库的目录,并使用一个描述符文件来指定它的依赖关系以及如何运行代码。MLflow项目由一个名为MLproject的简单YAML文件定义。
    name: My Project
    conda_env: conda.yaml
    entry_points:
    main:
    parameters:
    data_file: path
    regularization: {type: float, default: 0.1}
    command: "python train.py -r {regularization} {data_file}"
    validate:
    parameters:
    data_file: path
    command: "python validate.py {data_file}"
    
    项目可以通过Conda环境指定它们的依赖关系。一个项目也可能有多个入口点用于调用带有命名参数的运行。您可以使用mlflow run命令行工具运行项目,无论是从本地文件还是从Git存储库中运行:
    mlflow run example/project -P num_dimensions=5
    
    mlflow run git@github.com:databricks/mlflow-example.git -P num_dimensions=5
    
    MLflow将自动为项目设置合适的环境并运行它。另外,如果你在项目中使用MLflow Tracking API,MLflow将记住执行的项目版本(即Git commit)和任何参数。然后您可以轻松地重新运行完全相同的代码。
    无论是在公司还是在开源社区,项目格式都可以轻松共享可复制的数据科学代码。结合MLflow跟踪,MLflow项目为重现性,可扩展性和实验提供了很好的工具。

    MLflow模型

    MLflow模型是一种用多种格式打包机器学习模型的惯例,称为“风味”。MLflow提供了多种工具来帮助您部署不同风格的模型。每个MLflow模型都保存为一个包含任意文件和MLmodel描述符文件的目录,该文件列出了可以使用的口味。
    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 flavor的模型都可以部署到基于Docker的REST服务器,云平台(如Azure ML和AWS SageMaker)以及Apache Spark中用于批量和流式推断的用户定义函数。如果您使用Tracking API将MLflow模型输出为工件,则MLflow还会自动记住它们来自哪个Project和Run。

    MLflow入门

    要开始使用MLflow,请按照mlflow.org上的说明进行操作,或查看Github上的Alpha版本代码。我们很高兴听到您对这些概念和代码的反馈意见!

    在Databricks上主持MLflow

    如果您想运行MLflow的托管版本,我们现在也正在接受databricks.com/mlflow的注册。Databricks上的MLflow与完整的DatabricksUnified Analytics Platform集成,包括笔记本,作业,Databricks Delta和Databricks安全模型,使您能够以安全,生产就绪的方式大规模地运行现有MLflow作业。

    下一步是什么?

    我们刚刚开始使用MLflow,因此还有很多事情要做。除了项目更新之外,我们还计划引入主要的新组件(例如Monitoring),库集成以及我们已发布的内容(例如支持更多环境类型)的扩展。请继续关注我们的博客以获取更多信息。

    原文:https://databricks.com/blog/2018/06/05/introducing-mlflow-an-open-source-machine-learning-platform.html?utm_source=tuicool&utm_medium=referral

    更多相关内容
  • Databricks出品MLflow一个完整机器学习生命周期开源平台 MLflow机器学习生命周期平台 MLflow一个简化机器学习开发平台,包括跟踪实验、将代码打包成可重现的运行以及共享和部署模型。 MLflow 提供了一...
  • MLflow机器学习生命周期平台MLflow一个简化机器学习开发平台,包括跟踪实验,将代码打包为可重现的运行以及共享和部署模型。 MLflow提供MLflow一个机器学习生命周期平台MLflow一个简化机器学习开发平台...
  • MLflow - 用于机器学习生命周期开源平台
  • 该工具管理自动化机器学习(AutoML)实验,调度并运行由调整算法生成的实验性试验工作,以搜索不同训练环境(例如本地机器,远程服务器,OpenPAI,Kubeflow,FrameworkCon)中的最佳神经体系结构和/或超参数
  • AI Fairness 360(AIF360)AI Fairness 360工具包是种可扩展的开放源代码库,包含由研究社区开发的技术,可帮助检测和减轻整个AI应用程序生命周期机器学习模型的偏差。 AI Fairness 360 Python软件包包括用于...
  • 编者注:文中超链接如果不能访问可以点击“阅读原文”访问本文原页面;查看 2018年9月11日至13日在纽约Strata数据会议上的“模型生命周期管理”议题 。尽管机器学习...

    编者注:文中超链接如果不能访问可以点击“阅读原文”访问本文原页面;查看 2018年9月11日至13日在纽约Strata数据会议上的“模型生命周期管理”议题 。

    尽管机器学习(ML)可以产生出色的结果,在实践中使用它仍然是很复杂的。 除了软件研发中的常见挑战外,机器学习开发人员还面临着新的挑战,包括实验管理(跟踪结果是由哪些参数,代码和数据导致的); 可重复性(稍后可以在相同的运行环境中执行相同的代码); 部署模型到生产环境; 以及数据治理(审计在整个机构中使用的模型和数据。)。 围绕ML生命周期的这些关于工作流的挑战,通常是在生产环境中使用机器学习并在机构内部对其扩展的最大障碍。

    为了应对这些挑战,许多公司开始构建内部机器学习平台,这些平台可以自动化执行其中的一些步骤。 在典型的机器学习平台中,专门的工程团队构建了一套数据科学家可以调用的算法和管理工具。 例如,Uber和Facebook已经建立了Michelangelo和 FBLearner Flow来管理数据准备、模型训练和部署。 然而,就算是内部平台,也有其自身的限制性:典型的机器学习平台仅支持一小组具有有限定制化的(无论工程团队构建了什么),并且平台与每个公司的基础架构是绑定的。

    在2018年的Spark + AI峰会上我在Databricks的团队介绍了MLflow,这是一个新的开源项目,能够构建一个开放的机器学习平台。 除了开源之外,MLflow也是“开放的”,在某种意义上,机构中或者开源社区中的任何人,都能够为MLFlow添加新功能(比如一个新的训练算法或者一个新的部署工具),这些功能可以自动地与MLFlow的其他部分协作。MLflow通过在软件研发中对模型进行跟踪、重现、管理和部署,提供了一种强大的方式在组织机构内部去简化和线性扩展机器学习的部署。 在这篇博文中,我将简要概述MLflow所应对的挑战,以及如何入门的初阶讲解。

    机器学习工作流的挑战

    在Databricks,我们与数百家在生产环境中使用机器学习的公司合作。 在这些公司中,我们一再听到围绕机器学习的相同的担忧担忧:

    • 存在无数彼此独立的工具。 从数据准备到模型训练,数百种软件工具涵盖了机器学习生命周期的每个阶段。 更有甚者,与传统的软件开发不同,团队为每个阶段选择一个工具,在机器学习中,您通常希望尝试每个可用的工具(例如,算法)来查看它是否会改善结果。 因此,机器学习开发人员需要围绕数十个库进行使用和生产环境部署。

    • 跟踪实验很难。 机器学习算法具有几十种可配置的参数,无论您是单独工作还是在团队中工作,都很难跟踪每个实验中的何种参数、代码和数据造就了某种模型。

    • 实验结果难以重现。 如果没有详细的跟踪,团队使用相同的代码起到同样的效果这一点上往往会遇到困难。 无论您是将训练代码交付给工程师用于生产的数据科学家,还是为了调试一个错误回滚到过去的代码进行修正,重现机器学习工作流程的步骤都至关重要。 我们听过多个恐怖故事,比如生产环境的模型表现无法像训练模型那么好,或者一个团队无法重现另一个团队的结果。

    • 部署机器学习很困难。 由于需要运行大量的部署工具和环境(例如,REST服务,批处理推断,或移动应用程序),将模型迁移到生产环境可能会是极具挑战性的。 没有一种标准方法可以将模型从任何库迁移到任何这些工具上,从而每次进行新的部署时,都在产生新的风险。

    MLflow:一个开放的机器学习平台

    MLflow是这样被设计的:它旨在通过一组API和工具来解决这些工作流挑战,您可以将它们与任何现有的机器学习库和代码仓库一起使用。 在当前的alpha版本中,MLflow提供了三个主要组件:

    • MLflow 跟踪模块 :用于记录实验数据的API和UI,其中的数据包括参数,代码版本,评价指标,和使用过的输出文件。

    • MLflow 项目模块 :用于可重现性运行的一种代码封装格式。 通过将您的代码封装在MLflow项目中,您可以指定其中的依赖关系,并允许任何其他用户稍后再次运行它,并可靠地对结果进行重现。

    • MLflow 模型模块 :一种简单的模型封装格式,允许您将模型部署到许多工具。 例如,如果您能将模型封装为一个Python函数,MLflow模型就可以将其部署到Docker或Azure ML进行线上服务,部署到Apache Spark进行批量打分,等等。

    640?wx_fmt=png

    图1. MLflow组件。 图片由Matei Zaharia提供

    MLflow是模块化设计的,因此您不仅可以在现有机器学习流程中单独使用这些组件,也可以将它们组合使用。 让我们依次深入研究这些组件中的每一个,看看如何使用它们,以及它们能如何简化机器学习研发。

    MLflow入门

    MLflow是开源的,使用pip install mlflow 能够很方便的安装。要开始使用MLflow,请按照MLflow文档中的说明进行操作,或查看GitHub上的代码。

    MLflow 跟踪模块

    MLflow跟踪模块是一种API和UI,它被用于在执行机器学习代码时,记录参数、代码版本、性能评估和输出文件,以便日后对其进行可视化。 通过使用简单的几行代码,您就可以跟踪参数,性能指标和“工件”(您要存储的任意输出文件):

    import mlflow

    # Log parameters (key-value pairs)

    mlflow.log_param(“num_dimensions”, 8)

    mlflow.log_param(“regularization”, 0.1)

    # Log a metric; metrics can also be updated throughout the run

    mlflow.log_metric(“accuracy”, model.accuracy)

    # Log artifacts (output files)

    mlflow.log_artifact(“roc.png”)

    mlflow.log_artifact(“model.pkl”)

    您可以在任何可以运行代码(例如,独立的脚本或notebook中的代码)的环境中使用MLflow跟踪模块将结果记录到本地文件或服务器,然后比较多次运行结果。 使用Web UI,您可以查看和比较多次运行的输出:

    640?wx_fmt=gif

    图2. MLflow跟踪UI。 图片由Matei Zaharia提供

    MLflow项目模块

    跟踪结果固然有用,但您也经常需要重现结果。 MLflow 项目模块为封装可重用的数据科学代码提供了一种标准格式。 每个项目可以只是一个包含代码的文件夹,也可以是Git仓库,通过使用一个描述文件来指定其依赖关系以及如何运行代码。 一个MLflow项目由一个名为MLproject的简单YAML文件来定义 。

    name: My Project

    conda_env: conda.yaml

    entry_points:

      main:

        parameters:

          data_file: path

          regularization: {type: float, default: 0.1}

        command: “python train.py -r {regularization} {data_file}”

      validate:

        parameters:

          data_file: path

        command: “python validate.py {data_file}”

    项目可以通过Conda环境指定其依赖项。 一个项目也可以有多个入口点,用于调用含有带命名参数的运行。 您可以使用mlflow run命令行工具,从本地文件或Git仓库运行项目:

    mlflow run example/project -P alpha=0.5

    mlflow run git@github.com:databricks/mlflow-example.git -P alpha=0.5

    MLflow会自动为项目设置正确的环境,并加以运行。 额外要提到的是,如果您在项目中使用MLflow Tracking API,MLflow将记住执行的项目版本(即Git commit)和任何参数。 然后,您可以轻松地重新运行完全相同的代码。 因此,无论是在公司内部还是在开源社区中,使用项目模块提供的格式,都可以轻松共享可重现的数据科学代码。

    MLflow模型模块

    MLflow的第三个组件是MLflow Models,这是一种简单但功能强大的封装模型的方法。 虽然已经存在许多模型存储格式(例如ONNX和PMML),但MLflow模型模块的目标是不同的:其目标是表示模型应该如何被调用,以便许多不同类型的下游部署工具可以使用它。 为了实现这一点,MLflow模型模块可以围绕一个模型存储被称为“风格”的多种格式。这些风格可以是特定针对某些库的(例如TensorFlow计算图),也可以是非常通用的,如“Python函数”,任何能够理解Python代码的部署工具都可以加以使用。

    每个MLflow模型简单地保存为包含任意文件的目录和一个叫MLmodel 的YAML文件,这个文件列出了它可以在哪些风格里使用。这里有一个从SciKit-Learn导出的示例模型:

    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

    MLflow提供了将许多常见模型类型部署到不同平台的工具。 例如,支持python_function 风格的任何模型,都可以部署到基于Docker的REST服务器,云服务平台(如Azure ML和AWS SageMaker),以及Spark SQL中的用户自定义函数,用于批处理和流式处理进行模型推断。 如果使用MLflow Tracking API将MLflow模型输出为工件,MLflow还将自动记住哪个项目、在哪运行它们,以便您日后进行重现。

    将这些工具组合在一起

    虽然MLflow的各个组件很简单,但无论您是单独使用机器学习还是在大型团队中与人协作,您都可以以强大的方式将它们组合在一起。 例如,您可以将MLflow用于:

    • 在您的笔记本电脑上开发模型时,对代码,数据,参数和性能指标进行记录并可视化。

    • 将代码封装为MLflow项目,以便在云环境中大规模运行它们,以进行超参数搜索。

    • 构建一个排行榜,以比较团队内针对同一任务的不同模型的性能。

    • 将算法,提取特征的步骤和模型共享为MLflow项目或者MLflow模型,使得组织机构中的其他用户能够把这些整合到某个工作流中。

    • 将相同的模型部署到批处理和实时处理,而无需针对两个不同工具分别开发代码。

    下一步是什么?

    我们刚刚开始使用MLflow,因此还有很多其他内容即将到来。 除了对项目的更新外,我们还计划引入主要的新组件(如监控),库集成,和语言绑定。 例如,几周前,我们发布了MLflow 0.2,内置对TensorFlow的支持和其他一些新功能。

    我们很期待看到您可以使用MLflow做些什么,以及我们很乐意听取您的反馈。

    相关资源:

    • “将机器学习模型转化为真实的产品和服务时得到的经验教训”

    • “管理机器学习模型中的风险”:Andrew Burt和Steven Touw分享关于公司如何管理那些他们无法完全解释的模型

    • “什么是机器学习工程师?”:考察一种新角色,其专注于创建数据产品,并且使得数据科学的成果在生产环境中工作

    • “我们需要建立机器学习工具来强化机器学习工程师的能力”

    • 当模型变得流氓时:David Talby关于在生产环境中使用机器学习得到的深刻教训

    This article originally appeared in English: "MLflow: A platform for managing the machine learning lifecycle".

    640?wx_fmt=jpeg

    Matei Zaharia

    Matei Zaharia是斯坦福大学计算机科学系助理教授,以及Databricks首席技术专家。 他于2009年在加州大学伯克利分校攻读博士期间,创建了Spark项目。 在此之前,Matei在数据中心系统中广泛开展工作,与他人共同启动了Apache Mesos项目,并作为Apache Hadoop的提交者做出持续的贡献。 Matei的研究在2014年获得ACM计算机科学最佳博士论文奖。

    展开全文
  • 它处理机器学习的推理方面,在训练和管理模型的生命周期后获取模型TensorFlow Serving TensorFlow Serving是种针对机器学习模型的灵活,高性能的服务系统,专为生产环境而设计。 它处理机器学习的推理方面,在训练...
  • 快速入门·工作流程·示例·贡献·支持(松弛)ModelDB是一个开放源代码系统,用于对机器学习模型进行版本控制,包括其成分代码,数据,配置和环境,并在整个模型生命周期中跟踪ML元数据。 使用ModelDB以便:使您的...
  • 介绍如何使用DatabricksMLflow搭建机器学习生命周期管理平台,实现从数据准备、模型训练、参数和性能指标追踪、以及模型部署的全流程。

    ML工作流的痛点

    机器学习工作流中存在诸多痛点:

    • 首先,很难对机器学习的实验进行追踪。机器学习算法中有大量可配置参数,在做机器学习实验时,很难追踪到哪些参数、哪个版本的代码以及哪个版本的数据会产生特定的结果。
    • 其次,机器学习实验的结果难以复现。没有标准的方式来打包环境,即使是相同的代码、相同的参数以及相同的数据,也很难复现实验结果。因为实验结果还取决于采用的代码库。
    • 最后,没有标准的方式管理模型的生命周期。算法团队通常会创建大量模型,而这些模型需要中央平台进行管理,特别是模型的版本所处阶段和注释等元数据信息,以及版本的模型是由哪些代码、哪些数据、哪些参数产生,模型的性能指标如何。也没有统一的方式来部署这些模型。

    MIflow 就是为了解决机器学习工作流中的上述痛点问题而生。它可以通过简单的 API 实现实验参数追踪、环境打包、模型管理以及模型部署整个流程。

    MIflow的第一个核心功能: MIflow Tracking。

    它可以追踪基于学习的实验参数、模型的性能指标以及模型的各种文件。在做机器学习时实验时,通常需要记录一些参数配置以及模型的性能指标,而 MIflow 可以帮助用户免去手动记录的操作。它不仅能记录参数,还能记录任意文件,包括模型、图片、源码等。

    从上图左侧代码可以看到,使用 MIflow的 start_run可以开启一次实验;使用 log_param 可以记录模型的参数配置;使用log_metric 可以记录下模型的性能指标,包括标量的性能指标和向量的性能指标;使用 log_model 可以记录下训练好的模型;使用 log_artifact 可以记录下任何想要记录的文件,比如上图中记录下的就是源码。

    MIflow的第二个核心功能:MIflow Project 。

    它会基于代码规约来打包训练代码,并指定执行环境、执行入口以及参数等信息,以便复现实验结果。而且这种规范的打包方式能够更方便代码的共享以及平台的迁移。

    如上图, miflow-training 项目里包含两个很重要的文件,分别是 content.yaml 和 MLproject。content.yaml 文件中指定了 project 的运行环境,包含它所有依赖的代码库以及这些代码库的版本;MLproject 里指定了运行的环境,此处为conda.yaml,指定了运行的入口,即如何将 project 运行起来,入口信息里面包含了相应的运行参数,此处为 alpha 和 l1_ratio 两个参数。

    除此之外,MIflow 还提供了命令行工具,使得用户能够方便地运行 MIflow project 。比如打包好project 并将其上传到 git 仓库里了,用户只需要通过 mIflow run 指令即可执行project ,通过 -P 传入 alpha 参数。

    MIflow 的第三个核心功能: MIflow Models。

    它支持以统一的方式打包记录和部署多种算法框架模型。训练完模型后,可以使用 MIflow 的 log_model将模型记录下来,MIflow 会自动将模型进行存储(可存储到本地或 OSS 上),而后即可在 MIflow WebUI 上查看模型与代码版本、参数和metric 之间的关系,以及模型的存储路径。

    此外,MIflow 还提供了 API 用于部署模型。使用 mIflow models serve 部署模型后,即可使用 rest API 调用模型,得到预测的结果。

    MIflow 的第四个核心功能: MIflow Registry。

    MIflow 不但能够存储模型,还提供了 WebUI 以管理模型。WebUI 界面上展示了模型的版本和所处的阶段,模型的详情页显示了模型的描述、标签以及schema。其中模型的标签可以用于检索和标记模型,模型的schema 用于表示模型输入和输出的格式。此外,MIflow 还建立了模型以及运行环境、代码和参数之间的关系,即模型的血缘。

    MIflow 的四个核心功能很好地解决了机器学习工作流中的痛点,总结起来可以分为三个方面:

    1. MIflow Tracking 解决了机器学习实验难以追踪的问题。
    2. MIflow Project解决了机器学习工作流中没有标准的方式来打包环境导致实验结果难以复现的问题。
    3. MIflow Models 和Model Registry 解决了没有标准的方式来管理模型生命周期的问题。

    Demo演示

    接下来介绍如何使用 MIflow 和 DDI 搭建机器学习平台以管理机器学习的生命周期。

    在架构图中可以看到,主要的组件有 DDI 集群、OSS和 ECS 。DDI 集群负责做一些机器学习的训练,需要启动一台 ECS 来搭建 MIflow 的tracking server 以提供 UI 界面。此外还需要在 ECS 上安装 MySQL 以存储训练参数、性能和标签等元数据。OSS 用于存储训练的数据以及模型源码等。

    部署要点请观看演示视频:
    https://developer.aliyun.com/live/248988

    作者:李锦桂 阿里云开源大数据平台开发工程师

    原文链接

    本文为阿里云原创内容,未经允许不得转载。

    展开全文
  • -用于管理ML生命周期开源平台,包括实验,可重复性和部署。 -帮助您配置,组织,记录和重现机器学习实验的工具。 -机器学习仪表板,旨在简化原型实验。 -模型管理框架,可最大程度地减少与安排,运行,监视和管理...
  • 前言:cube是开源的云原生机器学习平台,目前包含特征平台,支持在/离线特征;数据源管理,支持结构数据和媒体标注数据管理;在线开发,在线的vscode/jupyter代码开发;在线镜像调试,支持免dockerfile,增量构建;...

    全栈工程师开发手册 (作者:栾鹏)
    一站式云原生机器学习平台


    前言:cube是开源的云原生机器学习平台,目前包含特征平台,支持在/离线特征;数据源管理,支持结构数据和媒体标注数据管理;在线开发,在线的vscode/jupyter代码开发;在线镜像调试,支持免dockerfile,增量构建;任务流编排,在线拖拉拽;开放的模板框架,支持tf/pytorch/spark/ray/horovod/kaldi等分布式训练任务;task的单节点debug,分布式任务的批量优先级调度,聚合日志;任务运行资源监控,报警;定时调度,支持补录,忽略,重试,依赖,并发限制,定时任务算力的智能修正;nni,katib,ray的超参搜索;多集群多资源组,算力统筹,联邦调度;tf/pytorch/onnx模型的推理服务,serverless流量管控,tensorrt gpu推理加速,依据gpu利用率/qps等指标的 hpa能力,虚拟化gpu,虚拟显存等服务化能力。 目前开源到github:https://github.com/tencentmusic/cube-studio

    katib超参搜索

    机器学习平台依赖Katib实现超参数搜索系统。katib提供了超参搜索和网络结构搜索,本文先介绍超参搜索。

    先来看看目前超参搜索解决方案的对比。katib是对 Google Vizier 的开源实现,Google Vizier 是 Google 内部的机器学习超参数训练系统的一个子系统。

    在这里插入图片描述

    katib组件

    在官方自带的界面上,用户使用起来是这样的。

    在这里插入图片描述

    在这个产品背后支撑的是下面的几个组件

    katib-ui: katib的web产品界面,也就是用户看到的这个web界面。注意由于katib包括较少的产品使用逻辑控制,所以没有专门后端来控制产品的使用。

    katib-mysql:元数据存储,目前只有一个table:observation_logs。会存储Trial和Experiment,以及Trial的训练指标。

    katib-db-manager:DB的grpc接口,它是数据库接口。提供了对Katib DB的操作(包括前端查询数据使用,以及业务容器sidecar采集日志后写入数据使用),同时充当Suggestion与Experiment之间的代理。

    katib-controller:katib定义的crd的控制器。是核心模块,如果在使用的过程中出现问题,基本都可以在这里排查。

    katib crd

    使用katib,主要就是使用好katib定义的几个crd。

    experiments.kubeflow.org:一次搜索实验,用户配置好目标函数,搜索空间,搜索算法以及worker任务

    suggestions.kubeflow.org:实验创建后,会根据搜索算法产生一个解决方案,可以称呼他为建议器或者学习器,用来迭代产生新的超参选值。

    trials.kubeflow.org:优化过程的一次迭代,根据给定的超参选值,进行业务代码计算,并输出计算效果。

    Job:负责一次迭代的任务。非分布式的k8s-job,分布式的tf-job/pytorch-job/xgb-job。

    experiments.kubeflow.org

    我们只需要掌握experiments.kubeflow.org,其他的自定义资源是由系统自己生成控制的。下面是一个配置示例

    apiVersion: kubeflow.org/v1alpha3
    kind: Experiment
    metadata:
      name:
      namespace: katib
    ExperimentSpec:
        parallelTrialCount:   并行测试数目
        maxTrialCount:        最大测试数目
        maxFailedTrialCount:  最大失败数目
        nas_config:  
        parameterspec:        要搜索的超参配置
        objective:            要搜索的目标函数配置
          goal: 0.99
          objectiveMetricName: xx
          type: maximize
        algorithm:            搜索算法
          algorithmName: random
        metricsCollectorSpec: 测试结果的采集方案
          collector:
            kind: StdOut
        trial_template:       测试用例的写法
          goTemplate:
            rawTemplate: 字符串格式,k8s 各种job资源,yaml书写格式的字符串形式。
    

    其中超参搜索算法支持:

    • Random Search
    • Tree of Parzen Estimators (TPE)
    • Grid Search
    • Hyperband
    • Bayesian Optimization
    • CMA Evolution Strategy

    采集系统主要以业务容器系统输出流或TensorFlowEvent的train目录为采集对象。

    超参的配置parameterspec类似下面。支持的超参类型只包含double、int、categorical三种。在网格搜索时需要填写step参数。

    parameters:
    - name: --lr
      parameterType: double   # type,支持double、int、categorical 三种
      feasibleSpace:
        min: "0.01"           # double、int类型必填min和max。max必须大于min
        max: "0.03"
        step: "0.01"          # grid 搜索算法时,需要提供采样步长,random时不需要
    - name: --num-layers
      parameterType: int
      feasibleSpace:
        min: "2"
        max: "5"
        step: "1"
    - name: --optimizer
      parameterType: categorical
      feasibleSpace:
        list:
        - sgd
        - adam
        - ftrl
    

    rawTemplate为字符串,不过需要包含超参作为输入参数。如下,这样才能将建议器计算出来的超参取值传递给job。

      trialTemplate:
        goTemplate:
            rawTemplate: |-
              apiVersion: batch/v1
              kind: Job
              metadata:
                name: {{.Trial}}
                namespace: {{.NameSpace}}
              spec:
                template:
                  spec:
                    containers:
                    - name: {{.Trial}}
                      image: docker.io/kubeflowkatib/mxnet-mnist
                      command:
                      - "python3"
                      - "/opt/mxnet-mnist/mnist.py"
                      - "--batch-size=64"
                      {{- with .HyperParameters}}
                      {{- range .}}
                      - "{{.Name}}={{.Value}}"
                      {{- end}}
                      {{- end}}
                    restartPolicy: Never
    

    katib架构和原理

    katib架构如下图所示

    在这里插入图片描述

    Experiment Controller:提供对Experiment CRD的生命周期管理,在katib-controller组件中。

    Trial Controller:提供对Trial CRD的生命周期管理,在katib-controller组件中。

    Suggestions:以Deployment的方式部署,用Service方式暴露服务,提供超参数搜索服务。目前有随机搜索,网格搜索,贝叶斯优化等。

    在这里插入图片描述

    Experiment本身是k8s的crd对象,k8s的所有crd记录都存储在k8s依赖的etcd数据库中。当一个Experiment被创建的时候,Experiment Controller会先通过Katib Manager在Katib DB中创建一个Experiment对象,并且打上Finalizer表明这一对象使用了外部资源(etcd数据库)。随后,Experiment Controller会根据自身的状态和关于并行的定义,通过Katib Manager提供的GRPC接口,让Manager通过 Suggestion提供的GRPC接口获取超参数取值,然后再转发给Experiment Controller。在这个过程中,Katib Manager是一个代理的角色,它代理了Experiment Controller对Suggestion的请求。拿到超参数取值后,Experiment Controller会根据Trial Template和超参数的取值,构造出Trial的定义,然后在集群中创建它。

    Trial被创建后,与Experiment Controller的行为类似,Trial Controller同样会通过Katib Manager在Katib DB中创建一个Trial对象。随后会构造出期望的Job(如batchv1 Job,TFJob,PyTorchJob等)和Metrics Collector Job,然后在集群上创建出来。这些Job运行结束后,Trial Controller会更新Trial的状态,进而Experiment Controller会更新Experiment的状态。 然后Experiment会继续下一轮的迭代。之前的Trial已经被训练完成,而且训练的指标已经被收集起来了。Experiment会根据配置,判断是否要再创建新的Trial,如果需要则再重复之前的流程。

    python sdk

    了解了experiments.kubeflow.org资源的格式和架构流程,kubeflow还提供了katib的python sdk,可以让我们在代码中更加方便的生成创建experiments。代码中只是按照yaml的层次封装了Experiment对象,并且提供了create_experiment函数直接创建自定义对象。

    # Experiment 跑实例测试
    experiment = V1alpha3Experiment(
        api_version="kubeflow.org/v1alpha3",
        kind="Experiment",
        metadata=V1ObjectMeta(name="tfjob-example",namespace="default"),
        spec=V1alpha3ExperimentSpec(
             algorithm = algorithm,               # 自己定义
             max_failed_trial_count=3,
             max_trial_count=12,
             metrics_collector_spec= metrics_collector_spec,      # 自己定义
             objective = objective,               # 自己定义
             parallel_trial_count=4,
             parameters = parameters ,             # 自己定义
             trial_template = trial_template ,     # 自己定义
        )
    )
    
    kclient = kc.KatibClient(config_file=None)
    kclient.create_experiment(experiment,your_namespace)
    

    katib运行跟踪

    通过python sdk或者kubectl或者katib ui创建了experiment,正常情况就不需要我们关心了,只需要我们进行debug即可。我们可以通过k8s dashboard查看pod运行情况,或者通过katib ui查看当前系统experiment的采集结果。

    在这里插入图片描述

    在创建experiment后,会先启动Suggestions容器和service。Suggestions的名称为experiment名称+搜索算法名称。Suggestion会根据用户配置的超参取值范围和搜索算法迭代的产生参数可取值,并发产生执行job。(注意一个执行job并不一定是一个pod,比如一个tfjob可能是多个worker容器)。每个执行job的pod会包含业务容器和采集容器,像下面

    在这里插入图片描述

    我们可以通过查看job的配置来理解运行机制。

    在这里插入图片描述

    这是一个执行pod的启动配置,可以看到业务容器的超参–lr,–num-layers,–optimizer都已经赋予了选值,并且在原有参数的基础上添加了参数1>/var/log/katib/metric.log 2>&1,也就是说会将业务容器的系统输出流重定向到metric.log文件。并且添加了启动命令 echo completed > /var/log/katib/$$$$.pid,来实现sidecar容器的完成通知。

    在采集容器中,将metric文件的地址和业务容器的名称,要匹配的目标指标名,以及katib manager服务的信息都做为参数传递给采集容器。采集容器会跟踪metric.log文件,跟踪日志信息,匹配包含目标指标名,匹配符合一定规则的日志记录行,将该行的数据提取出来,然后通过katib manager 写入到db的observation_logs表中。observation_logs表记录的格式示例如下

    在这里插入图片描述

    所以这就要求业务容器在打印日志的时候希望被采集的日志内容的书写格式要符合一定规范。用户代码需要进行日志输出(需要包含时间,目标函数名=目标值)

    可以按照下面的格式来编写

    import logging
    # Use this format (%Y-%m-%dT%H:%M:%SZ) to record timestamp of the metrics
    # 放在全局最外层
    logging.basicConfig(
        format="%(asctime)s %(levelname)-8s %(message)s",
        datefmt="%Y-%m-%dT%H:%M:%SZ",
        level=logging.DEBUG)
    ...
    def fun_name():
        ...
        logging.info('Validation-accuracy=%s'%str(random.random()))
        ...
    ...
    

    那打印的日志应该像下面这样,比如目标函数为Validation-accuracy。

    在这里插入图片描述

    当一次trial的多次迭代日志被采集后,那么一次trial中迭代的时间和目标函数值就存储在数据库中了,那么该次trial的绘图就可以在katib ui上看到了,比如下图(下图是包含两个目标函数的情况)

    在这里插入图片描述

    当多次trial执行完成,我们就可以在katib ui上看到trials的运行情况

    在这里插入图片描述

    并且实时能看到已经完成的trials的参数取值和目标函数值。当整个experiment完成,我们就可以在ui上看到最终的取值效果了

    在这里插入图片描述

    我们可以在折线图或者table list中根据目标函数筛选目标函数最大或者最小时对应的超参取值。

    展开全文
  • 10必备的机器学习开源工具

    千次阅读 2019-08-13 09:46:34
    机器学习十大开源工具 机器学习是未来。但机器会灭绝人类吗? 这应该是一个牵强附会的想法。 作为机器学习开发人员,您一定希望成功实现目标。这就是用于机器学习开源工具的用武之地。 机器学习开源社区是...
  • 还包括一个Jupyter笔记本,以帮助解释受监督机器学习生命周期的每个步骤(与该项目有关)。 总览 该应用程序包含三个主要组件: Jupyter笔记本演示从头到尾如何训练网络钓鱼分类器。 CLI实用程序训练分类器并以...
  • ForML最初是一个开源项目,旨在应对数据科学研究向生产的不断痛苦的过渡。尽管有其他项目试图解决此问题,但它们通常要么是通用数据处理系统,但是其级别太低而无法提供现成的ML生命周期例程;另一方面,它
  • 机器学习工作流程 机器学习(ML)通常需要使用广泛的数据集、数据预处理步骤和算法逻辑进行实验,以构建最优指标的模型。模型构建成功后,还需要将其部署到生产系统,监控其效果和性能,并根据新数据不断对其进行
  • 机器学习、数据科学与金融行业 系列十:机器学习平台(上) ...上面所提及的伟大的企业都属于互联网行业,其实平台化思维很早就诞生了,例如,举一个大家都熟悉的企业:麦当劳,其实它可以被认为是帮助其他人提供...
  • 2018年10月10日,NVIDIA发布了款针对数据科学和机器学习的GPU加速平台,该平台已为多行业领先者所采用,并能帮助超大规模公司以前所未有的速度分析海量数据并进行精准的业务预测。 RAPIDS™ 开源软件帮助数据...
  • 机器学习生命周期开源平台 自动化机器学习工具 数据机器人 :与KNIME一样,RapidMiner通过可视化编程进行操作,并能够操纵,分析和建模数据。 RapidMiner通过开源平台进行数据准备,机器学习和模型部署,使数据...
  • Databricks文档01----Azure Databricks初探

    千次阅读 2022-03-20 13:51:03
    Azure Databricks一个已针对 Microsoft Azure 云服务平台进行优化的数据分析平台。 Azure Databricks 提供了三种用于开发数据密集型应用程序的环境: - Databricks 数据科学工程 - Databricks 机器学习 - ...
  • MLflow机器学习工作流管理使用教程

    千次阅读 2019-11-28 12:25:48
    机器学习不是一个单向的pipeline,而是一个迭代的循环。其中包括四大部分:数据预处理、模型训练、模型部署、数据更新。 行业痛点: 数据预处理和模型训练都涉及到参数调整,不同参数对应的代码、不同参数对应的...
  • 策划编辑 | Natalie作者 | Matei Zaharia译者 | 无明编辑 | VincentAI 前线导读:在昨天开幕的 Spark+AI Summit ...MLflow,这是一个能够覆盖机器学习全流程(从数据准备到模型训练到最终部署)的新平台,旨在为数据...
  • 1.面向非程序员的开源机器学习工具对于没有编程背景和技术背景的人来说,机器学习似乎很复杂。这是一个广阔的领域,可以想象,初次接触机器学习有多令人害怕。一个没有编程经验的人能在机器学习领域获得成功吗?事实...
  • 随着人们生活水平提高,大家不仅关注...其中,乳腺癌可能没有任何先兆,是一个隐形杀手。 有不少人的乳腺癌是没有任何征兆的,有可能只是发现肿块但没有任何不舒服的地方,但一检查就确诊乳腺癌的情况不在少数,更甚
  • 腾讯云机器学习平台TI-ONE

    千次阅读 2020-01-06 17:30:14
    据《中国ICT人才生态白皮书》研究分析,2018年底,我国人工智能人才缺口已突破100万,到2020年,这数字将攀升到226万。...作为该计划中唯一的机器学习平台,腾讯云智能钛TI-ONE走进高校课堂,受到了老师和同学们的...
  • Hands-on Tutorials 实践教程Learn to train, tune, deploy and monitor models学习训练、调整、部署和监控模型Photo by 图片由Modestas Urbonas 莫德斯塔斯 · 乌尔博纳斯 on 打开UnsplashSupervised machine ...
  • 机器学习平台的简单调研

    千次阅读 2022-03-29 14:24:16
    机器学习的任务过程中,可能面对以下几问题: 随着项目体量增加,数据不足时,需要相关团队来负责数据采集、标注和清洗。然而,采集数据本身太复杂以至于需要多层级的组织来完成,例如当采集的数据量暴增时又...
  • 摘要:在过去的几年中,计算机不断增强的处理能力推动了机器学习的进步。算法越来越多地利用并行性,并依赖分布式训练来处理大量数据。然而,随之而来的是增加数据和训练的需求,这对管理和利用大规模计算资源的软件...
  • Datawhale干货作者:Aliaksei Mikhailiuk,编辑:机器之心无论你在创业还是在做学术研究,这些工具都将使你的技能更上层楼。学术界在推进技术方面发挥了巨大作用,但...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,557
精华内容 2,622
关键字:

databricks出品的mlflow:一个完整机器学习生命周期的开源平台-python开发