每个尝试过机器学习开发的人都知道这有多困难。 除了软件开发中的标准问题外,机器学习 (ML) 开发还引入了许多额外的障碍。
数以百计的开源工具可用于帮助 ML 生命周期的每个阶段,从数据准备到模型训练。
与传统的软件开发不同,当团队为每个步骤选择一个工具时,对于 ML,您通常希望探索每个可用的工具(例如算法),看看它是否能改善结果。
因此,ML 开发人员必须使用和生成数百个库。
机器学习算法包含数千个可自定义的参数,无论您是单独工作还是团队合作,都很难确定每个实验中哪些参数、代码和数据进入了生成模型。
如果没有适当的监控,团队通常很难让相同的代码再次运行。 无论您是将培训代码转移给工程师以供生产使用的数据科学家,还是要回到以前的工作来诊断问题,ML 工作流程的撤退步骤都至关重要。
由于必须使用众多部署方法和环境(例如,REST 服务、批处理推理或移动应用程序),将模型迁移到生产环境可能很困难。 没有将模型从任何库移动到任何这些工具的通用方法,因此每个新部署都会带来风险。
由于这些问题,很明显 ML 开发必须显着改进才能像传统软件开发一样稳定、可预测和广泛使用。
机器学习挑战
- 有很多不同的工具。 数以百计的软件解决方案可用于帮助机器学习生命周期的每个阶段,从数据准备到模型训练。 此外,与传统的软件开发不同,当团队为每个步骤选择一个工具时,在机器学习 (ML) 中,您通常希望探索每个可用的工具(例如算法),看看它是否能改善结果。 因此,ML 开发人员必须使用和生成数百个库。
- 很难跟踪实验。 机器学习算法包含数千个可自定义的参数,无论您是单独工作还是团队合作,都很难确定每个实验中哪些参数、代码和数据进入了生成模型。
- 很难实现机器学习。 由于必须使用众多部署方法和环境(例如,REST 服务、批处理推理或移动应用程序),将模型迁移到生产环境可能很困难。 没有将模型从任何库移动到任何这些工具的通用方法。 因此,每个新部署都会带来风险。
什么是 流量?
MLflow 是机器学习生命周期的开源平台。 它基于开放接口概念,提出了许多基本抽象,允许当前的基础设施和机器学习算法轻松地与系统集成。
这意味着,如果您是想要使用 MLflow 但正在使用不受支持的框架的开发人员,那么开放式界面设计使得集成该框架并开始使用该平台变得相对简单。 在实践中,这意味着 MLflow 旨在与任何 机器学习 图书馆或语言。
此外,MLflow 促进了可重复性,这意味着相同的训练或生产机器学习代码旨在独立于环境(无论是在云中、本地工作站还是笔记本电脑中)以相同的结果运行。
最后,MLflow 是为可扩展性而构建的,因此它可以被一小群数据科学家以及拥有数百名机器学习从业者的大公司使用。
MLflow 与任何机器学习库、算法、部署工具或语言兼容。 它还具有以下优点:
- 旨在与任何云服务一起运行。
- 使用 Apache Spark 扩展到海量数据。
- MLflow 兼容多种开源机器学习框架,包括 Apache Spark、 TensorFlow及 SciKit-学习.
如果您已经有代码,可以使用 MLflow。 您甚至可以在企业之间共享您的框架和模型,因为它是 开放源码.
MLflow 组件:它们是如何工作的?
MLflow 是一个免费的开源平台,用于管理 ML 生命周期,其中包括实验、再现性、部署和单一模型注册表。 目前,MLflow 有四个组件:
1. MLflow追踪
我将从 MLflow Tracking 开始。 MLflow 支持收集与集中式培训元数据跟踪存储库相关联的各种基本概念。 第一个概念是影响模型性能的关键超参数或配置旋钮的集合。 使用 MLflow 的 API 和集中式跟踪服务可以保留所有这些。
用户还可以记录性能数据,以深入了解他们的机器学习模型是否成功。 此外,为了可重复性,MLflow 允许用户通过与 Git 紧密集成来记录用于创建模型的特定源代码及其版本,以将每个模型绑定到特定的提交哈希。
MLflow 可用于记录工件,这些工件是任意文件,包括训练、测试数据和模型本身以实现可重复性。
这意味着,如果我是一名刚刚训练过模型的开发人员,我可以将其保存到集中跟踪服务中,我的一位同事可以稍后加载它,然后继续训练和试验或生产该模型以满足特定需求.
在执行机器学习代码并随后查看结果时,跟踪是一种 API,可让您记录参数、代码版本、指标和输出文件。 它是用 Python、R 和 Java 以及其他语言编写的。 它也可以作为 REST API 访问,可用于在其之上构建应用程序。
主要特性
- 许多开发人员在他们的本地 PC 上使用 MLflow,其中后端和工件存储共享磁盘上的一个目录。
- 许多用户还使用与 SQLAlchemy 兼容的数据库 SQLite 在其本地 PC 上运行 MLflow。
- MLflow 还支持分布式架构。 跟踪服务器、后端存储和工件存储都托管在这些不同的服务器上。
- 如果运行由 MLflow 项目启动,则使用 git commit 哈希。 MLflow Python、R、Java 和 REST API 可用于记录数据以运行。
更多信息,您可以查看官方 文件.
2. MLFlow 项目
在我们了解了跟踪组件之后,我想谈谈 MLflow 项目,它是用于模型训练会话的可重复打包结构,无论执行上下文如何。
企业使用广泛的机器学习培训技术,但他们也在不同的环境中使用这些培训工具。 例如,他们可能正在云端、本地 PC 或笔记本电脑上执行训练代码。
这导致了机器学习结果难以复制的问题。 通常,相同的训练代码不会在两个不同的位置执行或产生相同的结果。
MLflow 提供的解决方案是一个自包含的训练代码项目定义,其中包括所有机器学习训练代码,以及它的版本库依赖项、设置以及训练和测试数据。
MLflow 通过清楚地描述机器学习训练过程的整套要求来确保跨执行上下文的可重复性。 它通过安装所有这些库并完成代码运行的相同系统状态来实现这一点。
MLflow 项目只不过是一个目录。 它是一个目录,其中包含训练代码、库依赖定义和训练会话所需的其他数据,以及此可选配置文件。
可以通过多种方式定义这些库要求。 例如,用户可以提供 YAML 格式的 anaconda 环境规范来列出他们的训练代码库要求。 MLflow 将在容器内执行训练代码。 在这种情况下,它们还可以包含 Docker 容器。
最后,MLflow 具有用于运行这些项目以及 Python 和 Java API 的命令行界面 (CLI)。 这些项目可以在用户的本地系统上运行,也可以在各种远程设置中运行,例如 Databricks 作业调度程序和 Kubernetes。 MLflow 项目允许您以可重复和可重用的方式打包数据科学代码,主要基于标准。
项目组件包括一个 API 以及用于管理项目的命令行实用程序。 这些功能保证了项目可以链接在一起形成机器学习过程。
主要特性
- MLflow 支持项目环境,包括 Docker 容器环境、Conda 环境和系统环境。
- 任何 Git 存储库或本地目录都可以被视为 MLflow 项目; 默认情况下; 你可以使用任何外壳或 Python脚本 作为项目入口点的目录。
- 可以使用 Docker 容器捕获非 Python 依赖项,例如 Java 库。
- 您可以通过将项目文件添加到项目的根目录来更好地控制 MLflow 项目,该文件是 YAML 语法的文本文件。
更多信息,您可以查看官方 文件.
3. MLflow 模型
现在,我想讨论 MLflow 模型,一种支持广泛生产环境的通用模型格式。 MLflow 模型的原因现在与项目的原因非常相似。
同样,我们看到模型可以使用多种工具生成,但它们也可以在各种情况下生成或部署,而不是训练环境。
这些设置包括用于实时服务的工具,例如 Kubernetes 或 Amazon SageMaker,以及流式和批处理评分,例如 Spark。 此外,一些企业可能会选择将模型部署为在预配置的云实例上运行的 RESTful Web 服务。
MLflow 模型和项目一样,是一个目录结构。 它包括一个配置文件,这一次是一个序列化的模型工件,而不是训练代码。 它还包括这组依赖项,以作为项目的可重复性。 这一次,我们将在 Conda 环境的上下文中研究评估依赖关系。
此外,MLflow 包括模型生成工具,用于从一系列流行的框架中以 MLflow 格式序列化模型。 最后,MLflow 添加了部署、API,用于生产任何 MLflow 模型并将其连接到一系列服务,这些 API 可通过 Python、Java、R 和 CLI 格式访问。
模型是具有标准结构的组件,用于打包模型,可以被下游工具(例如推理服务器或 Databricks 批量推理平台。 在打包模型进行生产时,此组件可节省数小时的定制代码。
MLflow 模型是将机器学习模型打包成各种形式的标准,称为“风味”。 MLflow 提供了很多工具来帮助您部署各种类型的模型。 每个 MLflow 模型都保存为一个目录,其中包含任意文件以及一个 ML 模型描述符文件,其中包含可以使用它的风格列表。
主要特性
- MLflow 的所有内置部署工具都提供了多种“标准”风格,例如解释如何将模型作为 Python 函数运行的“Python 函数”风格。
- 每个 MLflow 模型都包含一个包含任意文件的目录,以及位于该目录根目录的 ML 模型文件,该文件定义了模型的多种风格。
- 存储模型时,MLflow 允许您指定包含模型依赖项的 Conda 环境参数。 如果未指定 Conda 环境,则会构建基于模型风格的默认环境。 之后,Conda 环境存储在 conda.yaml 中。
更多信息,您可以查看官方 文件.
4. MLflow模型注册表
模型注册表是学习机器学习 (ML) 模型的存储库。 模型注册表由 API 和一个基于 Web 的应用程序组成,用于作为一个团队在各个阶段维护模型。 Model Lineage、Model Versioning、Easy Stage Transition 和 Annotation 只是 Model Registry 中提供的一些功能。
除了模型本身之外,模型注册表还包含有关用于构建模型的数据和训练任务的信息(元数据)。 跟踪这些必需的输入以创建 ML 模型的沿袭至关重要。 在这方面,模型注册表的功能类似于传统软件的 版本控制 系统(例如,Git、SVN)和工件存储库(例如,Artifactory、PyPI)。
模型注册表是一个框架,允许数据科学家和机器学习工程师发布、测试、监控、管理和分发他们的模型,以便与其他团队合作。 从本质上讲,一旦您完成了测试阶段并准备好与团队和利益相关者分享您的发现,就会使用模型注册表。
MLflow 模型注册表提供 API 和用户界面,用于从中心位置管理模型及其生命周期。 模型沿袭、模型版本控制、注释和阶段转换都可以通过注册表获得。
在 MLflow 中,注册模型是具有唯一名称和元数据、模型版本、过渡阶段和模型沿袭的模型。 一个或多个模型版本可以在注册模型中找到。 新模型在注册表中注册时被视为版本 1。 以下版本将添加到具有相同名称的任何新模型中。
您可以随时将一个步骤分配给任何模型版本。 但是,必须在已正式指定的 MLflow 阶段下分配阶段,例如登台、生产和存档。 模型版本可以从一个阶段过渡到另一个阶段。
MLflow 允许您使用 markdown 来注释顶级模型和每个特定版本。 您可以包括描述以及其他相关信息,例如算法解释、方法和使用的数据集。
主要特性
- 要在托管您自己的 MLflow 服务器时通过 UI 或 API 访问模型注册表,您必须使用数据库支持的后端存储。
- 模型注册表也可以通过 MLflow 模型风格或 MLflow 客户端跟踪 API 接口访问。 例如,您可以在 MLflow 实验运行期间或在所有实验运行之后注册模型。
- 不是每个人都会开始使用 MLflow 训练他们的模型。 因此,您可能在使用 MLflow 之前已经训练了一些模型。 您只需将存储的模型注册到模型注册表,而不是重新训练模型。
更多信息,您可以查看官方 文件.
结论
MLflow 是一个优秀且不断发展的 ML 生命周期工具。 您可以将它与您当前的工具和平台一起使用。
它支持多种编程语言,包括 Python、Java 和 R。由于其用户友好的设计,您还可以快速跟踪、保存和比较不同的模型版本。
试试 MLflow,让我们知道您的体验!
发表评论