Caffe作者贾扬清:AI,从大数据演进到高性能计算

本期Robin.ly硅谷交流活动邀请到Caffe作者贾扬清博士与大家分享从Caffe到PyTorch的AI基础架构演进以及AI时代软件开发的趋势和挑战。他在现场与Robin.ly创始人Alex Ren对于Caffe和PyTorch的开发及软硬件协同设计进行了精彩的访谈对话,并回答了现场观众的问题。

以下为采访实录和问题摘要:

「 从Caffe 到 PyTorch 」

Alex: 最早的时候听说Caffe是你的一个side project,不是你论文的主要内容。当时开发Caffe的初衷是什么?中间经历过什么过程,可以给大家讲一下吗?

Yangqing: 主要的原因也是因为AI research,以前researcher写code,像Matlab之类的,很难reproduce。在2011年,2012年的时候大家还没有太强的reproduceable research的这样的想法,所以在AlexNet的paper出来之后呢,大家都没办法有一个比较reliable的平台,来实现它的结果。当时我们在Berkeley希望用Caffe来推动独立研究,所以当时内部开始试图来呈现它的结果,相当是一个于side results。整个过程大概做了两个月。

Alex: 后来到了Facebook之后继续做Caffe你有遇到什么新的问题吗?

Yangqing: Caffe因为已经六年多了,所以当时有很多历史遗留问题。最开始做Caffe的时候大家都是照着computer vision的模式来做的,所以很多design都是在CV方面比较make sense,在NLP等其他地方都相对比较难一些。当时整个modular design还没有太清楚。Facebook在15年的时候其实很多产品里都还在用Caffe的runtime来部署,但是后来整个flexibility都会有些问题,所以这也是我们后来写Caffe2跟PyTorch的原因。

Alex: 前段时间你们宣布了PyTorch1.0的发布,我记得Caffe主要是做production的,而PyTorch主要是research这个阶段,当你把它们合并在一起的时候,是希望解决什么问题呢?

Yangqing: 这个我们目前也是一个比较explorative的方向,我觉得整个行业大家都在往这个方向走。比如TensorFlow在TF2.0的announcement里面提到了eager mode,或者说是imperative mode。最大的一个挑战基本上是research和production,这两个 fundamentally是两个不太一样的priority。Research需要flexibility,一切都应该可以调;而Production是要performance的时候,最后总是会需要有一些相对比较flexible的地方。所以很多时候都是看具体的实际应用然后来consciously make some compromises。就比如说像计算机视觉,包括像推荐系统这种实在是太大规模,even 1% or 2% accuracy matters,在这种情况下我们会需要牺牲一些flexibility,来更加注重在performance上边。像一些新的应用比如说像自然语言处理机器翻译等,可能对于resource的要求没有那么高。我们可以sacrifice比如说10%的performance,对于model iteration的要求比较高,所以这个就更加偏向于research这边。

「 软硬件协同设计 」

Alex: 上次我跟你聊,你说到你比较关注硬件方面的发展。我想知道你的角度是什么,是software hardware co-design吗?

Yangqing: 更加偏向于software hardware co-design吧。CPU和GPU它的好处不光是在硬件上,而且是在软件上。最可怕的事情是什么呢?就是我们知道它很好,但是最后大家发现没人能在上边写程序,‘cause it’s too opaque。NVIDIA非常成功的原因是因为,我可以随便找一个人,花半天的时间,他就可以开始写CUDA code,只要他懂C++,我就能让他写CUDA code。NVIDIA,从04年CUDA出来以后到今天,NVIDIA把它整个software layer做的如此之好,使得它的入门门槛很低。如果我突然来一个FPGA,没有一个月的时间,没人能在上边写程序,所以说新的硬件最大的一个挑战不光是在硬件上,而且是在软件上。这也是为什么我对软硬件协同设计很感兴趣。

Alex: 也就是说它搭建了一个eco-system,给developer们有更方便的方法去用,对吧?

Yangqing: 对!

「 计算机领域的文化 」

Alex: Facebook也是少有的做比较顶尖的AI research的一个公司,你在里边带领AI infrastructure这块的一些研究。我知道Facebook,Google这样的公司有个特点,就是它有很多大牛都在一起工作。而很多别的公司经常有这种一山不能容二虎这种现象。我不知道你在这方面有什么体会,有什么心得可以分享?是什么样的文化使得Facebook在research这方面有个cutting-edge research的结果?

Yangqing: 我觉得更多的算是计算机领域的文化吧,比如说大家最近经常能够听到的消息比如像金融这个领域目前逐渐的越来越难吸引到顶尖的人才。一定的原因就是因为整个领域太封闭了,谁都不知道其他人在做什么。那么这个时候就有很简单的一个事,就是我们有句老话说的,叫独木难支嘛,如果一个领域大家都在钻着自己做自己的事情的话,有很多collective wisdom就很难被激发出来。而计算机这个领域的话,大家很多的想法,第一是说开源,第二是open research,第三是非常频繁的交流。有很多的平台本身就是,像我们用的Reddit啊,Hacker news都是一个很好的平台,包括Robin.ly等等,所以我觉得整个这样的一个文化使大家可以更快的把这个蛋糕做大,等到蛋糕做大了之后,谁都能从中获益。

Alex: 谢谢你提到了我们!你提到了Reddit,我看到了你Reddit上有篇评论,里边提了一个词叫unframework,因为当时是Caffe 2.0的时候你提的,能给我们解释一下是什么意思吗?

YangqingUnframework基本上是说以前大家在做AI的software的时候一个framework什么都有。当时六年前大家说Caffe,Torch跟Theano,就是一个framework,你在里头或者外头想做什么也很难。现在比如说,像我们有不同的硬件出来,有TPU,有visualization等等,逐渐有点类似于一个单元的 operation system,我做完一个operation system的时候不是说所有的事都完成就可以在上面装app和extension了。发展到今天,framework是一个很小的部分,外面有很多其他各种组件譬如说硬件,visualization等等。举个例子说PyTorch目前我们在跟Google合作来做一个Tensorboard,a very nice visualization tool for AI,它就是不光限制在一个framework,而是build different components,get components clip,用各种各样的方式plug起来。

 「 管理团队的软技能 」

Alex: 你当初也是典型的engineering research出来的,现在去lead的组织,有很多工程师。你觉得在这个过程中soft skills你有些什么收获,给大家有什么建议?

Yangqing: 这方面可能一个人做事情和一群人做事情还是有一些区别的。第一个是我们所谓叫innovator’s dilemma:一开始大家会觉得这个team做的太慢了,这事儿我一个人能够两个小时就能搞定的。为什么这个team一天还没搞定。大家有时候怎么样来properly set expectation,因为自己一个人的bandwidth是有限的,怎么样来帮助整个team能够合作把这个事情往前推。可能在单个的事情上efficiency不好但是在整个大的全组project上能够更加accelerate一些;第二个是怎么样grow people,就是create space for people to make mistakes,怎么样能让大家来逐渐take ownership。第三个是管理层面提到的give away your Legos,就是focus在别人需要你的地方而不是自己做的最好的地方。我觉得在做technical management或者technical leadership的这块儿其实还是挺有意思的。

Alex: 接下来欢迎场下同学提问!

 「 从数据到决策的新趋势 」

Q1: 这两年我们看到了一个趋势,从classification regression要做reasoning,然后要去做reinforcement learning,要去做decision making,在这个趋势你有什么看法呢?因为从我们的直觉上来说这个是跟过去相反的趋势,但是实际上我们看到如果不这么做的话,直接用probabilistic的方法遇到了很多问题,所以想问您对这个趋势怎么看,这是个大趋势吗?他将来怎么样发展会对现在Deep Learning社区有什么样的帮助?

Yangqing: 我觉得这应该是一个挺大的趋势,在很多领域都有体现。比如说像六七年前我在做PhD的时候我们做probabilistic graphical model,第一个是,数据进来之后我们可以把它建模成一个大的joint probability,但是graphical model关注的是怎么样来interpret不同数据,或者不同dimension之间的relationship,causality等等。所以一方面是计算或者归纳,一方面是怎么从statistic当中提取一些logic或者一些rule来,因为就像你刚才提到的,因为我们纯用statistical或者现在的deep learning的方法的话,我们很难从中提炼出一些knowledge,what is the guiding principle for us to design new models?前面几年像Alex提出来之后大家觉得这样有一个principle来设计CNN,而我们在这个方向上已经走的差不多了,然后接下来就是what is the new principle for us to design even better models?Maybe it’s AutoML,or maybe it’s kind of new principles.  所以从现有的这些数据当中提炼出logic,提炼出知识来是一个挺重要的东西。

 「 计算机语言的选择 」

Q2: 前段时间有一个语言叫Julia横空出世,号称集百家之长,所以我想问问你对这个语言有什么看法,有没有打算基于Julia这个语言建立一个framework。

Yangqing: 我们其实尝试过很多各种各样的语言,所以说我不太好评论。Julia的好处是它对于low level language migration非常好,比如大家如果用Python的话,可能你在Python里写for loop, performance非常差。Julia对这个low level language binding的performance一直都是挺不错的。我们考虑过很多的language,包括我们自己Facebook以前有Torch,Torch是基于Lua的,我们最后发现了一点:it’s not about the language itself,it’s about the eco-system。很多人都说Python是一个很烂的语言,但是它有社区,它的整个的eco-system非常好,如果我要装Python,我有Anaconda;如果我要用Python visualization,我有Matplotlib;如果我要有numerical computation我有NumPy和SciPy,如果我要做图像处理,我有Scikit-image。 所以说最后我们发现这个eco-system很重要,当年Luatorch遇到的很大的一个瓶颈是没有人知道怎么写Lua。大家都很懒,我也很懒,我不想为了学一个新语言而学一个新语言,whatever works for me。所以说这个时候Python作为一个很不错的compromise,似乎是目前整个industry大家比较common的选择。

 「 数据收集与处理 」

Q3: 我们知道deep learning是非常data hungry的,我在想在设计AI infrastructure的时候有没有考虑在一定level上比较general的direction可以把data collection这件事情也集成进来?


Yangqing: 在大公司可能这个不是一个问题,data is kind of naturally coming in,但是在很多应用的时候的确我们也发现data的pipeline需要很紧密的integrate到compute系统。主要的两块第一个是how to actually process data,就是怎么样用传统的MapReduce或者说现在的online approach来feed data into training algorithms,特别是high performance的环境下我们发现不光计算是个瓶颈data也是一个瓶颈。如果我们在GPU上做计算的话,GPU能算得如此之快经常导致大家的data input跟不上。另外一块就是怎么样做data versioning跟data management。我们发现模型train完了之后holdout上的data,validation上的data performance非常好,上线之后就发现不行,最后发现validation data搞错了,跟training data有overlap等等。所以说,怎么样让我们很容易的detect这样一些问题呢,可以更好的做data management,这个其实在infrastracture这边的saving会很大。

Q4: 你觉得在设计AI infrastructure的时候如果想把data考虑进去的话应该怎么做呢?

Yangqing: 传统的data infrastructure一直以来在很多公司都是一个挺大的organization,有非常成熟的像Hadoop,Google的Big Table这样一些解决方案。基本上data infra这边大家考虑的问题也是两个,第一个是serving,像web serving,第二个是batch processing,像MapReduce。比如像Berkeley前面几年我们一直在做的Spark的这个项目也是Spark ML一直以来比较偏向于batch processing MapReduce这样一个方向。而现在突然这个SGD (Stochastic gradient descent)的training方法来了之后大家发现以前这种batch processing的想法已经行不通了。所以像Berkeley的最近的Ray,Clipper这些project就会更加偏向于更加现代一些的SGD的某些computation pattern。这方面没有一个太好的解决方案。

Q5: 你刚才说到数据的问题,其实很大的问题是像你说的,数据其实一直在变,这个tracking其实跟big data的stack是很不一样的。Big data 很强调immutability,它要是不变的我们才可以做很多事情。现在你的数据不停在变,label在变,然后新的数据进来,这个versioning现在是一个big mess。我们看了很多solution也都找不到很好的一种,我想听听你有没有什么想法?

Yangqing: 对,不光是data version,而且model versioning也有问题。即使是同一个data,我们在上边跑两次training,出来结果都不一样。我们在Facebook做testing的时候,有时候就算是两个matrix application,你把threading换一下,从4个词变成8个词结果就不一样。非常deep的neural network你从最开始有这些小的变化到最后的一个输出,基本上有很多时候都是没法guarantee binary wise compatibility的。CPU跟GPU之间几乎不能,大概像ResNet这样一个模型,最后的输出可能会有1%到2%的fluctuation都是正常的。所以说对这种testing environment或者说怎么样来interpret  ‘Correctness’,大家目前还不太清楚。最大的一个investment在Facebook这边是怎么样做更好的experimentation management,可能没法解决这些问题,但是我们可以解决对于任意experiment来说,我们可以记录as much information as possible,在哪个commit上面run的这个,在哪个版本的data上跑的,使得我们在manually做inspection的时候能够有更多的information。

 「 工具的使用 」

Q6: 前面介绍提到说从research到production,一个方面是工具上的不同,另外一方面其实是research过程中,比如你用Jupyter Notebook,你会做很多的小的code的片段,但真的上production你需要一整块的、经过unit test的软件工程整个进入系统。这个之间其实还是有一个工具上的不同,想听听看Facebook有什么样的解决方案。

Yangqing: 我先说工具的这个问题吧,工具的话其实我们也发现Jupyter Notebook最大的问题是什么呢,就是说跑实验的时候才能跑这些个,最后发现,再跑一遍跑不出来了。所以我们现在内部有一个类似于Notebook这样的environment但是更多的就是用来纯做research,更多的时候工具这边大家都是set expectation,就是说this is the place where you maximize your ideas but it’s not guaranteed to ship into products,at all。所以最后在做product的时候大家还是会需要enforce一些quality test相关的东西。更多的是从experience的角度来说,使得大家更加像一些,比如research用Matlab,product用C++,这怎么写?如果research用的Python,只不过是我用的是Notebook,然后product用的是Python,只不过是一个.py file,这个时候migration就相对更加容易一些。所以我们在PyTorch跟Caffe2这边非常重视怎么样来unify experiences,包括比如说像Twython跟Scripton也是,they look similar,保证你真的回头要transfer的时候你可以吧Twython改成Scripton就完了,没有太多的像从Matlab到C++的这样一个变化了。

「 PyTorch 与 TensorFlow

Q7:PyTorch是一个用户很多的一个系统,还有一些用户比较多的系统就是TensorFlow,背后都有一个很大的community,有很大的公司在支持,但是其实你刚才也提到了就是TensorFlow也出了这个eager mode大家需求也都一样,都有这个research developability或者interactivity这方面的需求,deployment都有scalability或者performance这方面的需求。那最后有没有这两个系统或者说市面上所有系统合并到一起的可能,从business的角度来说什么样的条件会造成这种合并。 

Yangqing: 我问你这样一个小问题。我们在用uber,gmail,或者calendar的时候,我们会担心是在Android上面,还是iOS上面吗?就是说根本上到最后 product这边, as long as we have a platform for us to run models, it's probably gonna be not different. 对于uber来说,它可能并不担心iOS或者Android,假如说他们能合并,那这是一个最省事儿的事儿,那将来他们就不用写app写两套了。但是it's not a deal breaker。 然后从framework的角度来说,我觉得一方面大家开玩笑说 There's a war on frameworks, 对吧?从当年相对比较academic的Caffe 跟Torch 跟Theano 这三家,到现在Google的TensorFlow,Amazon的MXnet,Facebook的PyTorch,Microsoft的CNTK等等,到最后大家发现这些idea都会逐渐converge起来。所以我个人不会太担心最后 which framework wins on framework, or which framework migrates which framework. 最后的idea都差不多。

 「 软硬件结合的挑战」

Q9: 你提到软硬件一定要结合,才能发展。那你现在觉得从production eco-system 上看,有哪些地方软硬件结合做的还不是很好?

Yangqing:  目前在production应用上,软硬件结合的只有CPU和GPU,大家都还在一个探索阶段。CPU 跟 GPU 差不多都已经足够well known了。最大的挑战可能是怎么样来manage heterogeneous computation,因为在做prediction service的时候,传统CPU这边的话,整个架构都很homogeneous。我可以在production logic thread上来做computation也没什么问题。然后一旦走向GPU,或者accelerator之后,就会需要有更加desegregated service。比如prediction/computation stack是一个pool,然后production logic会是另一个pool。那么在这样的一个setting上面,怎么样把中间整个connection结合起来,是不是network bandwidth会变成一个新的bottleneck。整个latency或者怎么样来manage computation pool 然后capacity怎么样最后balancing。 这些传统的问题都会重新emerge起来。这方面还是需要一些early analysis。

 「 10年后博士研究的玩法 」

Q8: 现在这些framework,这些工具非常的成熟完善,这必然是件好事。但从另一个角度来讲他对computer vision researcher和graduate student的impact是非常不同的。比如说五年前/八年前你可以design自己的feature,做一个minimization variation whatever graphical model你可以发paper,这个玩法和现在必然不同,现在你要train model,你要自己想办法做一些新的architecture或者其它一些比较有窍门的东西才能发paper。那比如说十年之后你再去Berkeley读一个computer vision PhD从头开始的话,这个玩法是什么?

Yangqing:大家还有另外的一个相关的comment就是说目前这个整个做deep learning training需要的资源越来越多,学校到底怎么办对吧,谁也没有一万个GPU来train AutoML model,那这个AutoML research怎么做呢?比如说像12年的时候大家都觉得Google的infinite resource,大家deep learning怎么做?最后Alex做的方法就是2个GPU,我当时在Google实习,对我们来说还挺surprising的,其实computation resource isn’t the winning factor。学术界的一个好处是,you have to be efficient。我现在个人是在工业界,工业界有的时候大家被这些resource给宠坏了,学术界其实一直都还是source of the new information and new ideas。很多时候可能模型并不一定需要太大,但硬怼performance或者硬怼container resource大家在grad student这个地方就别做了。然后能够做的方向就是how we actually just look at the current models and then do new ideas。Berkeley去年做了很有意思的一个paper叫CycleGAN,怎么样在generative advisory network上面做一些新的工作。这些方面可能不需要太多的resource,包括是一两个CPU就差不多够了。所以可能再读PhD的话可能做法还是差不多的,就是看看最近新的idea在什么方向,然后更多的是iterate on ideas,  not iterate on systems。

Alex: 我们今天的问答就到底为止,很荣幸今天能请到贾博士来和我们分享他在Facebook的工作,对AI的看法,对未来行业的想法。谢谢贾博士今天的分享!

Robinly
Robinly

Robinly团队坐标硅谷,从创业、领导力和人工智能三个角度去剖析成功创业者、高科技领导者、人工智能科学家和知名投资人的职业养成过程和他们对于这些领域的观点,我们力求追本溯源,为广大工程师、研究者提供一手的职业学习内容。

http://www.robin.ly
专栏二维码
产业贾扬清Caffe
4
相关数据
Julia技术

Julia 是MIT设计的一个面向科学计算的高性能动态高级程序设计语言,项目大约于2009年中开始,2018年8月JuliaCon2018 发布会上发布Julia 1.0。据介绍,Julia 目前下载量已经达到了 200 万次,且 Julia 社区开发了超过 1900 多个扩展包。这些扩展包包含各种各样的数学库、数学运算工具和用于通用计算的库。除此之外,Julia 语言还可以轻松使用 Python、R、C/C++ 和 Java 中的库,这极大地扩展了 Julia 语言的使用范围。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

计算机视觉技术

计算机视觉(CV)是指机器感知环境的能力。这一技术类别中的经典任务有图像形成、图像处理、图像提取和图像的三维推理。目标识别和面部识别也是很重要的研究领域。

推荐系统技术

推荐系统(RS)主要是指应用协同智能(collaborative intelligence)做推荐的技术。推荐系统的两大主流类型是基于内容的推荐系统和协同过滤(Collaborative Filtering)。另外还有基于知识的推荐系统(包括基于本体和基于案例的推荐系统)是一类特殊的推荐系统,这类系统更加注重知识表征和推理。

机器翻译技术

机器翻译(MT)是利用机器的力量「自动将一种自然语言(源语言)的文本翻译成另一种语言(目标语言)」。机器翻译方法通常可分成三大类:基于规则的机器翻译(RBMT)、统计机器翻译(SMT)和神经机器翻译(NMT)。

MapReduce技术

MapReduce,一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是其主要思想,皆从函数式编程语言借用。它还借用了矢量编程语言的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

图像处理技术

图像处理是指对图像进行分析、加工和处理,使其满足视觉、心理或其他要求的技术。 图像处理是信号处理在图像领域上的一个应用。 目前大多数的图像均是以数字形式存储,因而图像处理很多情况下指数字图像处理。

自然语言处理技术

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

CycleGAN技术

GAN的一个变种

暂无评论
暂无评论~