Last chance! 50% off DataCamp Premium
Sale ends in
越来越多的公司希望将机器学习(ML)融入其产品,或用 ML 优化流程。因此,了解如何在传统软件的同时驾驭其复杂性,比以往任何时候都更重要。
DevOps 的引入是为了解决软件开发中的挑战。其目标是打破软件开发团队与运维团队之间的壁垒,从而更快地交付新功能,并更平稳地将这些功能发布到生产环境中。
MLOps 在这些原则之上构建,但面向 ML 的独特挑战,例如规模庞大且快速演变的数据集、需要跟踪和版本化的模型,以及为应对数据漂移或概念漂移等问题而进行的监控。
尽管两者共享共同原则,但在关注点、工作流和工具方面差异显著。
本文将探讨 DevOps 与 MLOps,突出其相似与不同之处,以及在何种情境下采用哪种方法。我们还将了解典型工作流,以及在这些工作流的不同阶段应使用哪些工具。
让我们开始吧!
DevOps 是一种软件工程方法论,旨在加速软件的开发与交付过程。其主要目标是提升开发与运维团队之间的协作,弥合这两种传统职能之间的鸿沟,从而实现更快、更可靠的软件交付。
因此,DevOps 力求打造协作文化,并尽可能实现自动化,以提升整体效率与新功能的交付速度。
如今,包括 Meta、Amazon 在内的大型公司,正是借助 DevOps 才能做到每日交付新功能。
如果您希望入门该领域,推荐学习 Introduction to DevOps 课程。
DevOps 的主要目标包括:
DevOps 的核心组件包括:
业界已有一系列标准工具可用于实现 DevOps 的核心组件。以下是最受欢迎的一些:
MLOps 在共享自动化目标的同时,扩展了 DevOps 的原则。MLOps 是一系列实践,旨在持续、可靠且高效地在生产环境中部署与维护机器学习。
关键在于其关注生产环境中的机器学习,而非在本地机器上进行的小型实验训练的模型。
MLOps 可以对机器学习项目生命周期的各个阶段实现自动化与流程化。

机器学习项目生命周期。图片来源:作者
但我们为何首先需要 MLOps?为何应投入额外精力来搭建清晰的工作流与流程?坦率讲:前期确实需要大量额外投入,开发者可能会倾向于忽略它,以尽快将模型部署到生产。然而,这种做法会引入风险。
与传统软件开发一样,早期忽视清晰流程与最佳实践,会导致复杂性不断增加、可维护性随时间降低。
由于需要管理数据依赖、不断演化的模型与反馈回路等独特挑战,这一问题在 ML 系统中尤为突出。
正如具有影响力的论文“Hidden Technical Debt in Machine Learning Systems”所强调的,机器学习系统以不同于传统软件的方式累积技术债务。
因此,若不遵循 MLOps 原则,后期对失控的 ML 系统进行重构的成本,往往会超过从一开始就构建稳健工作流所需的投入。
如果您希望进一步了解该领域,推荐优秀课程 MLOps Concepts。
MLOps 的主要目标包括:
接下来看看 MLOps 的核心组件:
MLOps 领域仍在快速发展。然而,用于实现核心组件的业界标准已然存在:
尽管 MLOps 构建于 DevOps 之上,因此有诸多重叠之处,但二者在关注点、所管理的工件、生命周期、工具与团队结构上存在差异。这主要源自机器学习工作流的独特挑战与需求。
在接下来的小节中,我将聚焦两者在特定方面的差异。
DevOps 专注于软件应用,确保高效的开发、测试、部署与维护。 DevOps 以代码为中心。
MLOps 专注于机器学习模型与数据工作流,处理数据准备、模型训练、模型部署与监控等挑战。
对于 MLOps,关键在于必须对从数据准备到模型训练的端到端工作流进行跟踪并可复现。 因此,MLOps 以数据与模型为中心。
DevOps 主要管理源代码、二进制包与配置文件等软件工件;而 MLOps 管理 ML 特有的工件,如模型、数据集、特征、实验配置与结果。
DevOps 工件相对静态,而 MLOps 工件因再训练与数据变化而具有动态性。
因此,关键差异在于 MLOps 必须同时管理软件代码与数据驱动工件的生命周期。这也是 MLOps 构建于 DevOps 之上、并在部分方面进行扩展的原因。
DevOps 聚焦构建、测试、部署与监控等阶段。一旦应用进入生产,其行为通常可以完全预测。
MLOps 在涵盖 DevOps 相同阶段的同时,增加了数据预处理、特征工程、模型训练与再训练,以及数据或概念漂移的监控。
应用的行为更难预测,且高度迭代,因为模型需要频繁更新以适应数据集的变化。
因此,关键差异在于 MLOps 的生命周期以数据为驱动,而 DevOps 的生命周期更侧重代码。
DevOps 以代码为核心,依赖 CI/CD 流水线来自动化构建、测试与部署阶段。常用工具包括 Gitlab CI/CD、Jenkins 或 Terraform。
MLOps 则需要构建数据处理、模型训练与模型部署的流水线。因此,它需要创建数据与训练工作流的工具与流水线,可使用 MLFlow、Kubeflow、Airflow 或 SageMaker 等工具。
在某些情况下,MLOps 流水线还需要支持如 GPU 等特殊基础设施,这是 DevOps 流水线通常不需要的。
DevOps 涉及软件与运维团队的协作。同时职责分工明确:软件工程师专注于编码,运维团队专注于基础设施。
MLOps 项目则涉及数据科学家、ML 工程师、数据工程师与运维团队。此外,若数据科学家并非主要领域专家,还需要引入领域专家。
这意味着两种学科在公司内部需要不同的组织结构。
既然我们已经讨论了差异,现在来关注两者的重叠领域。
重申最重要的一点:MLOps 构建于 DevOps 之上,并进行扩展以适应机器学习的独特挑战。二者都专注于自动化工作流、提升协作,并确保质量与可扩展性。
两者都通过CI/CD 流水线来自动化其工作流。MLOps 与 DevOps 都需要管理需要构建、测试与部署的代码。
MLOps 进一步将其扩展到数据验证、模型训练与部署的流水线。
不过,二者通常都使用 CI/CD 来简化从开发到生产的迁移。
两者都使用基础设施即代码(IaC)来自动化地提供、管理与扩展基础设施,无需手动步骤。Docker、Terraform 与 Kubernetes 等工具在两个领域都被广泛使用。
两者都涉及应用服务器、数据库与 API 的供给。MLOps 额外需要为处理大规模数据集、分布式训练与模型服务提供相应的基础设施。
DevOps 与 MLOps 都依赖监控系统来尽早发现问题并确保可靠性。Prometheus 与 Grafana 等工具在两个领域都很常见。
两者都需要监控应用性能、可用性与日志,以用于调试。不过,MLOps 还需监控模型特有指标,如准确率、漂移与延迟。
在了解重叠与差异之后,我们可以讨论何时采用哪种学科。
如前所述,MLOps 以数据为中心,在数据驱动型项目中总是合适的。例如自动驾驶、实时分析或图像识别等项目。
此外,对于以机器学习为核心功能的产品,如推荐系统(如 Netflix、Amazon)、金融服务中的欺诈检测,或自然语言处理应用(如聊天机器人),MLOps 也至关重要。只要 ML 模型需要频繁更新与再训练,也应采用 MLOps。
相比之下,DevOps 更适用于以网页服务、移动应用或 API 为重点的传统软件应用,例如电商平台、内容管理系统或软件即服务(SaaS)工具。
当您旨在缩短开发周期、快速部署新功能,同时确保系统可靠性时,采用 DevOps 也非常合适。
MLOps 与 DevOps 都是能够简化工作流、提升效率的强大方法。然而,它们也伴随着挑战。
要成功落地这些方法,需要解决文化挑战、工具链复杂性与可扩展性问题。
接下来我将聚焦我所经历的一些挑战。
DevOps 涉及软件开发人员与运维团队之间的协作。
MLOps 则加入了数据科学家、数据工程师与 ML 工程师。这提升了跨职能协作的需求。
这些群体各自有不同的优先事项与专长:
不同的专长与优先事项,常常会导致沟通不畅与目标不一致。
变革阻力是另一项需要克服的挑战。两种方法都具有颠覆性,旨在自动化工作流并改变人们的思维与工作方式。这常常导致人们抗拒并拒绝将这些工作流融入日常工作。
两种方法都包含众多需要提供与学习的工具。然而,与 MLOps 相比,DevOps 的工具生态更标准化、复杂度更低。
MLOps 牵涉多种工具,其集成可能复杂且耗时。
团队必须投入时间学习这些工具,而运维团队需将其集成到公司的基础设施中,这可能带来困难。
两种方法在可扩展性方面也存在挑战。DevOps 主要关注扩展应用与服务以满足用户需求;而 MLOps 需要应对数据与模型的增长。
对于 MLOps,更独特的挑战会出现。ML 往往需要处理大规模数据集并训练大型模型,这可能需要如 GPU 或 TPU 等特殊基础设施。
数据增长在数据存储、处理以及版本化等方面带来挑战。此外,模型需要部署,低延迟要求会使模型服务变得特殊且具有挑战性。
这些挑战进一步凸显了自动化与 IaC 是应对困难的关键。
本文讨论了 MLOps 与 DevOps,以及它们的相似与不同之处。
两者对于简化工作流与提升效率都至关重要。
不过,DevOps 主要关注传统的软件开发与部署流程,而 MLOps 则聚焦于数据与 ML 为中心的项目。
MLOps 本身建立在 DevOps 原则之上,因为 ML 项目同样包含软件部分,因此共享基础要素。
但 MLOps 进行了扩展,以应对 ML 特有挑战,如庞大且快速变化的数据集、需要进行版本管理与频繁再训练的 ML 模型,以及需处理数据漂移与概念漂移等问题的监控。
如果您有兴趣进一步了解 MLOps 与 DevOps,推荐查看以下课程:
MLOps 管理机器学习的生命周期,包括数据工作流、模型训练与监控;而 DevOps 专注于传统的软件开发与部署流程。
是的,MLOps 构建在 DevOps 原则之上。大多数机器学习应用也涉及软件开发,因此通常需要结合两种实践。
在 MLOps 中,常用工具包括 MLflow、Kubeflow 与 SageMaker;而在 DevOps 中,Jenkins、Kubernetes 与 Terraform 常用于 CI/CD 与基础设施自动化。
要有效实施 MLOps,需要具备机器学习、数据工程与 DevOps 原则方面的专业知识,并熟悉 Kubernetes、Airflow 与 MLflow 等工具。
我是一名云工程师,拥有坚实的电气工程、机器学习和编程基础。我的职业生涯始于计算机视觉领域,专注于图像分类,随后转向 MLOps 和 DataOps。我擅长构建 MLOps 平台、支持数据科学家,并交付基于 Kubernetes 的解决方案,以优化机器学习工作流。
通过这些课程,深入学习机器学习与 MLOps!
课程
课程
课程