"数据科学项目日益增多,每个项目在提出原型到生产的过程中都需要可靠的基础设施。使用《Effective数据科学基础设施》介绍的一些新技术和新工具,你将能建立一个适用于各类组织(无论是初创企业还是大型企业)的基础设施堆栈。 《Effective数据科学基础设施》可帮助你建立数据流程和项目工作流,为你开发项目带来强大动力。《Effective数据科学基础设施》呈现Netflix数据操作的**进工具和概念,并在此基础上介绍一种可定制的基于云的模型开发和MLOps方法,可轻松适应公司的特定需求。当团队把数据科学和机器学习应用于广泛的业务问题时,这些实用的数据流程将更高效地生成更完美的结果。 主要内容 ● 在云中处理计算和编排 ● 将基于云的工具耦合到一个内聚的数据科学环境中 ● 使用Metaflow、AWS和Python数据生态系统开发可复制的数据科学项目 ● 构建需要大型数据集和模型,需要数据科学家团队参与的复杂应用程序"
《Effective数据科学基础设施》由Netflix工程师Ville Tuulos撰写,以Metaflow为对象,介绍了数据科学所需要的基础设施,囊括数据准备、特征工程、模型训练、模型部署、服务和持续监控等环节。Metaflow专注于构建生产流程,更适合具有深厚工程和DevOps技能的大型专业数据科学团队。本书的目标读者为数据科学家、机器学习工程师、IT 技术人员和MLOps工程师。数据科学家在人工智能和算法方面非常精通,但软件开发能力通常不足。他们渴望有一套方法论和工具来促进从构建到部署的迭代过程,从而落实自己的想法。数据科学家不在意在一个孤岛。上开展数据挖掘和分析工作,他们更希望能够在离线、实时和批处理等场景中落实项目。IT技术人员对机器学习算法理论和模型细节并不了解,他们渴望本书能够提供一个机器学习流程的全貌,便于他们进行任务编排。此外,一些企业的中高层管理人员可通过本书获取MLOps管理理念,为制定AI项目管理和KPI考核提供参考依据。总之,与传统的软件工程师技能要求相比,MLOps工程师除了需要具备现代软件工程所要求的强大能力,还需要具备ML专业知识,具体包括ML模型训练、模型部署、模型监控和帮助企业落实架构、系统设计和故障排除等能力。
我在十几岁时,对人工智能产生了浓厚的兴趣。13岁时,我训练了我的第一个人工神经网络。我从零开始,用C和C 实现了简单的训练算法,这是20世纪90年代时探索该领域的唯一方法。此后,我继续学习了计算机科学、数学和心理学,以更好地理解这一庞大主题的基础。当时,机器学习(数据科学这个术语还不存在)的应用方式有时似乎更像魔术,而不是真正的科学或原理工程。
后来,我从学术界转向大公司和初创公司,此后,我一直在构建支持机器学习的系统。Linux等开源项目和当时新兴的Python数据生态系统对我的影响很大。Python数据生态系统提供了NumPy等包,与C或C 相比,这些包使得构建高性能代码更容易。除了开源的技术优势,我还发现围绕这些项目形成了十分创新、充满活力且广受欢迎的领域。
当我在2017年加入Netflix,受命从零开始构建新的机器学习基础设施时,我秉持着3个原则。首先,我们需要对全栈有一个原则性的理解数据科学和机器学习不是魔术,而需要成为一门真正的工程学科。其次,无论是出于技术角度还是因为其庞大的包容性领域,我都确信Python是新平台的基础。最后,归根结底,数据科学和机器学习是人类使用的工具。使用工具的唯一目的是提高工作效率,成功的工具还可提供令人愉悦的使用体验。
工具是由孕育其诞生的文化塑造的。我创建了开源工具Metaflow后,Netflix的文化对其产生了巨大的影响,该工具后来成为一个强劲的开源项目。Netflix的发展压力确保了Metaflow和我们对整个数据科学堆栈的理解都是基于数据科学家的实际需求。
Netflix给予其数据科学家高度的自主权,而这些数据科学家通常不是经过训练的软件工程师。这使我们要仔细考虑数据科学家在开发项目并最终将其部署到生产中时面临的所有挑战。Netflix的顶尖工程团队已使用云计算超过十年,已充分了解了云计算的优缺点,我们对堆栈的理解也深受他们的影响。
我撰写本书旨在与更多人共享这些经历。无论是开源领域、深有远见又无私共享的个人,还是聪明绝顶的数据科学家,都教会了我很多,我觉得我有义务回馈他们。本书肯定不是我学习旅程的终点,只是一个里程碑。因此,我很期待反馈。不要犹豫,赶快与我联系吧,分享你的经历、想法和反馈!
Ville Tuulos在Netflix公司设计并构建了用于数据科学的全栈框架Metaflow。目前,Ville在一家专业开发数据科学基础设施的初创公司担任首席执行官。
第1章 数据科学基础设施介绍 1
1.1 选择数据科学基础设施的原因 2
1.2 什么是数据科学基础设施 5
1.2.1 数据科学基础设施堆栈 6
1.2.2 支持数据科学项目的整个生命周期 8
1.2.3 不能以偏概全 9
1.3 良好基础设施的重要性 10
1.3.1 管理复杂性 11
1.3.2 利用现有平台 12
1.4 以人为中心的基础设施 13
1.4.1 自由与责任 14
1.4.2 数据科学家自主性 15
1.5 本章小结 16
第2章 数据科学的工具链 17
2.1 建立开发环境 18
2.1.1 云账户 21
2.1.2 数据科学工作站 22
2.1.3 笔记 24
2.1.4 归纳 27
2.2 介绍工作流 29
2.2.1 工作流基础 30
2.2.2 执行工作流 31
2.2.3 工作流框架 33
2.3 本章小结 35
第3章 Metaflow简介 37
3.1 Metaflow的基本概念 38
3.1.1 安装Metaflow 39
3.1.2 编写基本工作流 40
3.1.3 管理工作流中的数据流 44
3.1.4 参数 50
3.2 分支和合并 55
3.2.1 有效的DAG结构 56
3.2.2 静态分支 57
3.2.3 动态分支 61
3.2.4 控制并发 64
3.3 Metaflow实际应用 66
3.3.1 启动新项目 67
3.3.2 使用客户端API访问结果 69
3.3.3 调试故障 72
3.3.4 最后润色 76
3.4 本章小结 79
第4章 随计算层伸缩 81
4.1 什么是可伸缩性 82
4.1.1 整个堆栈的可伸缩性 83
4.1.2 实验文化 85
4.2 计算层 87
4.2.1 使用容器进行批处理 89
4.2.2 计算层示例 92
4.3 Metaflow中的计算层 98
4.3.1 为Metaflow配置AWS批处理 100
4.3.2 @batch和@resources装饰器 104
4.4 处理故障 107
4.4.1 使用@retry从瞬态错误中恢复 109
4.4.2 使用@timeout杀死僵尸 110
4.4.3 最后一种装饰器:@catch 111
4.5 本章小结 113
第5章 实践可伸缩性和性能 115
5.1 从简单开始:垂直可伸缩性 116
5.1.1 示例:聚类Yelp评论 117
5.1.2 实践垂直可伸缩性 119
5.1.3 为什么选择垂直可
伸缩性 124
5.2 实践水平可伸缩性 126
5.2.1 为什么选择水平可伸缩性 126
5.2.2 示例:超参数搜索 127
5.3 实施性能优化 130
5.3.1 示例:计算共现矩阵 131
5.3.2 加快工作流的方法 139
5.4 本章小结 140
第6章 投入生产 141
6.1 稳定的工作流调度 143
6.1.1 中心化元数据 145
6.1.2 使用AWS Step Functions和Metaflow 147
6.1.3 使用@schedule调度运行 152
6.2 鲁棒的执行环境 153
6.2.1 Metaflow包如何流动 155
6.2.2 为什么依赖管理很重要 160
6.2.3 使用@conda装饰器 162
6.3 稳定运行 167
6.3.1 原型开发期间的命名空间 169
6.3.2 生产命名空间 173
6.3.3 使用@project的并行部署 174
6.4 本章小结 177
第7章 处理数据 179
7.1 快速数据的基础 182
7.1.1 从S3加载数据 183
7.1.2 使用表格数据 188
7.1.3 内存数据堆栈 192
7.2 与数据基础设施的交互 194
7.2.1 现代数据基础设施 195
7.2.2 用SQL准备数据集 199
7.2.3 分布式数据处理 205
7.3 从数据到特征 210
7.3.1 区分事实和特征 211
7.3.2 编码特征 213
7.4 本章小结 218
第8章 使用和操作模型 221
8.1 生成预测 223
8.1.1 批处理、流式和实时预测 225
8.1.2 示例:推荐系统 227
8.1.3 批处理预测 232
8.1.4 实时预测 243
8.2 本章小结 248
第9章 全栈机器学习 249
9.1 可插拔的特征编码器和模型 250
9.1.1 为可插拔的组件开发框架 251
9.1.2 执行特征编码器 255
9.1.3 基准模型 259
9.2 深度回归模型 264
9.2.1 编码输入张量 266
9.2.2 定义深度回归模型 269
9.2.3 训练深度回归模型 272
9.3 总结所学 275
9.4 本章小结 277
附录 安装Conda 279