软件开发架构师

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

人工智能 19 2019-03-11 11:06

本文转载自公众号 Robinly,整理自 Robin.ly 硅谷交流活动。Robin.ly 创始人 Alex Ren,邀请到 Caffe 作者贾扬清博士与大家分享从 Caffe 到 PyTorch 的 AI 基础架构演进,以及 AI 时代软件开发的趋势和挑战。

从 Caffe 到 PyTorch

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

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

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

贾扬清: 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 这个阶段,当你把它们合并在一起的时候,是希望解决什么问题呢?

贾扬清: 这个我们目前也是一个比较 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 吗?

贾扬清: 更加偏向于 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 们有更方便的方法去用,对吧?

贾扬清: 对!

计算机领域的文化

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

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

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

贾扬清: Unframework 基本上是说以前大家在做 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 你有些什么收获,给大家有什么建议?

贾扬清: 这方面可能一个人做事情和一群人做事情还是有一些区别的。第一个是我们所谓叫 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 的这块儿其实还是挺有意思的。

Q&A

从数据到决策的新趋势

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

贾扬清: 我觉得这应该是一个挺大的趋势,在很多领域都有体现。比如说像六七年前我在做 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。

贾扬清: 我们其实尝试过很多各种各样的语言,所以说我不太好评论。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 这件事情也集成进来?

贾扬清: 在大公司可能这个不是一个问题,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 考虑进去的话应该怎么做呢?

贾扬清: 传统的 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 也都找不到很好的一种,我想听听你有没有什么想法?

贾扬清: 对,不光是 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 有什么样的解决方案。

贾扬清: 我先说工具的这个问题吧,工具的话其实我们也发现 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 的角度来说什么样的条件会造成这种合并。

贾扬清: 我问你这样一个小问题。我们在用 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 上看,有哪些地方软硬件结合做的还不是很好?

贾扬清: 目前在 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 从头开始的话,这个玩法是什么?

贾扬清: 大家还有另外的一个相关的 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 Ren,硅谷面向华人工程师视频内容平台 Robin.ly 创始人,AI 人才服务公司 TalentSeer 创始人,硅谷风险投资 BoomingStar Ventures 管理合伙人。Robin.ly 是硅谷具有影响力的视频分享平台,服务全球上千万华人工程师,通过与 AI 科学家、知名创业者、投资人和领导者的系列深度对话,传播行业和技能知识,打造人才全方位竞争力,为培养下一代领导者、创业者而努力!

原文链接https://www.robinly.info/blog/no-2-yangqing-jia-robin-ly-event-live-streaming-10-14-2018

文章评论