新書推薦:
《
干戈之影:商代的战争观念、武装者与武器装备
》
售價:HK$
74.8
《
镶嵌之美:古希腊罗马的马赛克艺术
》
售價:HK$
305.8
《
后希腊化哲学:从斯多亚学派到奥利金的发展研究
》
售價:HK$
76.8
《
别纠结啦:不被情绪牵着走的通透生活指南(“当代一休”小池龙之介治愈新作!附赠精美书签!)
》
售價:HK$
64.9
《
第二人生:找到重新定义人生的智慧
》
售價:HK$
96.8
《
唐朝三百年
》
售價:HK$
107.8
《
反操纵心理学:夺回人生主导权 拒绝被操纵
》
售價:HK$
54.8
《
同工异曲:跨文化阅读的启示(修订版)
》
售價:HK$
43.8
|
編輯推薦: |
1.哈佛大学统计学博士,香港大学博士生导师刘中华倾情作序,业内大咖孙明俊、李毅成、陈宇、周鹏飞、秦予平联袂力荐。
2.本书系统地介绍了MLOps的方方面面,聚焦于可落地的MLOps实践,为企业推进机器学习生产化提供了有价值的参考。
3.本书不仅可以作为企业智能数字化转型的实践参考,也可以作为ML领域从业者的经验手册。
4.本书适合数据科学家、软件工程师、ML工程师及希望学习如何更好地组织ML实验的研究人员阅读。
|
內容簡介: |
在大数据时代,机器学习(ML)在互联网领域取得了巨大的成功,数据应用也逐渐从“数据驱动”阶段向“模型驱动”阶段跃升,但这也给ML项目落地带来了更大的困难,为了适应时代的发展,MLOps应运而生。本书从多个方面介绍了MLOps实践路径,内容涵盖了设计、构建和部署由ML驱动的应用程序所需的各种实用技能。
本书适合数据科学家、软件工程师、ML工程师及希望学习如何更好地组织ML实验的研究人员阅读,可以帮助他们建立实用的MLOps实践框架。
|
關於作者: |
李攀登,非参数统计硕士, AlgoLink(专注于MLOps研发与应用)的创始人,出海游戏公司博乐科技数据专家。曾任万达集团算法专家,蓝色光标算法团队负责人,Teradata资深数据挖掘工程师,亚信科技高级数据挖掘工程师。研究方向为机器学习、推荐系统、MLOps,拥有机器学习算法应用相关专利7项,MLOps专利2项,软件著作权1项。
|
目錄:
|
目 录
第1章 MLOps概述 1
1.1 机器学习涉及的概念 1
1.1.1 监督学习 3
1.1.2 无监督学习 4
1.1.3 半监督学习 4
1.1.4 强化学习 5
1.1.5 何时使用机器学习 5
1.2 机器学习相关符号及术语定义 7
1.2.1 原始数据、输入数据、特征与特征工程 7
1.2.2 训练样本及预留样本 8
1.2.3 参数与超参数 8
1.2.4 参数模型、非参数模型、极大似然估计 9
1.2.5 机器学习管道 11
1.2.6 模型选择与性能权衡 12
1.3 机器学习的工程挑战与MLOps解决方案 13
1.3.1 MLOps的定义 14
1.3.2 MLOps与其他Ops的区别 15
1.3.3 谁在关注MLOps 17
1.3.4 为什么需要MLOps 19
1.3.5 MLOps给企业带来的增益 20
1.3.6 MLOps的工作流程 21
1.3.7 MLOps工程师需要具备的技能 22
1.3.8 什么时候真正需要MLOps 23
1.4 MLOps框架下的工程实践 24
1.4.1 机器学习工程及生产化模块 25
1.4.2 机器学习工程模块的设计原则 26
1.4.3 进行机器学习工程的模块设计时需要注意的细节 27
1.4.4 编码环境与模型探索 27
1.4.5 特征存储 31
1.4.6 实验管理和模型管理 32
1.4.7 服务 32
1.4.8 模型服务规模化 33
1.4.9 模型监控 34
1.5 本章总结 34
第2章 在MLOps框架下开展机器学习项目 36
2.1 界定业务范围阶段 37
2.1.1 在项目规划时考虑生产化 37
2.1.2 业务需求 38
2.1.3 确定衡量指标和项目范围 38
2.1.4 设计初步解决方案 40
2.1.5 制定共同语言 41
2.1.6 数据权限及准备 44
2.2 研究与探索阶段 44
2.2.1 数据探索 44
2.2.2 技术有效性检查 45
2.3 模型开发阶段 46
2.3.1 模型开发的必要准备 46
2.3.2 模型开发 46
2.3.3 模型验证 46
2.4 模型生产化阶段 47
2.5 机器学习项目生命周期 48
2.6 团队建设及分工 49
2.6.1 企业数字化程度 50
2.6.2 界定机器学习团队的角色 50
2.6.3 探讨机器学习项目的团队建设与分工 51
2.6.4 项目外包还是自建机器学习团队 53
2.7 本章总结 55
第3章 MLOps的基础准备:模型开发 56
3.1 背景概要 57
3.2 定义机器学习目标 57
3.2.1 业务问题概述 58
3.2.2 业务目标 58
3.2.3 机器学习目标 58
3.3 数据收集 58
3.3.1 数据获取 59
3.3.2 加载数据 59
3.3.3 关于数据集 61
3.4 数据预处理 62
3.4.1 缺失值处理 62
3.4.2 离群值检测 63
3.5 数据探索 64
3.5.1 目标变量 65
3.5.2 服务分析 65
3.5.3 用户行为分析 67
3.6 特征工程 70
3.6.1 分类和数值列拆分 70
3.6.2 One-Hot编码 72
3.6.3 特征缩放处理 73
3.6.4 目标变量 73
3.6.5 样本生成 74
3.7 构建和评估模型 74
3.7.1 处理非平衡问题 74
3.7.2 模型构建 75
3.8 持久化模型 78
3.9 构建REST API 78
3.9.1 导入相关库并加载模型 79
3.9.2 编写预测函数 80
3.9.3 用户请求 81
3.10 模型投产 82
3.10.1 机器学习投产陷阱及挑战 83
3.10.2 机器学习模型演化:从独立模型到模型工厂 85
3.10.3 利用MLOps实现模型的规模化投产 86
3.11 本章总结 87
第4章 ML与Ops之间的信息存储与传递机制 88
4.1 机器学习实验跟踪 89
4.1.1 机器学习实验跟踪的定义 90
4.1.2 机器学习实验跟踪的必要性 91
4.1.3 随时随地管理实验 91
4.1.4 机器学习实验跟踪与模型管理的区别 92
4.1.5 在MLOps框架中增加机器学习实验跟踪功能 92
4.1.6 设计和实现机器学习实验跟踪API 93
4.1.7 在生产中使用机器学习实验跟踪API 100
4.2 A/B在线实验 101
4.2.1 创建在线实验的必要性 101
4.2.2 确定实验的范围与目标 102
4.2.3 小样本量的确定方法 103
4.2.4 对机器学习模型进行A/B测试 104
4.2.5 在MLOps框架中增加A/B在线实验功能 105
4.2.6 用于A/B在线实验的MAB方案 108
4.2.7 MLOps框架中的A/B实验管理 110
4.3 模型注册 111
4.3.1 模型注册的定义 111
4.3.2 模型注册的必要性 112
4.3.3 将模型注册功能融入MLOps框架 114
4.3.4 模型注册中心存储的信息 115
4.3.5 模型注册的价值 116
4.3.6 先从一个简单的模型注册开始 118
4.3.7 设计和实现符合MLOps标准的模型注册中心 119
4.3.8 在生产中使用模型注册API 124
4.3.9 模型注册中心的权限设置 126
4.4 特征存储 127
4.4.1 特征工程及使用挑战 127
4.4.2 特征存储的定义 128
4.4.3 在MLOps框架中增加特征存储 129
4.4.4 离线与在线特征 130
4.4.5 特征存储带来的益处 131
4.4.6 特征存储的架构设计 132
4.5 本章总结 135
第5章 模型统一接口设计及模型打包 136
5.1 机器学习模型基础接口概述 136
5.1.1 软件开发的策略模式 137
5.1.2 Scikit-Learn对接口的处理方法 138
5.2 业内一些常见的解决方案 139
5.2.1 AWS的机器学习生命周期工具SageMaker 139
5.2.2 Meta的机器学习平台FBLearner Flow 139
5.2.3 Uber的机器学习平台Michelangelo 140
5.2.4 开源的Seldon Core 140
5.3 一个简单的机器学习模型接口示例 140
5.3.1 继承ModelBase基类 142
5.3.2 模型管理基类 145
5.3.3 Flask REST端点 148
5.4 机器学习项目打包 148
5.4.1 模型及代码打包的必要性 149
5.4.2 模型和代码打包的事项及示例 150
5.4.3 模型序列化 150
5.5 本章总结 152
第6章 在MLOps框架下规模化部署模型 153
6.1 定义及挑战 154
6.1.1 机器学习部署的简单定义 154
6.1.2 部署机器学习模型的常见挑战 155
6.2 对业务的驱动逻辑 156
6.2.1 模型部署的边界 156
6.2.2 模型部署与业务应用流程的关系 157
6.3 常见的设计模式 158
6.3.1 用于在线推理的机器学习模型部署的挑战 159
6.3.2 什么时候需要在线推理 162
6.3.3 什么时候使用批量推理 162
6.3.4 数据库批量推理模式 163
6.3.5 嵌入式推理模式 164
6.3.6 单服务推理模式 165
6.3.7 微服务推理模式 166
6.4 构建MLOps通用推理服务:模型即服务 168
6.4.1 模型即服务的工作流程 169
6.4.2 模型即服务的核心服务模块 171
6.5 Web服务框架及应用生态 172
6.5.1 Web应用程序 172
6.5.2 WSGI服务器 173
6.5.3 Web服务器 176
6.5.4 使用REST API为模型提供服务 178
6.6 基于Docker的模型应用程序部署 179
6.6.1 Docker的定义 180
6.6.2 Docker容器、Python虚拟环境和虚拟机 180
6.6.3 构建HTTP REST API 181
6.6.4 创建生产级的Docker镜像 182
6.6.5 构建并运行Docker容器 183
6.7 模型即服务的自动化 184
6.7.1 模型即服务的逻辑设计 184
6.7.2 模型即服务的通用接口定义 187
6.7.3 使用SQLAlchemy ORM重构MLOps的信息存储表 187
6.8 在MLOps框架下实现模型部署示例 190
6.8.1 将构建好的模型进行注册 190
6.8.2 模型部署和服务化 193
6.8.3 机器学习实验跟踪功能升级 195
6.9 基于开源项目的模型服务解决方案 199
6.9.1 基于Kubernetes的资源管理项目KFServing 199
6.9.2 机器学习部署平台Seldon Core 199
6.9.3 轻量级模型部署及管理平台BentoML 200
6.9.4 机器学习生命周期管理平台MLflow 200
6.9.5 机器学习模型服务开源方案的总结 201
6.9.6 关于机器学习模型部署和服务方案的思考 201
6.10 本章总结 202
第7章 MLOps框架下的模型发布及零停机模型更新 204
7.1 机器学习在生产中的CI/CD 205
7.1.1 模型在生产中持续迭代的挑战 206
7.1.2 在MLOps框架中添加模型的发布流程 207
7.1.3 CI阶段的实践 208
7.1.4 CD阶段的实践 211
7.2 模型服务的发布策略 211
7.2.1 传统软件工程的发布策略 212
7.2.2 部署即发布 212
7.2.3 制定机器学习模型服务发布策略的必要性 213
7.2.4 影子测试策略与渐进式推出策略 214
7.2.5 竞争策略 216
7.3 零停机更新模型服务 218
7.3.1 生产中Flask的局限性 219
7.3.2 关于GIL、线程和进程的入门知识 219
7.3.3 从单线程的Flask到uWSGI 220
7.3.4 模型更新条件检查 222
7.3.5 动态更新模型方案 222
7.3.6 基于Kubernetes的扩展方案 227
7.4 本章总结 228
第8章 MLOps框架下的模型监控与运维 230
8.1 机器学习模型监控简介 230
8.1.1 模型的监控场景 231
8.1.2 为什么监控很重要 232
8.1.3 机器学习监控与传统软件监控的区别 233
8.1.4 谁需要关注机器学习的监控结果 234
8.1.5 生产中导致模型衰退或出错的原因 235
8.2 数据科学问题的监控 236
8.2.1 模型漂移 237
8.2.2 决策边界的改变 238
8.2.3 模拟漂移与模型重建修正 239
8.2.4 数据科学问题监控的常见指标和方法 240
8.3 运维问题的监控 241
8.3.1 运维问题的监控与可观察性 242
8.3.2 运维问题监控的指标定义 242
8.4 在MLOps框架内增加监控功能 243
8.4.1 机器学习的日志信息记录 244
8.4.2 使用特征存储简化模型监控 245
8.4.3 A/B在线实验闭环 246
8.4.4 模型衰退检测 247
8.4.5 模型维护 249
8.4.6 模型自动持续训练 251
8.4.7 API缓冲 252
8.5 本章总结 252
第9章 对ML
|
內容試閱:
|
推荐序
在始于18世纪60年代的工业革命期间,物理机器的兴起要求组织系统化,形成了工厂、装配线及我们所知道的关于自动化制造的一切,后实现了以大规模工厂化生产取代个体手工生产的一场生产与科技革命。
类似地,伴随着互联网、移动互联网的浪潮,软件工程也经历了从传统的手工开发运维向敏捷开发的过渡,敏捷系统帮助企业实现了产品生命周期的可运维性,通过减少资源浪费和开发过程的自动化,为持续创新铺平了道路,DevOps也进一步优化了软件生产的生命周期。
这波互联网、移动互联网的浪潮同时催生了人工智能的应用,在全球范围内,人工智能正在作为全新的生产要素加速助力产业转型升级,具体的表现形式为,机器学习(ML)从学术研究领域逐渐移步现实世界中真正的应用领域。这种变化给软件工程带来了更大的挑战,因为相对于传统的软件工程,它引入了新的要素,即数据。而且,ML在学术环境中的工作方式与实际场景生产环境配置的要求之间存在差距和差异。具体的挑战体现在以下两个层面。
(1)依赖层面
通常,我们开发的ML模型依赖于几个要素,如数据、算法和/或参数。在实验过程中,这些要素会随着时间的推移而改变,从而生成不同的版本。不同的版本会导致不同的模型行为,通过特定版本的数据、算法和参数会生成特定的模型。ML项目中拥有多个版本的数据、算法、参数,但没有特定的策略来处理不同的版本,这可能会使我们失去对ML系统的控制。创建数据和参数的版本镜像可以帮助我们跟踪不同的版本,但是版本控制有其自身的成本,例如,随着时间的推移而需要维护多个版本。
传统的软件系统采用模块化设计来维护整个系统,你可以改变一个部分而不干扰其他部分。与传统的软件系统相比,ML系统的组件之间没有如此清晰的界限。ML 管道使用数据版本、算法版本和/或不同的参数,前面提到的这些要素的任何更改都会触发新的模型版本的生成。
(2)管理层面
通常生产环境中的ML系统的目标是同时运行和维护数十个或数百个模型,而这会带来管理上的挑战。例如,如何监控模型的整个生产管道?如何更新或分配模型的资源配置?
为了自动化和加速ML生命周期管理,我们需要一个策略或工作流来帮助我们持续跟踪数据、参数、超参数及实验结果等。在某种程度上,它有助于实现更好的管理和协作,因为手动记录实验过程的效率不高且容易出错。
庆幸的是,近几年MLOps开始走进数据科学家的视野,我们也越来越频繁地听到MLOps这个词,这是一个将类似DevOps的实践带入ML领域的概念,是专注于高效且可靠地进行ML模型的规模化开发、部署、管理和运维的过程,以优化和扩展工业环境中的ML生命周期,同时保证ML项目的可重复性和可追溯性。MLOps的实践弥合了开发(学术环境)和运维(生产环境)之间的差距,使运行ML系统的不同团队之间能够更好地协作和沟通。MLOps正在成为企业在现实世界中利用ML优势的必要技能或必经实践。
令人遗憾的是,现在并没有很多资源可以告诉工程师和科学家如何构建可投产的ML模型。市面上的很多书和课程会介绍如何训练ML模型或如何构建软件项目,但很少有书和课程将这两个世界融合起来,介绍如何构建由ML驱动的实际应用。而本书讲解了ML驱动实际应用时所经历的每一步,旨在通过分享笔者和其他有经验的从业者的方法、代码实例和建议,帮助读者完成ML项目的投产(这也是MLOps的核心目标)。本书中的内容将涵盖由ML驱动的应用程序(业务)所需的设计、构建、部署和运维等实用技能,读者可以通过学习本书的内容来践行符合自己业务的MLOps实践,以加快ML项目的交付,减少ML项目所需的劳动力,例如一些人工工作,如手动训练和重新训练模型、跟踪实验结果、手动发布和部署模型等。
如果我们把MLOps集成到ML的开发过程中,那么无须在数据科学家和运维团队之间来回折腾就可以实现更快的模型部署和优化周期,而且在向生产环境添加新模型或更新现有模型时也无须付出巨大的努力。
MLOps可以分为多种实践:自动化基础架构构建,数据科学实验,模型重要部分的版本控制、部署(打包、持续集成和持续部署)、安全和监控。
将MLOps方式带入ML模型开发中,可以确保将模型真正投入生产,使模型部署周期更快、更可靠,减少手动工作和不必要的错误,并将数据科学家的时间从不能体现他们核心能力的工程任务中解放出来。
如果你的ML之旅仍处于早期阶段(如概念验证阶段),那么可以将ML模型的开发方式转变为MLOps方式,MLOps方式能够避免繁重的流程。在MLOps方式或框架下工作,通过将开发工作转移到版本控制上,可以自动执行重新训练和部署的步骤。虽然在这个阶段中强大的开发框架和管道基础设施可能不是优先级的,但是早期阶段在自动化开发过程中付出的任何努力都将在以后得到回报,并从长远来看可以有效地减少ML“技术债”。这也是本书希望传达给读者的实践MLOps的有效方式。
刘中华
哈佛大学统计学博士,香港大学博士生导师
前 言
毫无疑问,在过去的几年里,机器学习(ML)[ ML,Machine Learning的简称,如无特殊说明,本书中的ML均代指机器学习。]正在逐渐发展成为当今商业和软件工程领域的热门名词,由ML驱动的应用呈爆发式增长,如推荐系统、精准营销、广告系统等。市面上ML方面的图书和文章也越来越多,细心的读者会发现ML相关图书多集中在不同机器学习算法的原理、算法是如何工作的及如何通过数据进行模型训练等方面的理论和实践上,而对于如何构建由ML驱动实际应用的项目工程方面,如数据收集、存储,模型部署、管理及监控运维等方面的书却很少见,这些方面没有得到足够的重视。在企业应用中,除了一线科技巨头公司,也很少看到针对商业问题部署和管理ML的解决方案,而这部分正是本书试图去介绍和实践的内容——MLOps(机器学习运维的简称)。
为了成功地给用户提供ML产品,数据科学家需要做的不仅是简单地训练一个模型,还需要将产品需求转化为ML的问题来思考,并为此不断地收集数据,在模型之间进行有效迭代,在生产中验证模型,并以稳健的方式部署和管理它们。有过ML生产经验的读者能够体会到,学术环境中工作的算法及模型和现实生产系统所需的条件之间存在着显著的差异。在生产过程中,除了需要关注建模时基于的模型假设在现实中的真实表现,还需要关注性能瓶颈及后期模型更新迭代等一系列问题。本书中介绍的概念、技术、工具、框架和方法论都将告诉我们如何面向生产来思考、设计、构建和执行ML项目,进而实现整个ML生产化流水线的实践。
如果你是一名数据科学家或ML工程师,在阅读本书时可能会质疑:“我为什么要关心MLOps?我已经把模型做出来了,线下测试效果都很好,把它们带到生产中不是IT团队的工作吗?”这对于拥有独立IT/数据科学或算法部门的一、二线科技公司来说,你的质疑是没错的,但对于大多数刚开始接触数据科学和ML的公司来说,实际情况是设计算法、训练模型的人也将是部署模型和管理模型的人,而这两部分工作的关注点、知识结构及使用的工具都很不同,数据科学家需要关注数据质量、特征工程、模型的设计与训练等,而部署模型的人更多关注的是工程问题,如服务化、并发、低延时、监控、模型零停机更新、可扩展性等,其中困难之一在于人才的稀缺。即使这些公司能够聘请有才华的ML工程师和数据科学家,在2020年,大多数企业仍然需要花费31~90天的时间来部署一个模型,而18%的公司花费的时间超过了90天,有些公司甚至花费了一年多的时间来实现生产化。
企业在开发ML项目时面临的主要挑战,如模型版本控制、可重复性和扩展性,与其说是工程性的,不如说是科学性的,这使得具备良好MLOps知识和工程化经验变得非常重要和宝贵。
值得庆幸的是,我们可以借鉴软件工程领域DevOps已有的成熟的实践经验和教训。在添加数据和模型元素后,MLOps也将成为ML领域的关键突破。这是一种“机器学习”与“运维”相结合的解决方案,简单地说,就是数据科学家、研发人员和平台工程师之间的协作和沟通实践,可以优化和加速ML项目的生产生命周期。
实践MLOps意味着遵循标准化和流程化路径来自动化运行和监控ML部署工作流程的所有步骤,包括数据和基础设施管理、模型学习、测试、集成、部署、发布和实时监控。与软件开发一样,MLOps需要一套工具和框架生态系统,将ML项目过程标准化,为数据科学家与其他项目成员创建一个协作环境,这是一种缩短将模型全面投入生产所需时间的解决方案。
虽然越来越多的ML从业者开始意识到MLOps的必要性,但出于多种原因,MLOps可能很难在业内迅速普及和应用。
?这仍然是一个相对较新的领域,市面上还没有大量的学习资源和实践案例。
?不同于DevOps,这一领域的技术非常复杂且应用广泛,涵盖了ML模型的整个生命周期,从数据到实验、训练、模型管理、服务和监控等,这意味着从何处开始及如何将各个部分组成一个连贯的整体成为一个巨大的挑战。
?这一领域所需的技能和经验范围同样广泛,这意味着需要对各个领域都有实战经验的“全栈工程师”来推进MLOps的实践,这类人才在一线科技巨头公司之外的公司内并不常见。
笔者在算法领域工作有十多个年头,经历过算法模型在生产化时遇到的各种让人头痛的工程问题,也曾经自行研发和带领团队开发过多个不同侧重点的算法平台来试图解决这些问题。近几年,笔者也在更具覆盖性和迭代性的MLOps领域获得了丰富的实践和落地经验。笔者期望能把自己的实践经验分享给同样在经历“ML 生产化痛苦”的同行,这也是写作本书的初衷。
读者对象
本书的读者对象包括那些希望生产化ML项目,为企业提升生产力并改善业务状况的数据科学家、ML算法工程师、分析师、ML软件架构师、ML产品负责人或ML 项目经理,以及希望使用MLOps原则和技术在生产中构建、部署和维护ML系统的商业和技术领导者。本书假设读者对ML的基本概念和编程比较熟悉,笔者将主要使用Python语言进行技术举例,并假设读者熟悉其语法和编程。如果你具备一定的编程经验和一些基础的ML知识,并想构建由ML驱动的产品,那么本书将会为你提供从产品创意到生产的整个过程的实战参考;如果你是一名ML产品经理,不懂代码,建议你与数据科学家合作,这样可以跳过一些代码示例,从而理解ML从开发到生产化的过程。
本书特色
本书的重点聚焦在工程化阶段,不会使用编程语言从零开始实现算法,而是通过使用更高层次抽象的库和工具来保持ML 项目生命周期的实用性和技术性。笔者将首先构建一个简单的端到端的ML应用实例,以ML项目生命周期为主线,通过逐步增加MLOps功能(组件)的方法,终呈现MLOps的全貌。
在本书中,为体现实践性和实用性,笔者会使用代码片段来说明一些关键概念和流程。学习ML好的方法是通过实践来学习,所以笔者也鼓励读者通过本书中的例子,领会实践思路,来构建你自己的用ML驱动的应用程序。
此外,本书是对ML工程实践和设计的全面回顾,对于ML工程经验丰富的读者,你可以按照任何顺序阅读本书各章节,因为它们涵盖了MLOps框架中涉及的不同方面,而且没有直接的依赖关系。对于刚入行的读者,建议按照本书章节顺序阅读,这可以帮助你理解MLOps框架的搭建思路。
本书的整体结构
本书的整体结构可以分为三个部分,其中部分是第1~3章,为MLOps框架的实现做了前期准备,该部分主要介绍MLOps框架下ML项目涉及的基础内容及实现MLOps时需要准备的事项。第二部分是第4~8章,是MLOps框架实现的主体部分,该部分通过将实验环境下创建的模型逐步升级至投产所需的功能和能力来展现MLOps从0到1的搭建过程。后一部分是第9章,该部分对市面上一些相对成熟的MLOps产品进行了对比和总结,并给出了MLOps的一些设计原则与成熟度评估标准以供参考。
第1章 MLOps概述
本章介绍MLOps涉及的基础概念,希望在后续章节用到这些概念的时候大家能拥有共同的理解。另外,本章也简单提到了MLOps框架下的工程化实践所涉及的内容,及其对ML模型真正投入生产时应起到的关键作用。
第2章 在MLOps框架下开展ML项目
本章介绍在MLOps框架下开展ML项目需要了解的基础知识,包括业务范围的界定、研究与探索阶段需要达成的目标、模型开发阶段需要注意的细节,以及在ML项目中,团队需要哪些角色及团队的分工等。
第3章 MLOps的基础准备:模型开发
本章以流失模型为例,展示了常规的业务目标的定义、ML目标的确定、数据处理、特征工程及模型创建的过程。这也是我们常见的在研究阶段做的事情。后面章节从生产的视角,在此基础上逐步增加功能模块,这个逐步升级的过程也可以看成MLOps的搭建过程。
第4章 ML与Ops之间的信息存储与传递机制
本章介绍在ML模型开发与生产之间创建信息传递的机制,该机制将使得ML项目的生命周期更加完整和可管理。在MLOps框架里,ML(模型开发)与Ops(生产)是相对独立的两个过程,这也导致这两个过程之间缺乏传递信息的机制。信息存储与传递机制的建立主要是通过中心化的ML实验跟踪、A/B在线实验、ML模型注册、特征存储等组件来实现的,本章主要围绕这几个组件的设计和实现来搭建MLOps底层的信息“地基”。
第5章 模型统一接口设计及模型打包
本章介绍将实验阶段创建的模型、模型代码及依赖的数据进行标准接口创建的方案。在创建软件时,编写抽象类来帮助定义类可以实现和继承不同接口,这通常是很有用的。通过创建一个基类(接口),可以定义一个标准,简化整个系统的设计,明确每个方法的功能和边界。这样做有利于推理服务的快速生成,方便客户端的调用和使用方的理解,对于后期模型的运维也是有益的。此外,模型的打包是从实验环境向其他环境迁移的必要步骤,也是本章介绍的内容之一。
第6章 在MLOps框架下规模化部署模型
本章介绍如何将实验阶段的ML模型规模化部署到MLOps框架内,通过模型即服务的设计来实现ML模型和将代码自动部署为Docker镜像,自动生成统一的推理服务,并将模型工件提交至中央存储。每个模型都遵循同样的操作方式,进而实现部署的规模化,并在第4章实现的模型注册和中心化存储的基础上实现规模化的管理。
第7章 MLOps框架下的模型发布及零停机模型更新
本章介绍模型部署和发布的关系,从风险控制的角度考虑,将模型部署到生产环境时不会立即接收用户流量,而是要在选择发布策略并进行局部测试后,没有发现问题的情况下,再逐步替换旧版本的模型,以接收全部用户产生的流量。此外,对于模型需要频繁更新的场景,如新闻、电商类的线上推荐,需要实现零停机模型更新机制,避免手动操作影响系统的稳定性。
第8章 MLOps框架下的模型监控与运维
本章介绍ML 项目生命周期的后一个环节,即模型的监控和运维,主要是为解决模型衰退、模型持续训练的触发问题而设立的。通过设计实时识别数据漂移、概念漂移、模型错误、推理服务性能和推理服务健康度等指标,以及记录相关日志信息,来监控模型的性能和服务的健康度,以保证模型在生产中是安全的、健康的和“新鲜的”。
第9章 对MLOps的一些实践经验总结
本章介绍市面上一些成熟的MLOps产品与开源框架的功能,以及各自聚焦的领域,并给出MLOps 架构成熟度评估标准,方便开发者依据自己的业务场景进行相应的判断与扩充,并分享了一些笔者在MLOps实践中总结的经验和搭建原则,供读者参考。
|
|