发布于 2026-01-06 0 阅读
0

使用这款开源工具将 DevOps 转换为 MLOps 流水线

使用这款开源工具将 DevOps 转换为 MLOps 流水线

令人担忧的是,由于复杂的模型部署流程,超过80% 的 机器学习(ML) 模型从未投入生产环境。即使在那些 ML 模型已成功投入生产的公司中,许多公司也反映其 ML 系统背后的机器学习运维 (MLOps)管道十分复杂。

对于企业而言,设立专门团队来部署机器学习产品可能效率低下。对于中小企业来说,这还会意味着在招聘和基础设施管理方面产生高昂的额外成本。

DevOps 与 MLOps

本文将解释为什么您无需维护两条独立的流水线:DevOps 和 MLOps。您还将了解到 KitOps,这是一款全新的开源工具,它可以统一这两条流水线,从而节省成本和精力。

我们先来讨论一下为什么你不希望公司内部存在独立的运营流程。

为什么不宜为 DevOps 和 MLOps 保留单独的流水线?

DevOps 和 MLOps 的目标相同,都致力于在生产环境中保持软件的更新。然而,由于 DevOps 的概念出现得早于 MLOps,它最初并非为适应机器学习模型开发的迭代过程而设计的。因此,这两个领域逐渐分道扬镳。

无论分歧的原因和方式如何,大多数情况下,团队及其背后的组织都必须为此付出代价。以下是拥有两个不同运营团队的一些弊端:

  • 知识孤岛:
    当两个运维团队独立运作时,知识和专业技能可能会形成孤岛,导致开发效率低下。此外,如果一个团队不了解另一个团队方法论的具体实施细节,也可能引入安全漏洞。

  • 重复劳动和工作冗余
    是知识孤岛的副作用。当团队之间沟通不畅时,他们可能会各自独立地研究同一个问题。这种不必要的重复劳动会阻碍开发速度。


  • 软件工程中,项目团队的增加会降低开发速度,从而增加沟通成本

  • 成本增加
    显然,雇佣和维持两个团队而不是一个团队会增加团队的预算需求。

为什么考虑将 MLOps 和 DevOps 合并到一条单一的流水线中?

既然已经了解了维护两条独立操作流水线的后果,那么对传统软件应用和机器学习驱动的软件应用使用同一条流水线岂不是更好?的确如此。如果有一个工具可以帮助你统一这两条流水线,它需要具备哪些功能呢?它需要三个关键功能:

  • 广泛的兼容性和易于集成
  • 遵守
  • 支持非专有标准和大型工件

广泛的兼容性和易于集成
该工具应该能够支持软件工程师和数据科学家使用的库和框架。

此外,它应该能够轻松地与软件工程师和数据科学家使用的库和框架集成,并且易于学习,以便工程师能够轻松地将其集成到他们当前的工作流程中。

软件开发人员、数据工程师、数据科学家、机器学习工程师、DevOps工程师和MLOps工程师常用的一些工具和服务包括:

  • 版本控制和 CI/CD:Git、GitHub、Bitbucket 和 CircleCI 用于版本控制、自动化测试和持续集成或持续交付 (CI/CD)。
  • 数据工作流编排:Airflow 用于编排复杂的数据工作流和管理数据管道。
  • 模型注册和部署:MLFlow 和 Neptune.ai 用于机器学习模型的注册、模型打包和部署。
  • 配置管理:Hydra 管理机器学习实验和部署中的配置。
  • 机器学习框架:PyTorch 和 TensorFlow 用于构建、训练和评估机器学习模型、运行实验和进行预测。
  • 数据和模型版本控制:数据版本控制 (DvC) 用于数据版本控制、模型版本控制,并将 CI/CD 集成到机器学习工作流程中。
  • 云服务:AWS、Azure 和 GCP,用于在可扩展的环境中部署机器学习模型。
  • 工作流编排:Ray 负责编排分布式机器学习工作流。

合规性:
欧盟定期更新法规,以提高使用人工智能进行决策的公司的责任感。为此,欧盟近期出台了一项新规,要求公司在模型完成训练后的10年内,能够将模型与其训练所用的确切数据集关联起来。

生态系统中的大多数工具都无法满足如此严格的要求。

支持非专有标准和大型工件
机器学习项目与其他软件工程项目的主要区别在于,机器学习项目通常涉及并产生大型工件(数据和模型)。像 Git 这样的工具无法用于管理(跟踪和共享)这些工件。虽然有一些外部工具支持此类大型工件,但它们使用专有标准进行存储,因此可移植性较差。因此,如果一个工具能够支持非专有标准并处理大型工件(数据版本控制和跟踪),那么它很可能被 MLOps 和 DevOps 团队广泛使用。

是否存在一款具备所有这些功能的工具? KitOps正好满足了上述三项功能,而且学习曲线非常平缓。它灵活易用,可以轻松融入现有的工作流程。接下来,我们将了解它如何帮助我们统一两条流程。

KitOps.ml

KitOps 如何统一您的 DevOps 和 MLOps 流水线

KitOps 是一款开源工具,可帮助您安全地打包和版本控制代码、数据,甚至是大型工件。KitOps 的独特之处在于它依赖于开源工具和标准,并以非专有格式(OCI 兼容工件)存储其资产。这使得 KitOps 可以轻松地与其他开源工具(包括任何现代 CI/CD 流水线)结合使用。

此外,KitOps 会为版本中的每个工件(代码、数据、模型等)生成校验和,因此可以轻松跟踪版本之间的更改,并将一个工件链接到版本中的另一个工件,从而确保可追溯性和防篡改打包。

借助 KitOps,无论项目类型是机器学习项目还是传统软件工程项目,您的开发流程都可以概括为三个步骤:

  1. 本地开发和试验
  2. 测试
  3. 部署和监控

本地开发和实验
阶段:在此阶段,开发人员编写代码来添加新功能或改进现有功能。对于传统的软件开发,这可能意味着编写补丁、修复错误等。此外,对于机器学习项目,这还包括模型训练、使用新数据进行微调、数据准备代码、特征工程、数据管理、实验跟踪、模型训练流程等。

应用程序运行正常后,开发者可以编写一个类似于 Dockerfile 的 Kit 文件,并注册工件:代码、数据、模型、静态文件等。然后,开发者使用 kit pack 将这些工件打包成 ModelKit,并使用 .gitignore 将其推送到远程注册表kit push

例如:安装 Kit
,登录到远程注册表并完成必要的代码更改。您可以编写类似于这样的 Kit 文件:

manifestVersion: v1.0.0
package:
  name: Python Example
  description: 'A simple python app'
  license: Apache-2.0
  authors: [Jozu]
code:
  - path: .
    description: Sample app code
Enter fullscreen mode Exit fullscreen mode

您可以将任何内容(包括代码、模型或数据集)注册到 Kitfile 中。

manifestVersion: v1.0.0
package:
  name: Python Example
  description: 'A simple python app'
  license: Apache-2.0
  authors: [Jozu]
code:
  - path: .
    description: Sample app code
model:
  # <Model metadata and location here>
datasets:
  # <Dataset metadata and location here>
Enter fullscreen mode Exit fullscreen mode

然后,您可以将内容打包成 ModelKit 并将其推送到远程注册表:

kit pack . -t YOUR_CONTAINER_REGISTRY_URL/APP_NAME:TAG
kit push YOUR_CONTAINER_REGISTRY_URL/APP_NAME:TAG
Enter fullscreen mode Exit fullscreen mode

测试
阶段:在此阶段,您需要拉取并测试最新的更改。由于 ModelKit 与大多数工具兼容,开发人员可以使用他们喜欢的开源工具和云平台进行测试。例如,您可以编写一个GitHub Actions 管道,使用`kit pull` 从 ModelKit 拉相关构件并执行测试。

最基本的设置包括解压相关工件(目前是代码)并使用你想要的工具(pytest目前)进行测试。

kit unpack YOUR_CONTAINER_REGISTRY_URL/APP_NAME:TAG --code
pytest
Enter fullscreen mode Exit fullscreen mode

测试通过后,您可以构建容器镜像,将其与代码打包,然后将其推送到远程注册表。

kit pack . -t YOUR_CONTAINER_REGISTRY_URL/APP_NAME:TAG
kit push YOUR_CONTAINER_REGISTRY_URL/APP_NAME:TAG
Enter fullscreen mode Exit fullscreen mode

部署和监控:
测试成功后,您可以将必要的工件(通常是 Docker 镜像)拉取到生产服务器并部署更新。您还可以使用您喜欢的工具(例如GrafanaStreamlit等)构建监控仪表板,以评估应用程序指标或对已部署的机器学习模型进行模型监控。
使用以下命令将代码从远程注册表解压到部署服务器并进行部署。

kit unpack YOUR_CONTAINER_REGISTRY_URL/APP_NAME:TAG --code
docker run <CONTAINER_NAME>:<TAG>
Enter fullscreen mode Exit fullscreen mode




总结

根据团队成员的共识和组织的实践,该流程可能包含更多步骤。但关键在于,您仍然可以使用 KitOps/ModelKits,并为机器学习项目和传统软件工程项目构建单一的部署流程。要了解更多关于 KitOps 的信息,请访问项目网站,该网站还提供易于理解的入门指南

文章来源:https://dev.to/jozu/turn-devops-to-mlops-pipelines-with-this-open-source-tool-3ehc