前言
现在所有人都在讨论机器学习,它正从一项学术研究转变成最令人兴奋的技术之一。从理解自动驾驶汽车采集的视频流到个性化药方,机器学习在每个领域里都变得更加重要。虽然模型架构和设计理念颇受关注,但是机器学习还没有建立起软件行业在过去 20 年中建立的标准化流程。本书将展示如何创建标准的自动化机器学习系统,并用它产出可复现的模型。
什么是机器学习流水线
机器学习领域在过去几年的进展令人吃惊。随着图形处理单元(graphics processing unit,GPU)、BERT、生成对抗网络(generative adversarial network,GAN)、深度卷积 GAN 等深度学习概念的流行,AI 项目的数量正在飞速增长,同时出现了大量的 AI 初创公司。很多商业组织越来越频繁地用最新的机器学习概念来解决各种业务问题。在寻找最佳机器学习解决方案的狂潮中,我们留意到了大家经常忽视的一些问题。对于模型的加速、复用、管理和部署等方面的工具和概念,数据科学家和机器学习工程师往往缺乏足够的信息来源。他们需要标准化的机器学习流水线来完成这些工作。
机器学习流水线实现了加速、复用、管理和部署机器学习模型的整个流程,并将流程标准化。软件工程在 10 多年前通过持续集成(continuous integration,CI)和持续部署(continuous deployment,CD)建立了类似的标准化流程。在过去,测试和部署 Web 应用是非常烦琐的工作,需要 DevOps 工程师和软件开发人员合作完成。在今天,这些工作被一些工具和概念大大地简化了,一个应用的测试和部署可以在几分钟内可靠地完成。数据科学家和机器学习工程师可以从软件工程的工作流中学到很多有用的知识。本书旨在带领你从头到尾地了解整条机器学习流水线,进而为机器学习项目的标准化贡献绵薄之力。
根据我们的经验,大多数需要将模型部署到生产环境中的数据科学项目是由小团队主导的。小团队很难从零开发自己的机器学习流水线,这会导致机器学习项目变成一场有始无终的闹剧。模型的性能可能会随着时间的推移而下降,数据科学家要花大量时间去修复数据漂移造成的问题,或者模型并没有被广泛使用。自动、可复现的流水线可以减少部署模型的工作量。这条流水线应该包括以下步骤:
● 有效地对数据进行版本控制,并且新数据会触发新模型训练任务;
● 校验收到的数据,对比数据,发现数据漂移;
● 为模型的训练和验证提供高效的数据预处理;
● 高效地训练机器学习模型;
● 跟踪模型训练进度;
● 分析并验证训练后或微调后的模型;
● 部署验证过的模型;
● 扩容部署后的模型服务;
● 在反馈循环中记录新训练数据和模型的性能指标。
这个列表不包含一个很重要的步骤:选择模型架构。我们假设你对此步骤已经非常了解。如果刚开始接触机器学习或者深度学习,那么以下资源将对你大有帮助:
● Fundamentals of Deep Learning: Designing Next-Generation Machine Intelligence Algorithms;
● 《机器学习实战:基于 Scikit-Learn、Keras 和 TensorFlow(第 2 版)》。
读者对象
本书主要针对想进一步产品化数据科学项目的数据科学家和机器学习工程师。在读本书时,你需要熟悉基本的机器学习概念,并了解至少一个机器学习框架(例如 PyTorch、TensorFlow 或 Keras)。本书的机器学习示例基于 TensorFlow 和 Keras 编写,但书中的核心概念适用于任何其他框架。
本书也适合想在组织内部加速数据科学项目的数据科学项目经理、软件开发人员和 DevOps 工程师。如果想了解自动化机器学习的生命周期,或者了解组织可以如何从中受益,那么本书介绍的工具链可以帮助你实现这些目标。
为什么选择TensorFlow和TensorFlow Extended
本书所有的流水线示例都使用 TensorFlow 生态圈内的工具,包括 TensorFlow Extended(TFX)。我们基于以下几个原因选择了这个框架。
● 在撰写本书时,TensorFlow 生态圈在机器学习领域的可用性是最强的。它包括很多有用的项目,也支持很多核心功能之外的库,比如 TensorFlow Privacy 和 TensorFlow Probability。
● 它广泛应用于各种生产环境中,拥有很活跃的用户群体。
● 它支持从学术研究到机器学习生产环境等各种各样的应用场景。TFX 和 TensorFlow 核心平台紧密集成,支持种类繁多的生产应用环境。
● TensorFlow 和 TFX 都是开源工具,在使用上没有任何限制。
不过,本书介绍的原则在其他工具或者框架中依然适用。
章节总览
本书会逐章介绍创建机器学习流水线所需的不同步骤,并通过示例项目展示这些步骤的原理。
第 1 章会对机器学习流水线进行概述,讨论它适合的场景,并描述流水线的所有步骤。这一章也会介绍本书用到的示例项目。
第 2 章会介绍 TFX 生态圈,解释各个任务如何相互通信,并描述 TFX 组件的工作原理。这一章也会介绍 ML MetadataStore 和它在 TFX 中的作用,以及 Apache Beam 如何协同 TFX 中的各个组件。
第 3 章会讨论流水线如何稳定地获取数据,还会介绍数据版本控制的概念。
第 4 章会解释如何用 TensorFlow 数据校验(data validation)高效地校验进入流水线中的数据。当新旧数据之间的差异变大并可能影响模型性能时,它会向你示警。
第 5 章会聚焦于如何用 TensorFlow Transform 做数据预处理(特征工程),从而将原始数据处理成机器学习模型可用的特征。
第 6 章会讨论如何在机器学习流水线中训练模型,还会解释模型微调的概念。
第 7 章会介绍用于评估模型的有用的指标(某些甚至能帮助你发现模型预测中存在的偏见)和一些解释模型预测结果的方法。7.5 节会解释当新版本在指标上有进步时,如何对模型进行版本控制。流水线中的模型可以自动更新到最新版本。
第 8 章会聚焦于如何高效地部署机器学习模型。我们会先基于 Flask 进行简单的部署,然后研究这种定制化模型应用的局限性。我们会介绍 TensorFlow Serving 以及如何设置服务实例,还会讨论批量处理功能,并指导你创建用于发起模型预测请求的客户端。
第 9 章会讨论如何优化模型部署以及如何监测模型的运行情况。这一章会介绍优化 TensorFlow 模型性能的策略,以及用 Kubernetes 进行基础部署的方法。
第 10 章会介绍用于机器学习流水线的自定义组件,从而帮助你摆脱 TFX 中标准组件的限制。无论是增加额外的数据读取环节,还是将导出的模型转化为 TensorFlow Lite(TFLite)模型,这一章的内容都将逐步讲解这些任务所需的步骤。
第 11 章会将前面各章的内容融会贯通。我们会讨论如何把各个组件组成流水线,以及如何在你的协同平台上设置它们。这一章会带你用 Apache Beam 和 Apache Airflow 完成一条端到端的流水线。
第 12 章会继续前一章的内容,我们会在 Kubeflow Pipelines 和 Google Cloud AI Platform 上带你完成一条端到端的流水线。
第 13 章会讨论如何将模型流水线打造成一个基于用户反馈进行改进的循环,也会讨论选用什么类型的数据来为将来的版本改进模型,以及如何将新数据输入流水线中。
第 14 章会介绍近年来快速发展的隐私保护机器学习方式,并会讨论 3 种保护隐私的方法:差分隐私、联邦学习和加密机器学习。
第 15 章会展望未来对机器学习流水线有可能产生深远影响的技术,以及对未来机器学习工程的看法。
附录 A 会提供简短的 Docker 和 Kubernetes 入门介绍。
附录 B 会提供如何在 Google Cloud 上设置 Kubernetes 的补充材料。
附录 C 会提供一些关于运行 Kubeflow Pipelines 的建议,包括 TFX 命令行界面的概述。
排版约定
本书使用以下排版约定。
黑体字
表示新术语或重点强调的内容。
等宽字体(constant width)
表示程序片段,以及正文中出现的变量名、函数名、数据库、数据类型、环境变量、语句和关键字等。
等宽粗体(constant width bold)
表示应该由用户输入的命令或其他文本。
等宽斜体(constant width italic)
表示应该由用户输入的值或根据上下文确定的值替换的文本。
此图标表示提示或建议。
此图标表示一般性注记。
此图标表示警告或警示。
使用示例代码
示例代码等补充材料可从 https://oreil.ly/bmlp-git 下载。
对于本书的评论和技术性问题,请发送电子邮件到 bookquestions@oreilly.com 或者 buildingmlpipelines@gmail.com。
本书旨在帮助你完成工作。一般来说,你可以在自己的程序或文档中使用本书提供的示例代码。除非需要复制大量代码,否则无须联系我们获得许可。比如,使用本书中的几个代码片段编写程序无须获得许可,销售或分发 O'Reilly 图书的示例光盘则需要获得许可;引用本书中的示例代码回答问题无须获得许可,将本书中的大量示例代码放到你的产品文档中则需要获得许可。
我们很希望但并不强制要求你在引用本书内容时加上引用说明。引用说明通常包括书名、作者、出版社和 ISBN,比如“Building Machine Learning Pipelines, by Hannes Hapke and Catherine Nelson (O'Reilly). Copyright 2020 Hannes Hapke and Catherine Nelson, 978-1-492- 05319-4”。
如果你觉得自己对示例代码的用法超出了上述许可的范围,欢迎你通过 permissions@oreilly.com 与我们联系。
O'Reilly在线学习平台(O'Reilly Online Learning)
40 多年来,O'Reilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们拥有独特的由专家和创新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O'Reilly 的在线学习平台让你能够按需访问现场培训课程、深入的学习路径、交互式编程环境,以及 O'Reilly 和 200 多家其他出版商提供的大量文本资源和视频资源。有关的更多信息,请访问 http://www.oreilly.com。
联系我们
请把对本书的评价和问题发给出版社。
美国:
O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街 2 号成铭大厦 C 座 807 室(100035)
奥莱利技术咨询(北京)有限公司
O'Reilly 的每一本书都有专属网页,你可以在那儿找到本书的相关信息,包括勘误表、示例代码以及其他信息 1。本书的网页是 https://oreil.ly/build-ml-pipelines。
1也可以通过图灵社区本书主页下载示例代码或提交中文版勘误。——编者注
要了解更多 O'Reilly 图书、培训课程、会议和新闻的信息,请访问以下网站:http://www.oreilly.com。
我们在 Facebook 的地址如下:http://facebook.com/oreilly。
请关注我们的 Twitter 动态:http://twitter.com/oreillymedia。
我们的 YouTube 视频地址如下:http://www.youtube.com/oreillymedia。
致谢
在本书撰写过程中,我们得到了很多杰出人士的支持。感谢每位提供过帮助的朋友!我们想在此做出特别感谢。
在本书的整个出版过程中,我们与 O'Reilly 所有人的合作都非常愉快。感谢编辑 Melissa Potter、Nicole Taché和 Amelia Blevins 给予我们强力的支持、不断的鼓励和深刻的反馈。同时感谢 Katie Tozer 和 Jonathan Hassell 一直以来的支持。
感谢 Aurélien Géron、Robert Crowe、Margaret Maynard-Reid、Sergii Khomenko 和 Vikram Tiwari,他们帮助审阅了本书并且提供了大量颇具建设性的建议和深刻的意见。他们的审阅使本书变得更好。感谢他们花了大量时间仔细审阅本书。
感谢 Yann Dupis、Jason Mancuso 和 Morten Dahl 对机器学习隐私章节的细致审阅。
许多杰出的谷歌员工也为我们提供了大量支持。感谢他们帮忙寻找和修复 bug,也谢谢他们创造了这些开源工具包!在此特别感谢以下谷歌员工:Amy Unruh、Anusha Ramesh、Christina Greer、Clemens Mewald、David Zats、Edd Wilder-James、Irene Giannoumis、Jarek Wilkiewicz、Jiayi Zhao、Jiri Simsa、Konstantinos Katsiapis、Lak Lakshmanan、Mike Dreves、Paige Bailey、Pedram Pejman、Sara Robinson、Soonson Kwon、Thea Lamkin、Tris Warkentin、Varshaa Naganathan、Zhitao Li 和 Zohar Yahav。
感谢 TensorFlow 社区、谷歌开发者专家社区和其中出色的成员们。我们向他们的支持表示诚挚的谢意。
感谢 Barbara Fusinska、Hamel Husain、Michał Jastrzębski 和 Ian Hensel 在各个阶段对本书做出的贡献。
感谢 Concur Labs 和 SAP Concur 的同事在讨论中给我们提供的灵感。在此特别感谢 John Dietz 和 Richard Puckett 对本书的大力支持。
汉内斯
感谢我伟大的伴侣 Whitney 在我撰写本书期间给我提供的巨大帮助。感谢她给予我持续的鼓励和反馈,并理解和容忍我在写作上花费大量时间。感谢我的家人,尤其感谢让我在这个世界上自由逐梦的父母。
本书的出版少不了好朋友的帮助。感谢我伟大的朋友兼导师 Cole Howard。我们共事的经历引发了我对机器学习流水线的思考,也启发了我撰写本书。感谢我的朋友 Timo Metzger 和 Amanda Wright,他们让我领悟到了语言的力量。感谢 Eva、Kilian Rambach、Deb 和 David Hackleman,没有他们的帮助,我不可能去俄勒冈州进修学位。
感谢前东家 Cambia Health、Caravel 和 Talentpair。当本书中的概念仍然处于襁褓状态时,是他们允许我在生产环境中实现了它们。
如果没有我的联合作者凯瑟琳,本书永远不可能出版。感谢她的友谊、鼓励和无尽的耐心。感谢命运在冥冥之中让我们相遇。能够与她一起完成本书,我非常高兴。
凯瑟琳
虽然我在本书中写了非常多的内容,但再多的文字也无法表达我对丈夫 Mike 的感激。感谢他的鼓励、照顾、建设性的讨论、讽刺的玩笑和细致的反馈。感谢父母在很早以前就给我播下了编程的种子——虽然种子发芽花了很长时间,但他们做的是对的!
感谢我有幸参与的那些伟大社区。我在西雅图 PyLadies、“数据科学女性工作者”和其他 Python 社区遇到了许多优秀的人。感谢他们的鼓励!
最后也要感谢汉内斯邀请我一起撰写本书!没有他,这一切都不可能发生。他的博学、对细节的追求和坚持都是本书成功的原因。和他共事的时光令我十分愉快!
更多信息
扫描下方二维码,即可获取电子书相关信息及读者群通道入口。