HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

机器学习面临的挑战是工程问题,不是数据科学问题

  • 2020-07-22
  • 本文字数:3398 字

    阅读完需:约 11 分钟

机器学习面临的挑战是工程问题,不是数据科学问题

本文讲述了从数据科学转向机器学习工程的途径及意义。


本文最初发表在 Towards Data Science 博客上,经原作者 Caleb Kaiser 授权,InfoQ 中文站翻译并分享。


在过去 20 年,机器学习一直围绕着这样一个问题展开:我们能不能训练一个模型去做一些事情?


当然,有些事情可以是任何任务。比如,预测句子中的下一个单词、识别照片中的面孔、生成某种声音。我们的目标是想看一看,如果我们能够做出准确的预测,那么机器学习是否还有效。


多亏了数据科学家几十年来的研究工作,我们现在才有了如此多的模型,可以用来做很多事:


  • OpenAI 的 GPT-2(以及现在的 GPT-3),可以生成人们能够阅读的文本,效果还过得去。

  • 像 YOLOv5 这样的对象检测模型(官方版本的争论暂且不提)可以解析每秒 140 帧的视频中的对象。

  • 像 Tacotron 2 这样的文本到语音模型可以生成听起来像人类的语音。


数据科学家和机器学习研究人员所做的工作令人难以置信,因此,第二个问题便自然而然地出现了:


我们可以用这些模型来构建什么?以及我们如何才能做到呢?


这显然不是一个数据科学的问题,而是一个工程问题。为了回答这一问题,一门新学科应运而生:机器学习工程

机器学习工程是研究如何将机器学习应用到实际问题中

数据科学和机器学习工程之间的区别,一开始可能让人觉得有点难以捉摸,因此,让我们来看一看几个例子,对理解这一区别会很有帮助。

1. 从图像分类到机器学习生成的目录

图像分类和关键词提取分别是计算机视觉和自然语言处理的经典问题。


Glisten.ai 使用一组针对这两项任务训练过的模型创建了一个 API,从产品图像中提取结构化信息:



来源:TechCrunch


这些模型本身就是数据科学令人印象深刻的壮举。然而,Glisten API 是机器学习工程的一项壮举。

2. 从对象检测到防止偷猎者

一家小型的非营利组织的野生动物保护解决方案是利用技术来保护濒危物种。最近,他们升级了视频监控系统,加入了一个经过训练的对象检测模型,用来识别偷猎者。该模型的检测率已经提高了一倍。



来源:Silverpond


像 YOLOv4 这样的对象检测模型是数据科学的成功案例,而 Highlighter,用于训练模型的 WPS 平台,是一个令人印象深刻的数据科学工具。然而,WPS 的偷猎者检测系统是机器学习工程的一项壮举。

3. 从机器翻译到 COVID19 的登月计划

机器翻译是指使用机器学习将数据从一种形式“翻译”到另一种形式,有时是在人类语言之间,有时是在完全不同的格式之间。


PostEra 是一个药物化学平台,使用机器翻译将化合富“翻译”成工程蓝图。目前,化学家正在利用这个平台进行开源研究,以寻找针对 COVID19 的治疗方法:



来源:PostEra


开发一种能将分子转化为一系列“路线”(从一个分子到另一个分子的转换)的模型模型是数据科学的一大壮举。而构建 PostEra 平台是机器学习工程的一项壮举。

4. 从文本生成,到机器学习“地下城主”

OpenAI 的 GPT-2 在发布时,是有史以来最强大的文本生成模型。参数高达惊人的 15 亿个,它代表了 Transformer 模型的一大进步。


《AI Dungeon》是一款经典的地牢爬行者(dungeon crawler)游戏,但它有一个转折:它的地下城主其实是 GPT-2,对《选择:故事你决定》(Choose Your Own Advisence Stories)中的文字进行了微调:



训练 GPT-2 是数据科学的一项历史性壮举。用它建造一个地牢爬行者游戏,则是机器学习工程的一项壮举。


然而,机器学习工程面临的主要挑战是,它引入了一种全新的工程问题,这些问题我们目前还没有简单的答案。

机器学习工程包含哪些内容?

在较高的层次上,我们可以这样说,机器学习工程是指采用经过训练的模型并构建生产应用程序所需的所有任务:



为了让这一点更加具体,我们可以用一个简单的例子来阐明。


让我们回到《AI Dungeon》,由机器学习驱动的地牢爬行者。这款游戏的架构很简单:玩家输入一些文本,游戏调用模型,模型生成响应,然后游戏将响应显示出来。构建它的明显方法是将模型部署为微服务。


理论上,这应该类似于部署任何其他 Web 服务。用类似 FastAPI 之类的东西将模型封装在 API 中,用 Docker 将其容器化,部署到 Kubernetes 集群,并用负载平衡器将其公开。



来源:Cortex 推理架构


实际上,GPT-2 使事情复杂化了:


  • GPT-2 是庞大的。完全训练过的模型大小超过了 5 GB。为了提供服务,你需要一个配置有大型实例类型的集群。

  • GPT-2 是资源密集型的。单个预测可以锁定 GPU 很长一段时间。低延迟很难实现,单个实例无法同时处理多个请求。

  • GPT-2 是昂贵的。基于上述事实,将 GPT-2 部署到生产环境就意味着(假设你有相当大的流量),你将运行许多大型 GPU 实例,这会变得非常昂贵。


当你考虑到游戏发布后很快就拥有超过 100 万玩家时,这些问题就会变得更加严重了。


编写一个高性能的 API,使用 GPU 实例提供一个集群,使用 Spot 实例来优化成本,为推理工作负载配置自动缩放,实现滚动更新以便 API 不会在每次更新模型时崩溃——这是大量的工程工作,而且这还是一个简单的机器学习应用程序。


许多机器学习应用程序都需要一些共同的特性:如再训练、监视、多模型断电、批预测等,每一个特性都会显著提高复杂性。


解决这些问题是机器学习工程师(与机器学习平台团队合作,具体要取决于组织)所做的事情,而且由于大多数用于机器学习的工具都是为数据科学而不是工程设计的,这使得他们的工作变得更加困难。


幸运的是,这种情况正在改变。

我们正在为机器学习工程而不是数据科学构建一个平台

几年前,我们中的一些人从软件工程过渡到机器学习工程。我们花了几周的时间研究数据科学的工作流程,并编写胶水代码使机器学习应用程序正常工作,之后,我们就开始思考如何将软件工程原理应用于机器学习工程中。


例如,以《AI Dungeon》为例。如果他们正在构建一个普通的 API,一个不涉及 GPT-2 的 API,那么他们将会使用 Lambda 之类的东西,并在 15 分钟内启动他们的 API。然而,由于为 GPT-2 服务的机器学习特有的挑战,来自软件工程的编排工具将无法工作。


但是,为什么这些原理不能继续适用呢?


因此,我们开始研究机器学习工程的工具,这些工具应用了这些原理。我们的开源 API 平台 Cortex 使得机器学习工程师能够尽可能轻松地将模型部署为 API,使用任何软件工程师都熟悉的界面:



来源:Cortex repo


该 API 平台被《AI Dungeon》以及上面列出的其他机器学习初创公司用来部署他们的模型。其背后的设计理念,以及我们在 Cortex 的所有工作,都非常简单:


我们将机器学习工程的挑战视为工程问题,而不是数据科学问题。


对于 API 平台来说,这意味着我们将使用 YAML 和 Python 文件,而不是难以版本化、依赖隐藏状态并允许任意执行顺序的笔记本。我们没有使用带有“Deploy”按钮的 GUI,而是构建了一个 CLI,你可以通过它实际管理部署。


你可以将这一理念应用于生产环境中使用机器学习的许多挑战。


例如,可重复性不仅仅是机器学习的一个挑战。这在软件工程中也是一个问题,但我们使用版本控制来解决这一问题。虽然像 Git 这样的传统版本控制软件并适用于机器学习,但你仍然可以应用这些原理。DVC(Data Version Control,数据版本控制)就是这样做的,它将类似 Git 的版本控制应用于训练数据、代码及其生成的模型。



来源:DVC


那么,那些初始化模型和生成预测所需的样板文件和胶水代码文件又该如何处理呢?在软件工程中,我们会为此设计一个框架。


最后,我们在机器学习工程中也看到了这种情况。例如,Hugging Face 的 Transformer 库,为大多数流行的 Transformer 模型提供了一个简单的界面:



来源:Hugging Face


有了这六行 Python 代码,你就可以从 GPT-2 下载、初始化并提供预测,GPT-2 是最强大的文本生成模型之一。这六行 Python 代码所做的事情,即使是成熟的、资金充足的团队在三年前也难以做到。


我们之所以对这个生态系统如此兴奋,除了我们是其中一部分这一事实之外,还因为它代表了数十年来机器学习研究与人们每天面临的问题之间的桥梁。每当其中一个项目消除了机器学习工程的障碍,新团队解决机器学习问题就会变得容易多了。


在未来,机器学习将会成为每个工程师的一部分。几乎没有什么问题是机器学习不能解决的。这一切发生的速度,完全取决于我们能够以多快的速度开发像 Cortex 这样的平台,并加速机器学习工程的普及。


作者介绍:


Caleb Kaiser,Cortex Lab 创始团队成员,曾在 AngelList 工作,最初在 Cadillac 供职。


原文链接:


https://towardsdatascience.com/moving-from-data-science-to-machine-learning-engineering-68916173eaf3


2020-07-22 18:003182
用户头像
蔡芳芳 InfoQ主编

发布了 800 篇内容, 共 549.7 次阅读, 收获喜欢 2789 次。

关注

评论

发布
暂无评论
发现更多内容

华为云CDN加速,赋能企业数字化转型升级

YG科技

Tars-Cpp 协程实现分析

vivo互联网技术

协程 TARS

从原理聊JVM(二):从串行收集器到分区收集开创者G1

京东科技开发者

G1 JVM 垃圾回收器 java 企业号 4 月 PK 榜

率失真函数的性质

timerring

信息论与编码

华为云桌面——云端上“最卷的云”

平平无奇爱好科技

灵活高效,华为云桌面实现随时随地办公

YG科技

华为云CDN赋能企业数字化转型

YG科技

浅谈华为云CDN在互联网领域的应用场景落地

YG科技

NFT加密钱包交易系统开发搭建技术

薇電13242772558

NFT

华为云大数据BI方案为房地产行业数字化发展赋能

轶天下事

云计算,

从源码全面解析 ArrayBlockingQueue 的来龙去脉

做梦都在改BUG

Java 源码 ArrayBlockingQueue

4月26日-30日,KaiwuDB 在数字中国等你!

KaiwuDB

数字中国 KaiwuDB

华为云大数据BI解决方案,助力企业数字化运营

轶天下事

中国信通院“OSCAR开源生态建设沙龙”成功召开

中国IDC圈

开源

华为云桌面,如何为企业构建新型工作方式

平平无奇爱好科技

面试还不懂JVM调优,看这篇就够了

程序员小毕

程序员 面试 后端 架构师 jvm调优

企业上云,华为云桌面兼顾效率与安全

平平无奇爱好科技

企业数据的最后防线——华为云数据灾备

YG科技

云计算,

七大关键技术,华为云数据库GaussD承载金融级核心系统

平平无奇爱好科技

云计算,

NPM 实用命令与快捷方式

SEAL安全

JavaScript npm 企业号 4 月 PK 榜

摆脱终端束缚,华为云桌面助力企业数字化转型

平平无奇爱好科技

Matlab实现粒子群算法

Shine

三周年连更

PHP 中数组是如何灵活支持多数据类型的?

架构精进之路

php 数组 后端 三周年连更

华为云虚拟专用网络VPN常见问题解答

YG科技

华为云OBS,助力企业海量、安全、高可靠、低成本数据存储

轶天下事

云计算,

AI降临,前端启用面壁计划

京东科技开发者

人工智能 AI 前端 企业号 4 月 PK 榜

Guava的EventBus事件机制实现

Java你猿哥

Java 源码 ssm Guava EventBus

华为云桌面随需而至,让办公数字化触手可及

平平无奇爱好科技

复旦MOSS大模型开源了「中国版ChatGPT」,Github和Hugging Face同时上线

肥晨

三周年连更

THREE.JS实现炫酷的3D简历网站

知心宝贝

前端 后端 3D ThreeJS 三周年连更

面试官:介绍一下什么是缓存雪崩、缓存击穿、缓存穿透?

做梦都在改BUG

Java redis 缓存穿透 缓存击穿 缓存雪崩

机器学习面临的挑战是工程问题,不是数据科学问题_AI&大模型_Caleb Kaiser_InfoQ精选文章