商品详情
书名:MLOps实践——机器学习从开发到生产(全彩)
定价:106.0
ISBN:9787121431562
作者:李攀登
版次:第1版
出版时间:2022-04
内容提要:
在大数据时代,机器学习(ML)在互联网领域取得了巨大的成功,数据应用也逐渐从“数据驱动”阶段向“模型驱动”阶段跃升,但这也给ML项目落地带来了更大的困难,为了适应时代的发展,MLOps应运而生。本书从多个方面介绍了MLOps实践路径,内容涵盖了设计、构建和部署由ML驱动的应用程序所需的各种实用技能。
作者简介:
李攀登,非参数统计硕士, 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章 对MLOps的一些实践经验总结 254
9.1 机器学习和MLOps平台比较 254
9.1.1 聚焦传统机器学习与聚焦深度学习 254
9.1.2 聚焦分析探索与聚焦产品化 255
9.1.3 面向平民化数据科学与面向数据科学专家 256
9.1.4 专业化平台与端到端平台 256
9.2 自研MLOps平台 257
9.2.1 自研MLOps平台的经验总结 258
9.2.2 MLOps框架或平台的搭建原则 261
9.2.3 MLOps的架构参考 264
9.3 MLOps架构的成熟度评估 266
9.3.1 对业务需求的定义 267
9.3.2 数据准备 267
9.3.3 模型实验 268
9.3.4 模型部署 268
9.3.5 模型监控 269
9.3.6 模型的持续训练 270
9.3.7 关于MLOps架构成熟度评估的思考 271
9.4 本章总结 271
定价:106.0
ISBN:9787121431562
作者:李攀登
版次:第1版
出版时间:2022-04
内容提要:
在大数据时代,机器学习(ML)在互联网领域取得了巨大的成功,数据应用也逐渐从“数据驱动”阶段向“模型驱动”阶段跃升,但这也给ML项目落地带来了更大的困难,为了适应时代的发展,MLOps应运而生。本书从多个方面介绍了MLOps实践路径,内容涵盖了设计、构建和部署由ML驱动的应用程序所需的各种实用技能。
作者简介:
李攀登,非参数统计硕士, 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章 对MLOps的一些实践经验总结 254
9.1 机器学习和MLOps平台比较 254
9.1.1 聚焦传统机器学习与聚焦深度学习 254
9.1.2 聚焦分析探索与聚焦产品化 255
9.1.3 面向平民化数据科学与面向数据科学专家 256
9.1.4 专业化平台与端到端平台 256
9.2 自研MLOps平台 257
9.2.1 自研MLOps平台的经验总结 258
9.2.2 MLOps框架或平台的搭建原则 261
9.2.3 MLOps的架构参考 264
9.3 MLOps架构的成熟度评估 266
9.3.1 对业务需求的定义 267
9.3.2 数据准备 267
9.3.3 模型实验 268
9.3.4 模型部署 268
9.3.5 模型监控 269
9.3.6 模型的持续训练 270
9.3.7 关于MLOps架构成熟度评估的思考 271
9.4 本章总结 271
- 电子工业出版社有限公司
- 电子工业出版社有限公司有赞官方供货商,为客户提供一流的知识产品及服务。
- 扫描二维码,访问我们的微信店铺