架构师机器学习运营 (MLOps) 指南

MLOps,是机器学习运维的简称,是一套旨在解决构建模型并将模型投入生产的工程师的特定需求的实践和工具集。一些组织从一些内部工具开始,在每次实验后对数据集进行版本控制,并在每次训练时期后对模型进行检查点。另一方面,许多组织选择采用具有实验跟踪、协作功能、模型服务功能,甚至用于处理数据和训练模型的管道功能的正式工具。
为了为您的组织做出最佳选择,您应该了解行业领先的 MLOps 工具提供的所有功能。如果您选择内部开发路线,您应该了解您放弃的功能。对于需要快速行动且可能没有时间评估新工具的小型团队来说,内部开发方法很好。如果您选择实施第三方工具,那么您将需要选择最符合您的组织工程工作流程的工具。这可能很棘手,因为当今的顶级工具在方法和功能方面差异很大。无论您选择什么,您都需要能够处理大量数据并以高性能方式提供训练集的数据基础设施。对模型进行检查点和对大型数据集进行版本控制需要可扩展的容量,如果您使用的是昂贵的 GPU,那么您将需要高性能的基础设施来充分利用您的投资。
在这篇文章中,我将介绍架构师无论选择哪种方法或工具都应该考虑的功能列表。这个功能列表来自我对当今三大 MLOps 供应商的调查和实验 - KubeFlow、MLflow 和 MLRun。对于选择从内部解决方案开始的组织,我将介绍一个可以扩展和执行的数据基础设施。(剧透警报 - 您这里只需要 MinIO。)在谈到第三方工具时,我注意到我研究过的供应商存在一种模式。对于选择采用 MLOps 工具的组织,我将介绍这种模式,并将它与我们的 现代数据湖参考架构 联系起来。
在深入探讨功能和基础设施需求之前,让我们更好地了解 MLOps 的重要性。为此,将模型创建与传统应用程序开发进行比较会有所帮助。
模型与应用程序的区别
传统的应用程序开发,比如实施一个为应用程序添加新功能的新微服务,从审查规范开始。首先设计新的数据结构或对现有数据结构的更改。一旦开始编码,数据的设计就不应该改变。然后实现服务,编码是此过程中的主要活动。单元测试和端到端测试也编码。这些测试证明代码没有错误,并正确实现了规范。它们可以通过 CI/CD 管道在部署整个应用程序之前自动运行。
创建模型并对其进行训练则有所不同。第一步是理解原始数据和所需的预测。ML 工程师确实需要编写一些代码来实现他们的神经网络或设置算法,但编码不是主要活动。主要活动是重复实验。在实验过程中,数据的設計、模型的設計以及使用的参数都会改变。在每次实验后,都会创建指标来显示模型在训练过程中的表现。还生成指标以确定模型相对于验证集和测试集的性能。这些指标用于证明模型的质量。您应该在每次实验后保存模型,并且每次更改数据集时,也应该保存它们。一旦模型准备被纳入应用程序,它必须被打包和部署。
总而言之,MLOps 之于机器学习,如同 DevOps 之于传统软件开发。两者都是旨在改进工程团队(Dev 或 ML)和 IT 运维团队(Ops)之间协作的一套实践和原则。目标是使用自动化简化开发生命周期,从规划和开发到部署和运维。这些方法的主要优势之一是持续改进。
让我们深入了解 MLOps,看看需要考虑的具体功能。
10 个需要考虑的 MLOps 功能
实验跟踪和协作是与 MLOps 最相关的功能,但当今更现代的 MLOps 工具可以做更多的事情。例如,一些工具可以为您的实验提供运行时环境。其他工具可以在模型准备好集成到应用程序后对其进行打包和部署。
以下是在当今 MLOps 工具中找到的功能的超集。此列表还包括其他需要考虑的事项,例如支持和数据集成。
- 来自主要参与者的支持 - MLOps 技术和功能不断发展。您希望有一个由主要参与者支持的工具(Google、Databricks 或 McKinsey and Company 分别支持 Kubeflow、MLflow 和 MLRun),确保持续开发和改进。举一个具体的例子,当今许多流行的工具是在大型语言模型 (LLM) 出现之前创建的;因此,许多工具正在添加新功能来支持生成式 AI。
- 现代数据湖集成 - 实验会生成大量结构化和非结构化数据。与现代数据湖(或数据湖仓库)完美集成的 MLOps 工具会将非结构化数据存储在数据湖中(这直接是 MinIO),而结构化数据会进入数据仓库。不幸的是,许多 MLOps 工具在开放式表格格式出现之前就已经存在,这些格式催生了现代数据湖,因此大多数工具都会有针对其结构化数据的单独解决方案。这通常是一个开源关系数据库,您的数据基础设施需要支持。关于非结构化数据(数据集和模型检查点),行业内所有主要工具都使用 MinIO,因为我们自 2014 年以来一直存在。
- 实验跟踪 - MLOps 工具最重要的功能可能是跟踪每个实验的数据集、模型、超参数和指标。实验跟踪还应促进可重复性 - 如果您在五次实验前获得了理想的结果,而随后的实验降低了模型的性能,那么您应该能够使用您的 MLOps 工具返回并获取产生理想结果的精确超参数和数据集特征。
- 促进协作—MLOps 工具的重要组成部分是用于呈现每次实验结果的门户或 UI。该门户应该对所有团队成员开放,以便他们可以查看彼此的实验并提出建议。一些 MLOps 工具具有花哨的图形功能,允许创建自定义图表来比较来自实验的结果。
- 模型打包 - 此功能将模型打包,使其可从其他编程环境访问 - 通常作为微服务。这是一个很好的功能。训练后的模型不过是一个序列化对象。许多组织可能已经解决了这个问题。
- 模型服务 - 一旦模型被打包为服务,此功能将允许自动将包含该模型的服务部署到组织的正式环境中。如果您有一个 成熟的 CI/CD 管道 能够跨环境管理所有软件资产,您将不需要此功能。
- 模型注册表 - 模型注册表提供对您的 MLOps 工具当前管理的所有模型的视图。毕竟,创建生产级模型是所有 MLOps 的目标。此视图应显示已部署到生产环境的模型以及从未投入生产的模型。已投入生产的模型应进行标记,以便您还可以确定它们部署到的应用程序或服务的版本。
- 无服务器函数 - 一些工具提供功能,允许对代码进行注释,以便将函数或模块部署为容器化服务,以便在集群中运行实验。如果您决定使用此功能,那么请确保所有工程师都熟悉此技术。这可能需要一些学习曲线 - 具有 DevOps 背景的工程师会更容易上手,而以前学习机器学习但编码经验很少的工程师则会感到困难。
- 数据管道功能 - 一些 MLOps 工具旨在提供完整的端到端功能,并具有专门用于构建数据管道的功能,这些管道用于检索原始数据、处理数据和存储干净数据。管道通常被指定为 有向无环图 (DAG) - 一些工具还具有调度功能。与无服务器函数结合使用时,这可以成为开发和运行数据管道的强大低代码解决方案。如果您已经在使用管道或工作流程工具,您将不需要此功能。
- 训练管道功能 - 这类似于数据管道,但训练管道从数据管道停止的地方开始。训练管道允许您调用数据访问代码、将数据发送到您的训练逻辑,并对数据工件和模型进行注释,以便它们被自动保存。与数据管道类似,此功能可以与无服务器函数结合使用以创建 DAG 并安排实验。如果您已经在使用分布式训练工具,那么您可能不需要此功能。可以从训练管道启动分布式训练,但这可能过于复杂。
MLOps 和存储
在查看了传统应用程序开发与机器学习之间的区别之后,应该清楚的是,要成功进行机器学习,您需要某种形式的 MLOps 和一个能够提供性能和可扩展容量的数据基础设施。
如果您需要快速启动项目并且没有时间评估正式的 MLOps 工具,那么使用自制解决方案是可以的。如果您采用这种方法,好消息是您只需要 MinIO 作为数据基础设施。MinIO 与 S3 兼容,因此如果您从其他工具开始并使用 S3 接口访问数据集,那么您的代码就可以正常工作。如果您刚开始使用,那么您可以使用我们的 Python SDK,它也与 S3 兼容。考虑使用 MinIO 的企业版,它具有缓存功能,可以极大地加快训练集的数据访问速度。查看 为什么 AI 建立在对象存储之上,我们深入探讨了 MinIO 如何以及为何用于支持 MLOps。选择自制解决方案的组织仍然应该熟悉上面描述的十项功能。您最终可能会超出自制解决方案的能力范围,而最有效的方法是采用 MLOps 工具。
对于拥有多个 AI/ML 团队创建不同类型模型的大型组织来说,采用第三方 MLOps 工具是最好的选择。功能最多的 MLOps 工具不一定是最好的工具。查看上面的功能,并记下您需要的功能、您目前作为现有 CI/CD 管道一部分的功能,以及您不想要的功能,这将有助于您找到最合适的工具。MLOps 工具对大量的 PB 级对象存储有着极大的需求。它们中的许多会自动将您的数据集与每次实验一起版本化,并在每次 epoch 后自动检查点您的模型。再次,MinIO 可以提供帮助,因为容量不是问题。类似于自制解决方案,考虑使用 MinIO 的企业版。缓存功能在为存储桶配置后会自动生效,因此即使 MLOps 工具没有请求使用缓存,MinIO 也会自动缓存像训练集这样经常访问的对象。
未来愿望清单
如今市场上的许多 MLOps 工具使用开源关系型数据库来存储模型训练过程中生成的有结构数据,这些数据通常是指标和超参数。不幸的是,这将是一个需要您组织支持的新数据库。此外,如果一个组织正在转向现代数据湖 (或数据湖仓),则不需要额外的关系型数据库。对主要的 MLOps 供应商来说,使用基于 OTF 的数据仓库来存储他们的结构化数据将是不错的选择。
所有主要的 MLOps 供应商都在后台使用 MinIO 来存储非结构化数据。不幸的是,它通常作为 MLOps 工具整体安装的一部分,部署为单独的小实例。此外,它通常是 MinIO 的旧版本,这违背了我们始终运行 最新版本 的理念。对于现有的 MinIO 客户来说,允许 MLOps 工具使用现有安装中的存储桶将是一件好事。对于 MinIO 的新客户,MLOps 工具应该支持 MinIO 的最新版本。安装完成后,MinIO 也可以用于您组织中超出 MLOps 资源的目的,即任何需要对象存储优势的地方。
结论
在这篇文章中,我通过调查 MLOps 功能和支持这些功能所需的数据基础设施,介绍了架构师的 MLOps 指南。在高层次上,组织可以构建自制解决方案,也可以部署第三方解决方案。无论选择哪种方向,了解当今行业中可用的所有功能都很重要。自制解决方案可以让您快速启动项目,但您很快就会超出解决方案的能力范围。了解您的特定需求以及 MLOps 如何与现有 CI/CD 管道协作也很重要。许多 MLOps 工具功能丰富,包含您可能永远不会使用或已经在 CI/CD 管道中拥有的功能。
要成功实施 MLOps,您需要一个能够支持它的数据基础设施。在这篇文章中,我为那些选择自制解决方案的人提供了一个简单的解决方案,并描述了对第三方工具以及它们所需的资源的期望。
我以对 MLOps 工具进一步发展的愿望清单作为结尾,这些发展将有助于它们更好地与现代数据湖集成。
有关使用现代数据湖来支持 AI/ML 工作负载的更多信息,请查看 现代数据湖中的 AI/ML.
如果您有任何疑问,请务必在 Slack 上与我们联系!