生产型机器学习已经没那么困难了?
作者 | 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
相关文章:

poj1330Nearest Common Ancestors 1470 Closest Common Ancestors(LCA算法)
LCA思想:http://www.cnblogs.com/hujunzheng/p/3945885.html 在求解最近公共祖先为问题上,用到的是Tarjan的思想,从根结点开始形成一棵深搜树,非常好的处理技巧就是在回溯到结点u的时候,u的子树已经遍历,这…
干货 | 时间序列预测类问题下的建模方案探索实践
作者 | 陆春晖责编 | Carol出品 | AI科技大本营(ID:rgznai100)背景时间序列类问题是数据分析领域中一类常见的问题,人们有时需要通过观察某种现象一段时间的状态,来判断其未来一段时间的状态。而时间序列就是该种现象某一个统计指…
Redis安装与源码调试
linux版本:64位CentOS 6.5 Redis版本:redis-3.0.6 (更新到2016年1月22日) Redis官网:http://redis.io/ Redis常用命令:http://redis.io/commands 1.安装Redis # wget http://download.redis.io/releases/redis-3.2.6.tar.g…

system pause in C#
方法一: Console.Write("Press any key to continue . . . "); Console.ReadKey(true); 注:也可用ReadLine()或Read(),但是只能对回车进行响应,不能达到anykey的效果。 方法二: 1) 在源文件using处加入using…

C#设置当前程序通过IE代理服务器上网
注意:以下设置只在当前程序中有效,对IE浏览器无效,且关闭程序后,自动释放代码。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices;public static …

计算机科学精彩帖子收集
linux源码 LXR 源自“the Linux Cross Referencer”,中间的“X”形象地代表了“Cross”。与 Source Navigator 类似,它也是分析阅读源代码的好工具。不同的是,它将源代码借助浏览器展示出来,文件间的跳转过程成了我熟悉的点击超链…
挑战王者荣耀“绝悟” AI,我输了!
作者 | 马超责编 | 伍杏玲出品 | CSDN(ID:CSDNnews)腾讯 AI Lab 与王者荣耀联合研发的策略协作型AI,“绝悟”首次开放大规模开放:5月1日至4日,玩家从王者荣耀大厅入口,进入“挑战绝悟”测试&…

java 注解类说明
一、类中注解 SuppressWarnings ("serial"); 关键字 用途deprecation使用了不赞成使用的类或方法时的警告unchecked执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型。fallthrough当 Switch 程序块直接通往下一种…

《ArcGIS Runtime SDK for Android开发笔记》——(13)、图层扩展方式加载Google地图...
1、前言 http://mt2.google.cn/vt/lyrsm225000000&hlzh-CN&glcn&x420&y193&z9&sGalil 通过图层扩展类的方式加载Google地图的是我们通常获取Google地图的一种方式,根据这种方式我们可以通过拼接地图瓦片Url字符串获取瓦片数据,关…
调试JDK源码-一步一步看HashMap怎么Hash和扩容
调试JDK源码-一步一步看HashMap怎么Hash和扩容 调试JDK源码-ConcurrentHashMap实现原理 调试JDK源码-HashSet实现原理 调试JDK源码-调试JDK源码-Hashtable实现原理以及线程安全的原因 还是调试源码最好。 开发环境 JDK1.8NetBeans8.1 说明:调试HashMap的 publ…
开源一年,阿里轻量级AI推理引擎MNN 1.0.0正式发布
在经过充分的行业调研后,阿里淘系技术部认为当时的推理引擎如TFLite不足以满足手机淘宝这样一个亿级用户与日活的超级App。于是,他们从零开始自己搭建了属于阿里巴巴的推理引擎MNN。1年前,MNN在Github上开源,截止目前获得了3.9k S…

人生在成败中进步
参考文献《佛经》 人生在成败中进步佛经中有云:“菩萨者,福慧深利,道观双流。”“福慧双修”、“福慧双全”是众生成佛的必由之道,也是众生修行的理想追求。人生中,虽然不可能人人都能成佛,但是佛经有云&am…

【原】YUI压缩与CSS media queries下的bug
大概是上个月,使用YUI压缩一个css文件后,发现只要是被压缩后的css文件有部分根本无法工作,一直都不知啥问题引起的,让我感到头疼。 今天发现了只要是在媒体查询中的样式无法起作用,于是才开始怀疑是media被压缩后引起的…
Spring源码分析【4】-Spring扫描basePackages注解
org.springframework.beans.factory.support.DefaultListableBeanFactory 重要数据结构 /** Map of bean definition objects, keyed by bean name */private final Map<String, BeanDefinition> beanDefinitionMap new ConcurrentHashMap<String, BeanDefinition&…

c语言c++语言中静态变量,函数详解
静态变量,静态函数对于一些c,c的初学者来说,造成了不少的困扰。昨晚和寝室的室友讨论到这 个问题,想了一下,作了一下总结:虽然说c和c在很多人的眼里就是孪生姐妹,其实还是有很大区别的。在这里分…
深度解析MegEngine亚线性显存优化技术
基于梯度检查点的亚线性显存优化方法[1]由于较高的计算/显存性价比受到关注。MegEngine经过工程扩展和优化,发展出一套行之有效的加强版亚线性显存优化技术,既可在计算存储资源受限的条件下,轻松训练更深的模型,又可使用更大batch…

2016-04-28
2019独角兽企业重金招聘Python工程师标准>>> 1.提交form表单之前的函数(校验不错):onsubmit"return A();".2.解析XML的方式:2.1.DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准,基于"树"(DocumentBuilderFactory).2.2.SAX的优点类似于…
Spring源码分析【8】-MyBatis注解方法不能重载
代码如下: 这是不可以的,会报错: 2016-08-18 11:36:00,267 [main] ERROR [org.mybatis.spring.mapper.MapperFactoryBean] - Error while adding the mapper interface com.unix21.mapper.UserMapper to configuration.java.lang.IllegalArgu…
不知道这 7 大 OpenCV 函数怎么向计算机视觉专家进阶?
作者 | Lazar Gugleta译者 | Arvin,责编 | 夕颜头图 | CSDN付费下载自视觉中国出品 | CSDN(ID:CSDNnews)计算机视觉和计算机图形学现在非常流行,因为它们与人工智能息息相关,它们主要的共同点是使用同一个OpenCV库&…

MySQL5.5复制新特性
MySQL5.5复制新特性一.MySQL5.5复制改进MySQL5.5版本对MySQL Replication进行了多项的改良,以提供数据的完整性,性能和应用灵活性更高水平。1.Semisynchronous Replication:主从之间的等待机制2.Slave fsync tuning:调整slave fsync包括sync-…

GitLab 8.7发布
日前,GitLab 8.7版发布。该版本中,添加了新功能和优化,并小幅提升了性能。\\8.7版本发布于8.6版本整整30天之后,跟上了每月22日次版本的进度。最新的版本增加了在单个问题上设置到期日期的支持以及以用户所在时区而不是UTC来显示所…
Java飞行记录器 JRockit Flight Recorder JFR诊断JVM的历史性能和操作
需要展开子树,复制堆栈跟踪,就可以查看到代码调用链,看到自己的业务代码,从而定位到最耗时的代码位置:

vi/vim: 使用taglist插件
本节所用命令的帮助入口: :help helptags :help taglist.txt 上篇文章介绍了在vim中如何使用tag文件,本文主要介绍如何使用taglist插件(plugin)。 想必用过Source Insight的人都记得这样一个功能:SI能够把当前文件中的宏、全局变量、函数等t…
学会这些Python美图技巧,就等女朋友夸我了
来源 | ZackSock(ID: ZackSock)Python中有许多用于图像处理的库,像是Pillow,或者是OpenCV。而很多时候感觉学完了这些图像处理模块没有什么用,其实只是你不知道怎么用罢了。今天就给大家带了一些美图技巧,让…

Linux下的softlink和hardlink(转)
Linux中包括两种链接:硬链接(hard link)和软链接(soft link),软链接又称为符号链接(symbolic link)创建命令:ln -s destfile/directory softlink #建立软连接 ln destfile hardlink #建立硬连接in…

ubuntu安装之后的最初几天一路杂记
我就随便写了啊,没那么正式,想到什么就写什么。 由于大四的毕业设计要做一个牵扯到linux的项目,最近不得不再次玩起了ubuntu,其实前一次(大二的时候吧)就已经在电脑上安装过一个ubuntu了,只不过…

百万级访问量网站的技术准备工作[转帖]
当今从纯网站技术上来说,因为开源模式的发展,现在建一个小网站已经很简单也很便宜,所以很多人都把创业方向定位在互联网应用。这些人里大多数不是 很懂技术,或者不是那么精通,而网站开发维护方面的知识又很分散&#x…
智能驾驶L2的黄金时代,打磨地图是关键
作者 | 自动驾驶从业者,中寰卫星黄亮出品 | AI科技大本营(ID:rgznai100)智能驾驶L2,以我们通俗的定义是,以高级辅助驾驶的产品为主的各种巡航产品,包括定速巡航,自适应巡航ACC,预见性…

css中的垂直居中方法
单行文字 (外行高度固定) line-height 行高, 将line-height值与外部标签盒子的高度值设置成一致就可以了。 height:3em; line-height:3em; 多行文字 图文结合(图和单行文字) 图文结合(图和多行文字…
U盘挂载,gedit,vi,文本模式中文乱码等等问题
U盘或硬盘挂载 首先,我们要查看一下磁盘的分区信息sudo fdisk -l (注意注意,是小写的L,不是1,也不是i) 这里可以看到我的硬盘情况,前面几个是win7系统下的C,D ,E ,F 盘。我现在是在图书馆,没…