作者 | Caleb Kaiser

译者 | 香槟超新星

出品 | CSDN(ID:CSDNnews)

封面图源自视觉中国

在软件工程的诸多领域内,生产用例是相当标准化的。以Web开发为例,要在Web应用中实现身份认证,你不会去创造一个数据库,自己写出散列功能,或者去设计一个新的认证方法。你会从几个明确定义的方法之中选一个,并利用标准的工具手段。

然而,对于机器学习来说,这种标准化还不存在。想要建立一个从模型训练到部署的一体化pipeline,团队不得不自己构建解决方案,基本上都是从零开始。

因此,该领域对于许多工程师来说都是触不可及的,而进一步,对于那些没有能力请专家的公司来说,也是如此。

但是,这种局面正在发生变化。模型的生产化正在变得越来越常规化。方法正在逐步标准化,工具的选择正在逐步成熟,到最后,非专业的ML工程师的也能搭建出软件了。

“将模型投入生产”是什么意思?

只要看一看你每天使用的那些软件,Gmail、Uber、Netflix,或者任何哪个你喜欢的社交媒体平台,你就会看到许多由机器学习驱动的功能:自动完成电子邮件,语音转文字,对象检测,ETA预测等。

虽然这些模型背后的数学是机器学习领域的科研人员要操心的事情,但能将其转化为产品的架构却应该为所有开发者所熟知:

从软件工程的角度来看,一个训练好的模型也只是一个API罢了,将模型投入生产意味着将其部署为一个微服务(microservice)。

注意:其他形式的模型部署(例如,对于没有连接到互联网的设备)也是存在的,但那不是本文的重点。

你想搭建出类似Gmail的Smart Compose这样的东西吗?把一个语言模型部署为web服务,用文本ping终端,然后在你的前端显示预测结果。你想实现一个像Facebook的推荐标签(Suggested Tagging)那样的东西吗?还是同样的流程:部署一个图像识别模型,然后就像使用其他web服务一样了。

但是,虽然用手比划着对别人说“把你的模型部署成微服务就好了”是很容易的,但如何做到却是个很有挑战性的问题。

不久前,想要部署一个实时推理模型,还需要先回答几个问题:

  • 你要如何编写一个能从你的模型中生成预测结果的API?

  • 将该API部署到生产中的最佳方式是什么?

  • 如何实现生产型Web服务所需要的所有基础设施功能?比如自动缩放、监控、负载均衡、滚动更新等等。

根据你模型的特性的不同(它是用什么框架训练出来的,需要多少算力和内存,能处理什么类型的数据等等),答案可能会有很大的差异。

这就是为什么大型科技公司有专门的ML基础设施团队,也是大多数初创公司在生产中用不起ML的原因。

而现在,上面的问题都有了标准答案。

要想从你的模型中生成预测,你就用你的框架所附带的服务库(TensorFlow/TF Serving,PyTorch/TorchServe)。要想把你的模型封装成API并部署,你需要使用一个模型服务平台(请容我无耻的插播一句:我参与Cortex的维护,它是我们的开源模型服务平台,地址:https://github.com/cortexlabs/cortex)。

现在,任何一个软件工程师拿到一个模型以后,无论这个模型是由他们的数据科学团队训练好的,还是他们微调以后的开源模型,又或者只是一个普通的预训练模型,都能够把它变成一个web服务投入生产了,而不需要非得成为机器学习或Kubernetes专家。

举例:文本生成并不是只有Gmail的Smart Compose能做到

如果你在过去几年中用过Gmail,你一定对Smart Compose很熟悉。在你输入邮件内容时,它负责让Gmail给出一些建议的回复。

虽然Google肯定是有一个复杂的需要大量投资的ML pipeline的,但如果你想搭建一些模仿Smart Compose功能的东西,你不需要Google那样的资源就可以做到。

这方面的一个例子:AI Dungeon,一款由ML驱动的choose-your-own-adventure游戏。(地址:https://aidungeon.io/)

从底层来看,AI Dungeon 是 OpenAI 的 GPT-2(一种最先进的语言模型)微调后的版本,被部署为 Web 服务的形式。用户将他们的词汇提交给模型微服务,然后它就会回复一个故事。

介绍一下,GPT-2是非常大的。一个训练好的模型超过5GB,进行一项预测能够完全占用GPU。在不久前,探索如何将其大规模地部署为微服务,是一个重大的基础设施项目。你需要:

  • 将其托管到有足够空间/GPU来为预测服务的实例上。

  • 配置autoscaling来处理任意数量的并发用户。

  • 实施各种成本优化方案,以保持你的云计算总花销在可控范围内。

而这每个任务中都包含许多需要解决的子问题。你autoscale的时候,是应该依据内存利用率,还是依据队列中的请求数量?你是否能顺利地处理故障切换(failover),来让自己可以放心地通过现货实例来节省成本?

在谷歌,这些事情都是有ML基础架构团队负责的,而AI Dungeon则是仅由一位工程师独立打造出来的。

正如Nick Walton(AI Dungeon背后的工程师)在其关于将AI Dungeon扩展到超过100万用户的文章中所解释的那样,他所要做的就只是编写他的预测API,并让他的模型服务平台(Cortex)实现基础架构的自动化。(文章地址:https://medium.com/@aidungeon/how-we-scaled-ai-dungeon-2-to-support-over-1-000-000-users-d207d5623de9)

注:即使对那些不熟悉转移学习的人来说,AI Dungeon用很少的数据获得最先进的结果的故事也非常有趣。

设计模型应该是很有挑战性的。

而将它们投入生产则应该是很枯燥的。

几年前,生产型ML的瓶颈会限制AI Dungeon的产生。而现在,AI Dungeon只是众多ML原生创业公司中的一个。

比如说Glisten,它就将多个模型结合在一起,从而产出一个可以用来从图像中提取产品信息的API。

图源:Glisten.ai

尽管Glisten每月要处理各个公司成千上万的产品,但它也只是一家只有两人的初创公司而已。只有他们不需要基础设施团队,这一点才有可能实现。

而且,生产型ML的大众化并不仅仅只影响着初创公司。比如说,下面这位工程师,就决定在被隔离期间部署一个对话模型,并录下自己对着对话模型说话的视频,以此来打发时间。

视频地址:https://youtu.be/ZnjlV2-qD1c

这些只是工程师们正在着手的项目中的几个例子,他们的资源很少,而且通常也缺乏DevOps的专业知识。然而这些项目之所以重要,不仅仅是因为它们本身就很有趣,还因为它们代表了机器学习生态系统中的一个进步。

随着机器学习生产化问题的解决,ML科研人员和软件工程师之间的壁垒被打破了。研究方面的突破能更快地体现在产品的特性上。结果就是,我们所有人都会从中受益。

GitHub链接:

https://github.com/cortexlabs/cortex

原文链接:

https://towardsdatascience.com/production-machine-learning-isnt-hard-anymore-932bd91e138f

本文为CSDN翻译文章,转载请注明出处。

推荐阅读

  • 饿了么交易系统5年演化史

  • 360金融首席科学家张家兴:别指望AI Lab做成中台

  • 我们想研发一个机器学习框架,6 个月后失败了

  • 那个分分钟处理 10 亿节点图计算的 Plato,现在怎么样了?

  • 中国 App 出海“变形记”

  • 詹克团反攻比特大陆:一场失去人心的自我挽留

  • 你点的每个“在看”,我都认真当成了AI

生产型机器学习已经没那么困难了?相关推荐

  1. 没那么简单,没那么困难

    10年前就总是口头上挂着说要去弄linux下的gcc编译,不幸这10年接触的项目都跟linux无缘,今天终于有机会折腾一下gcc-- 最大的感觉,gcc对语法的检查真是严格!vc各种放过我的地方,gc ...

  2. 二十英里法则--实现定下的目标,其实或许没那么困难(部分转载)

    心理学家吉姆·柯林斯有一个非常著名的"二十英里法则" 01 每天走二十英里的人为什么先到终点 从美国西海岸圣地亚哥到某个地方有大约有三千英里的路程,这段路程地貌十分地复杂,而且经常 ...

  3. 饿了么交易系统5年演化史

    作者 | 挽晴 来源 | 阿里巴巴中间件(ID:Aliware_2018) 个人简介: 2014年12月加入饿了么,当时参与后台系统的研发(Walis+Javis=>Walle),主要面向客服和 ...

  4. css修改select选择框option被选中的背景颜色_这五个有用的 CSS 属性完全被我忽视了...

    作者 | Desiré译者 | 苏本如,责编 | 郭芮头图 | CSDN 下载自视觉中国出品 | CSDN(ID:CSDNnews) 以下为译文: 各位网友,大家好!?今天,我想在这里和大家分享一些我 ...

  5. 比 TensorFlow Lite 快 15.6 倍!业界首个移动 GPU BNN 加速引擎 PhoneBit 开源

    头图 | CSDN 下载自视觉中国 在过去的几年里,深度神经网络(DNN)已经在计算机视觉和其他领域取得了巨大的进展.然而,由于深度神经网络较高的计算复杂度,以及移动设备性能和功率限制,导致深度神经网 ...

  6. 如何快速在 Springboot 中集成拦截器? | 原力计划

    作者 | 才疏学浅 责编 | 夕颜 出品 | CSDN(ID:CSDNnews) 话不多说,直接上货! 拦截器的作用 拦截器提供了一种机制,在访问action前后进行一些操作,因为拦截器的这个特性,那 ...

  7. 任天堂连遭数据泄露,《动森》太火爆惊动黑客?

    [编者按]任天堂 Switch 在今年大卖特卖,甚至被炒成了理财产品.但用户的激增,也给黑客带来了可乘之机.不久前,任天堂确认超过 16 万账户被黑客入侵.而近日又爆出了史上最大的数据泄露. 作者 | ...

  8. 仅需 5 步,用 JavaScript 直接通过前端发送电子邮件

    作者 | Mateusz Iwaniuk 译者 | 明明如月,责编 | 夕颜 出品 | CSDN(ID:CSDNnews) 文章配套代码:  https://github.com/iwaniukooo ...

  9. 华为副总裁回应应用删除用户图片;美国拟允许华为参与 5G 标准建设;Firefox 76.0 发布​ | 极客头条...

    整理 | 屠敏 头图 | CSDN 下载自东方 IC 快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦 ...

最新文章

  1. 运维企业专题(9)RHCS集群工具介绍
  2. HDR-100-24N LRS-100-24 漏电测量
  3. NLP、CV、ML全覆盖,这份私藏论文清单你一定要看看
  4. leetcode 162. Find Peak Element | 162. 寻找峰值(二分法找局部最大值)
  5. 【Paddle 经验分享】利用PaddleHub 2.x 完成文本分类训练的坑
  6. Django---Model操作
  7. 【leetcode】Search for a Range
  8. Android Canvas简单使用
  9. 动图,用Python追踪NBA球员的运动轨迹
  10. 手机app通达信添加自定义公式(分时T+0)为例子讲解
  11. linux不显示无线网卡驱动安装失败,无线网卡在Linux下安装
  12. 动手深度学习PyTorch(三)模型选择、欠拟合和过拟合
  13. AppData文件夹下Local,Locallow和Roaming
  14. 兼容android模拟器的微信apk,Android模拟器中安装apk的方法
  15. 马斯克:让我成功的其实是工程思维
  16. java poc_无回显命令执行PoC编写指南(Apache Shiro Java反序列化)
  17. Kruise Rollout v0.2.0 版本发布:支持 Gateway API、StatefulSet 分批发布等能力
  18. easyui treegrid
  19. CVE-2021-30461 - VoIPMonitor未授权远程代码执行漏洞
  20. Linux安装mysql详细步骤

热门文章

  1. shiro多realm验证之——shiro实现不同身份使用不同Realm进行验证(转)
  2. 设置grep高亮显示匹配项
  3. 【译】使用Kotlin和RxJava测试MVP架构的完整示例 - 第1部分
  4. 存储能否导致ESXi网络性能问题?
  5. 单据自动转换并审核的方法示例
  6. Elasticsearch2.2.0配置文件说明
  7. Bridge Pattern
  8. Java知识积累——String引用的判断问题
  9. Delphi开发的IOCP测试Demo以及使用说明。
  10. 图片1---前馈神经网络+反向传播神经网络