MLOps在极狐GitLab 的现状和前瞻

什么是 MLOps

首先我们可以这么定义机器学习(Machine Learning):通过一组工具和算法,从给定数据集中提取信息以进行具有一定程度不确定性的预测,借助于这些预测增强用户体验或推动内部决策。

同一般的软件研发流程比较起来,机器学习的研发流程是一个很特殊的存在,它无法仅仅由代码逻辑定义。训练样本集、标注样本方法、数据集处理方式、训练时的超参和实际运行环境数据等等,和它都有关联,而且上述任何数据和代码的更改都都会导致最终模型的变更,乃至影响到最终预测结果产生巨大变化。这意味着,预测或分类的实际结果不仅取决于数据科学家提出的神经网络架构和机器学习方法,还取决于开发团队如何实现这一模型,以及管理员如何在集群环境中部署这一模型。

此外,在机器学习解决方案的开发、测试、部署和支持过程中,多学科专家在互动中会遇到许多组织难题和技术障碍,这不仅延长了产品创建的时间,还降低了产品带给该项业务的实际价值。为了消除这些障碍,MLOps 这一概念应运而生。

我们可以认为:MLOps 就是机器学习时代的 DevOps。它的主要作用就是连接模型构建团队和业务,运维团队,建立起一个标准化的模型开发,部署与运维流程,使得企业组织能更好的利用机器学习的能力来促进业务增长。

维基百科中关于 MLOps 的定义是这样的:

MLOps 是 ModelOps 的子集,是数据科学家和操作专业人员之间进行协作和交流的一种做法,可帮助管理生产机器学习生命周期。与DevOps或DataOps方法相似,MLOps旨在提高自动化程度并提高生产ML的质量,同时还关注业务和法规要求。

MLOps 和 DevOps 的异同

DevOps 发展到现在已经非常成熟了,有丰富的理论和多样化的实践方式,DevOps 可以赋能软件开发的全生命周期,提供的端到端交付能力是主力企业数字化转型的关键。现在已经进入了 DevOps 平台化时代。

图片

与 DevOps 不同的是,MLOps 还包含构建/训练机器学习模型所需的额外数据和模型步骤(见下图)。这意味着 MLOps 最终对工作流的每个组件都有一些细微差别。

图片

在大部分情况下,上图中 “ML” 阶段的 “Data” 和 “Model”,代表了数据标记、数据转换/特征工程和算法选择过程。从大的方面看,一个 MLOps 的生命周期有如下几个过程:

1. 训练和测试

首先,数据科学家需要准备训练数据。将数据标准化,使其采用可重用格式并标识各自的“特征”或变量。将算法应用于数据,对机器学习模型进行训练。然后,通过新数据对其进行测试,了解其预测的准确性。

2. 打包

ML 工程师使用其环境将模型打包,比如:容器化。模型环境包含模型需要执行的元数据和配置等。

3. 验证

评估模型性能如何匹配其业务目标。

4. 重复步骤 1 到 3

实际生产环境中,找到合适的模型可以需要成百上千的训练小时。可以通过调整训练数据、优化算法超参或更改算法,对模型进行训练。最终确定哪个模型版本最适合当前业务。

5. 部署

将模型部署在指定生产或者测试环境中。

6. 监视和重新训练

对部署的模型相关指标持续监控,视情况进行数据或模型的降级,模型的重新训练与重新部署,确保预测的质量和效率。

图片

由此可见,MLOps 整体流程和我们熟知的 DevOps 非常相似,之所以没有直接用 DevOp s来解决 Machine Learning 的开发,是因为二者之间依然存在着不小差异。

首先传统软件开发领域,软件(或代码)行为有明确的规则,是可预测的。我们与之交互的软件都是基于多样化的输入,通过各种编程语言复杂的控制结构和处理逻辑来对输入做出相应的响应;而 MLOps 领域没有明确的规则,它的规则是通过从训练数据中捕获模式来间接学习设置的,这使得ML更适合于处理数值类型的问题和分类问题,比如根据公司人员数目,从事领域,税收情况,行业发展趋势等预测公司季度营收;根据已有图像资料,分析给定图像是什么等等,这里ML的模型返回的是预测的值或者是落入特定类别的概率。

DevOps 领域最终的产出是可执行的二进制文件,MLOps 最终产出是一个序列化到文件,即模型,模型在实际环境中运行结果不仅仅由代码决定,模型训练数据,超参数配置的影响同样非常巨大,此外,MLOps的版本控制要求更高,除了代码和模型以外,还需要跟踪对应的模型训练数据,超参数配置等,相应的,这也就导致了在排错和调优时候难度也更大。

DevOps 领域产品理想情况下会一直稳定运行下去,外界环境和输入数据不会对自身行为造成影响;但 MLOps 产品不行,随着运行环境和输入数据的细微更改和调整,数据模型的预测数据会不可避免的产生飘移,此时需要视情况作出一些应对,比如:更改超参数配置;修改代码或者训练数据;甚至更改模型算法,因此相对于 DevOps CI/CD 流程,MLOps 新增了 CT 的概念,即持续训练(Continuous Training),使得模型在运行过程中可以持续得到自动化的训练与更新。

极狐GitLab 中的MLOps

既然 MLOps 和 DevOps 在整体流程上有高度相似度和重合度,而且极狐GitLab 已经是业界公认的 DevOps 领域的标杆,因此如何将极狐GitLab 应用于 MLOps 领域就是我们接下来面临的问题。

首先,极狐GitLab 在 MLOps 领域的定位和目标是什么?

这里我们引用极狐 GitLab 官方的说法:

Make GitLab the perfect companion for a Machine Learning Engineer or Data Scientist,and provide a better user experience for them across the entire Machine Learning life cycle (model creation, testing, deployment, monitoring, and iteration)让极狐GitLab 成为机器学习工程师和数据科学家的完美伙伴和工具,并在整个机器学习生命周期(模型创建、测试、部署、监控和迭代)中为他们提供更好的用户体验。

极狐GitLab 没有计划成为一个功能完善的 All-in-One 的 MLOps 平台,现阶段充分利用极狐GitLab 自身在 DevOps 方面的优势(尤其是CI/CD、pipeline、security方面),能够整合主流的 MLOps 平台或者服务,并为用户基于 极狐GitLab构建自己的 MLOps pipeline 提供便利即可。

结合上文提到的 MLOps 各个阶段,从技术角度理解就是:极狐GitLab 作为 SCM 保存相关代码算法,超参数配置,乃至训练数据,通过 CI/CD pipeline 串起并触发整个 MLOp s流程,根据整合的其他 MLOps 平台和实际情况,数据处理,模型训练,模型性能验证等步骤都可以在第三方平台完成。

图片

MLOps 整体的pipeline 由 极狐GitLab 平台管理维护,DevOps 相关的阶段都由 极狐GitLab 平台自身的 CI/CD Pipeline 来实现,包括打包,测试,部署等等,ML 特定的步骤调用整合的第三方 MLOps 平台的 pipeline 实现(需要通过 SDK 或者 REST 方式传递代码和数据),将来这些阶段也可以在极狐GitLab 实现;通过极狐GitLab CI 的配置,当源代码/配置/训练数据集产生更改后,会自动触发 Model 的训练,此外,模型监控到出现飘移或者预测错误率达到到指定阈值后,同样会触发 Model 的重新训练。

对于 POC 性质或者简单的 ML 项目,上述所有阶段都可以基于极狐GitLab 来实现,下面就是一个用极狐Gitlab CI 来实现经典的 fashion-mnist 的 MLOps 示例:

图片

如上图所示,MLOps 整体的 pipeline 都由极狐GitLab CI 实现,各 Stage 功能说明如下:

Train

加载 fashion_mnist 训练数据集(训练集 60000 张图片,测试集 10000 张图片),进行数据的预处理,然后依据指定算法训练 Model,生成的 Model 保存在极狐GitLab 的 artifact 中。Model 的 train 过程由极狐GitLab 来实现。本示例中是在 Specific Runner 中完成,也可以将 train 操作放在 Kubernetes 集群或者第三方 MLOps 平台完成。

Build

完成 Model 训练后,将 Model 打包为 docker 镜像。这里使用了极狐GitLab 开箱即用的镜像仓库服务,更多详情可以查看公众号文章:极狐GitLab 容器镜像仓库的使用技巧。生成的镜像最终会保存在极狐GitLab 的 Container Registry中。

Deploy

将 Model 服务部署到指定位置,可以是 VM 或者 Kubernetes 平台。为方便测试,本示例中直接部署在指定 Specific Runner 所在主机。

Inference

加载 fashion_mnist 测试数据集,然后调用刚刚部署的 Model 服务,查看 Model 对测试数据集的预测结果情况。

Cleanup

清理数据。

执行上述pipeline后,可以看到最终执行结果如下:

图片

对于稍微复杂的 ML 项目,上述 demo 中采用的实现方式就不适用,有更多其他因素需要考虑,比如 Model 的保存和维护;ML 整体版本管理;Model 训练在哪里执行;Model 评估和再训练等等。

面临的挑战和展望

  • 数据科学家和工程师需要熟悉基于极狐GitLab 的 GitOps 工作流程以及通过极狐GitLab CI 来构建 MLOps 管道的工作方式。

  • 当前通过极狐GitLab 的 CI 来管理 MLOps 整个生命周期流程没有现成的模版可用。

  • 这意味着对于每个 MLOps 项目,需要数据科学家自己手动编写各个阶段的 yml 脚本,比如准备环境、创建工作空间、提交作业进行培训,注册模型、比较、评分和发布等等。

  • 缺少与主流 MLOps 平台整合和使用的相关文档。

    当前模型训练、评估选择、模型保存这些 ML 特有功能是极狐GitLab 所不具备的,需要交由第三方平台完成,因此与主流 MLOps 平台(商业或者开源)整合和支持就是不可或缺的,比如 AML,MLFlow,DVC 等等。针对不同第三方平台需要提供不同的CI Job模版

  • 极狐GitLab 作为基于 Git 的 DevOps 平台,不擅长保存处理海量数据,而 MLOps 面对的往往是大量数据的长时间处理,比如用于训练模型的数据集,可以是文本,图片,音频或者视频资料,动辄是TB数量级,一个模型的训练可能耗时几十上百小时,这种大数据量计算密集型任务,对极狐GitLab 的 SCM, Runner 和现有 CI/CD 工作机制都提出了不小挑战,比如:极狐GitLab 如何保存训练用的数据集;在模型训练和评估时,极狐GitLab 与第三方 MLOps 平台之间消息调用机制等等

极狐GitLab 针对这些问题和已知痛点,已经在着手提供解决方案,包括如下几个方面:

  • 调研主流 MLOps 平台,集成到极狐GitLab,并提供对应的极狐GitLab  CI 模版。

  • 完善极狐GitLab 既有的 SCM、pipeline 功能,以便能更好支持 MLOps 相关的代码语言,比如完善对 jupyter notebook 类型脚本语句的支持。

  • 提供与一些开源 MLOps 平台(比如 MLFlow,DVC)整合使用的示例项目,并提供完整代码和说明文档。

  • 极狐GitLab 和第三方平台之间稳定可靠的消息事件传递或函数调用,确保在模型训练,飘移监测,性能评估等事件能被感知到并触发相应的pipeline。

MLOps 是个相对比较新颖的概念和领域,其理论和工具都还远没达到 DevOps 的成熟度,不过随着 MLOps 越来越被人们重视,极狐GitLab 也将在 MLOps 领域的持续发力,将来也会有让人亮眼的表现。

参考链接

  1. https://gitlab.com/gitlab-org/incubation-engineering/mlops/meta/-/issues

  2. https://zhuanlan.zhihu.com/p/357897337

  3. https://www.phdata.io/blog/mlops-vs-devops-whats-the-difference/

  4. https://github.com/microsoft/MLOps

  5. https://about.gitlab.com/handbook/engineering/incubation/mlops/

  6. https://hackernoon.com/why-is-devops-for-machine-learning-so-different-384z32f1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/222003.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

行为型设计模式(一)模版方法模式 迭代器模式

模板方法模式 Template 1、什么是模版方法模式 模版方法模式定义了一个算法的骨架,它将其中一些步骤的实现推迟到子类里面,使得子类可以在不改变算法结构的情况下重新定义算法中的某些步骤。 2、为什么使用模版方法模式 封装不变部分:模版…

vscode配置node.js调试环境

node.js基于VSCode的开发环境的搭建非常简单。 说明:本文的前置条件是已安装好node.js(具体安装不再赘述,如有需要可评论区留言)。 阅读本文可掌握: 方便地进行js单步调试;方便地查看内置的对象或属性; 安装插件 C…

RouterSrv-DHCP

2023年全国网络系统管理赛项真题 模块B-Windows解析 题目 安装和配置DHCP relay服务,为办公区域网络提供地址上网。DHCP服务器位于AppSrv服务器上。拆分DHCP服务器上的作用域,拆分的百分比为7:3。InsideCli优先从RouterSrv获取地址。配置步骤 安装和配置DHCP relay服务,为办…

AIGC:阿里开源大模型通义千问部署与实战

1 引言 通义千问-7B(Qwen-7B)是阿里云研发的通义千问大模型系列的70亿参数规模的模型。Qwen-7B是基于Transformer的大语言模型, 在超大规模的预训练数据上进行训练得到。预训练数据类型多样,覆盖广泛,包括大量网络文本、专业书籍…

云原生消息流系统 Apache Pulsar 在腾讯云的大规模生产实践

导语 由 InfoQ 主办的 Qcon 全球软件开发者大会北京站上周已精彩落幕,腾讯云中间件团队的冉小龙参与了《云原生机构设计与音视频技术应用》专题,带来了以《云原生消息流系统 Apache Pulsar 在腾讯云的大规模生产实践》为主题的精彩演讲,在本…

Linux shell编程学习笔记37:readarray命令和mapfile命令

目录 0 前言1 readarray命令的格式和功能 1.1 命令格式1.2 命令功能1.3 注意事项2 命令应用实例 2.1 从标准输入读取数据时不指定数组名,则数据会保存到MAPFILE数组中2.2 从标准输入读取数据并存储到指定的数组2.3 使用 -O 选项指定起始下标2.4 用-n指定有效行数…

21.Servlet 技术

JavaWeb应用的概念 在Sun的Java Servlet规范中,对Java Web应用作了这样定义:“Java Web应用由一组Servlet、HTML页、类、以及其它可以被绑定的资源构成。它可以在各种供应商提供的实现Servlet规范的 Servlet容器 中运行。” Java Web应用中可以包含如下…

人工智能的发展之路:时间节点、问题与解决办法的全景解析

导言 人工智能的发展历程充满了里程碑式的事件,从早期的概念到今天的广泛应用,每个时间节点都伴随着独特的挑战和创新。本文将详细描述每个关键时间节点的事件,探讨存在的问题、解决办法,以及不同阶段之间的联系。 1. 195…

重温经典struts1之自定义转换器及注册的两种方式(Servlet,PlugIn)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 Struts的ActionServlet接收用户在浏览器发送的请求,并将用户输入的数据,按照FormBean中定义的数据类型,赋值给FormBean中每个变量&a…

Databend 源码阅读: Meta-service 数据结构

作者:张炎泼(XP) Databend Labs 成员,Databend 分布式研发负责人 drmingdrmer (张炎泼) GitHub 引言 Databend 是一款开源的云原生数据库,采用 Rust 语言开发,专为云原生数据仓库的需求而设计。 面向云架…

利用prometheus+grafana进行Linux主机监控

文章目录 一.架构说明与资源准备二.部署prometheus1.上传软件包2.解压软件包并移动到指定位置3.修改配置文件4.编写启动脚本5.启动prometheus服务 三.部署node-exporter1.上传和解压软件包2.设置systemctl启动3.启动服务 四.部署grafana1.安装和启动grafana2.设置prometheus数据…

第二节TypeScript 基础语法

1、typescript程序由以下几个部分组成: 模块函数变量语句和表达式注释 2、开始第一个typescript程序 创建一个typescript程序,使之输出“hello typescript”: 代码: var message:string "hello typescript" cons…

美颜SDK技术对比,深入了解视频美颜SDK的工作机制

如何在实时视频中呈现更加自然、美丽的画面,而这正是美颜SDK技术发挥作用的领域之一。本文将对几种主流视频美颜SDK进行深入比较,以揭示它们的工作机制及各自的优劣之处。 随着科技的不断进步,美颜技术已经从简单的图片处理发展到了视频领域…

Flink系列之:背压下的检查点

Flink系列之:背压下的检查点 一、Checkpointing under backpressure二、缓冲区 Debloating三、非对齐 Checkpoints四、对齐 Checkpoint 的超时五、限制六、故障排除 一、Checkpointing under backpressure 通常情况下,对齐 Checkpoint 的时长主要受 Che…

【运维面试100问】(十一)淡淡I/O过程

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…

关于“Python”的核心知识点整理大全32

目录 12.6.4 调整飞船的速度 settings.py ship.py alien_invasion.py 12.6.5 限制飞船的活动范围 ship.py 12.6.6 重构 check_events() game_functions.py 12.7 简单回顾 12.7.1 alien_invasion.py 12.7.2 settings.py 12.7.3 game_functions.py 12.7.4 ship.py …

本地MinIO存储服务如何创建Buckets并实现公网访问上传文件

文章目录 前言1. 创建Buckets和Access Keys2. Linux 安装Cpolar3. 创建连接MinIO服务公网地址4. 远程调用MinIO服务小结5. 固定连接TCP公网地址6. 固定地址连接测试 前言 MinIO是一款高性能、分布式的对象存储系统,它可以100%的运行在标准硬件上,即X86等…

管理类联考——数学——真题篇——按题型分类——充分性判断题——蒙猜E

老老规矩,看目录,平均每年2E,跟2D一样,D是全对,E是全错,侧面也看出10道题,大概是3A/B,3C,2D,2E,其实还是蛮平均的。但E为1道的情况居多。 第20题…

Linux目录和文件管理

一.Linux目录结构 Linux操作系统在定位文件或目录位置时,使用斜杠“ / ”进行分割(区别于Windows操作系统中的反斜杠“ \ ”)。整个树形目录结构中,使用独立的一个" / "表示根目录,根目录是Linux操作系统文…

vue2 组件传递数据

向子组件传递数据通过Props 1.创建子组件 详细步骤&#xff1a; 1.在components创建子组件 2.等父组件接受到参数后通过Props来接受父组件传递过来的数据 <template><div id"app"><h2>title:{{ title }}</h2><p>tips:{{ tips }}<…