专栏名称: AI前线
我们专注大数据和机器学习,关注前沿技术和业界实践。每天发布高质量文章,技术案例等原创干货源源不断。同时有四千人的社群微课堂,每周一次业界大牛技术分享,也希望你能从这里分享前沿技术,交流深度思考。
目录
相关文章推荐
51好读  ›  专栏  ›  AI前线

专访高性能计算领军人物刘文志:并行计算的未来,是让人工智能无处不在

AI前线  · 公众号  · 大数据  · 2017-06-15 20:59

正文

大数据、算法和计算能力决定了人工智能的发展。在计算领域上,主要依靠的硬件就是 GPU、CPU,以及最近刚推出的 TPU,背后是英伟达、英特尔和谷歌的角力。伴随着这些公司的股价一路上涨的趋势,从此也能看出并行计算的再次崛起。InfoQ 一直很关注并行计算领域,联系了业界领军人物刘文志老师,并拜托杨旸进行了一次较深入的访谈,以下是访谈实录。

刘文志(花名风辰) ,商汤科技高性能计算总监,毕业于中国科学院研究生院,闻名于并行计算江湖,尤善异构并行计算(X86、ARM、GPU、APU 及 PHI)和大规模集群计算,有 7 年相关经验,涉及图像处理、计算机视觉、数据挖掘和石油勘探。曾任英伟达并行计算工程师(协助建立英伟达北京 CUDA 团队)、百度在线高级研发工程师(协助建立百度深度学习实验室异构计算团队)。著有《并行算法设计与性能优化》《并行编程方法与优化实践》《科学计算与企业级应用的并行优化》《OpenCL 异构并行计算》四本并行计算领域的专著。

并行计算和职业发展背景

InfoQ :刘老师您好,非常感谢您接受我们 InfoQ 的采访您在并行计算里的经验丰富,经历过图像上处理,计算机视觉,数据挖掘和石油勘探,能否介绍一下您所经历有趣的项目,和这些年并行计算在国内的发展?

刘文志 :我的工作经历,或者说我对这个行业的阅历大致也反映了并行计算在国内的发展。首先在我读书的时候,并行计算基本上是很少很少有研究所(去做),或者是一些非常顶尖的高校才去做的事情。在 08 年之后 GPU 开始出现了,叫 GPU 计算,在一些科学计算领域开始得到应用。我也是在那个时候开始接触到这个,当时去做了更多的偏学术上,比如分子动力学,一些图像处理等等,用 GPU 可以比这种传统的 CPU 获得更好的速度。而在这种分子动力学这类上速度是非常重要的,因为模拟有时候是几个月,再快通过也常常要几周,用 GPU 我们可以把它缩短到一周,甚至一周以内。那么这个时候就对发论文什么非常重要,因为我们可以在短的时间里多发论文,很快去实验更多的场景,可以得到更好的结果,而这对发论文都很有帮助。

我在 11 年从毕业的时候我就遇到一个问题,就是我未来要去做什么,当时去在各个网站上去搜这种相关的职位,基本上一个都找不到。所以这个行业只能去像 NVIDIA 这种公司。当然也很荣幸,我后来就去了 NVIDIA,呆了三年,大致的工作也是计算机识别,石油勘探这些,也是从那个时间开始接触到深度学习。那个时候还比较原始,主要工作是去帮潜在的客户比如 BAT 等等,把应用的性能做好。那时就已经意味着国内已经开始有公司在往这个方向发展。而且也渐渐的发现,能够在招聘网站上能看到一些相关的职位了。在 14 年,我加入了百度 IDL,那个时候已经开始大力的去招聘这个方向的人。从那个时候基本上可以看得到,人工智能加并行计算和 GPU 计算这类,在未来会有非常大的应用,非常大广阔的领域。但是整个的业界其实对这方面的人才的储备,包括高校都没有准备,甚至现在很多高校自己没有老师能够去做这方面的授课或这种教育等等。

整体来说,这些年,因为 GPU 计算,包括计算机视觉的发展,或者人工智能的发展,并行计算在国内的发展一路上升,而且是从产业界往学术界扩张的方式。所以计算机视觉加并行计算,或者说人工智能加并行计算,在未来还是会有非常大的发展。另外对工作来说是由市场的需求导致的,所以包括 BAT 以及其他大公司,对这方面人才需求也非常大,给的薪水也相对来说比较高。

在个人的项目中,让我比较感触,现在依然记得非常深刻,更多的是在做一些石油勘探、数据挖掘和计算机视觉优化的项目。我们当初在百度 IDL 做了一个 CNN 的中间的卷积步骤优化,当时性能最好的 CNN 的库还没出来,CuDNN 也没出来,要由计算机视觉的研究人员自己写代码,我们当时觉得性能最好的,最流行的框架叫 CUDA ConvNet,GPU 代码做得非常棒,它的作者是 Alex Krizhevsky,AlexNet 的创造者。我当时做了一个工作,我们发现它在新 GPU 上的性能并不如预期,我去在 NVIDIA 的 K20 上对它做了一些优化,可以达到当时那个 ALEX 原来的版本的性能的两倍,当然后来我们做出来大约一年后 Alex 也升级了,也跟我们当时的性能差不多,我们后来把这个成果反映给了 NVIDIA,然后相关的东西应该也已经被 CuDNN 吸收了。

InfoQ :挺好的,我们自己关注也是感觉好像 2010 年,2011 年这个时间段,实际上是 GPU 开始在通用的计算里头做了一些尝试,美国好像有一个公司做 GPU  Database,叫 MapD,也是从学术,他们做 Paper 的时候觉得速度特别慢,用 GPU 来做计算。

刘文志 :数据库本身可能并不是一个非常适合拿 GPU 来做,因为数据库大多数运算是增删改查,计算量相对来说比较小。

InfoQ :它其实并没有很多的迭代,数据库比如 select 这样的,都是非常简单的一些计算。我看到您说这个当时就是实际上是你们自己在 CUDA 上头做了一些,是 AlexNet 的一个系统上做了一个优化是吧?

刘文志 :AlexNet 是一个深度学习神经的一个网络,也是早期非常常见的,现在也有很多公司在使用它做 Benchmark。

InfoQ :当时是 CUDN 已经出来了,你们在 C 的层面上头做了一些代码上的修改?

刘文志 :我们在 C 的层面上对卷积运算做了一些优化,性能超越当时 Alex 所做的 ConvNet 库的性能,然后我们当时也发了一个专利。

InfoQ :那所以说您还是在 CUDA 的 kernel 和数据交换上做了一些修改工作是吧?

刘文志 :在 kernel 层,我们使用了一种和 Alex 不同的计算方法,这个计算方法在当时新的 GPU 上性能更好。

InfoQ :很多最开始的时候,确实是大家需要在 kernel 层面做很多运算的优化,当时是 kernel 并行执行上的问题,还是 Host Mem 和 Device Mem 数据交换造成的这种瓶颈呢,我自己比较好奇。

刘文志 :当时主要是计算和缓存交换之间的同步没有做好,在时间上没有充分地相互交错掩盖。

InfoQ :确实是,您说的这个是很典型的 CUDA 里面的优化内容,实际上要把数据交换时间用 Kernel 计算 hidden 起来。同步的时候,数据准备和 kernel 执行的 timing 要协调好。

刘文志 :对,就是避免他们一个在运算,另外一个再等着。

商汤人工智能应用场景和技术

InfoQ :第二个问题,回到商汤现在这款产品上面,你能不能举几个现在市场需求比较大的智能识别场景,跟我们分享一下?

刘文志 :常见的一个是安防监控。安防监控对于人类来说是一个强需求,因为安全我们都非常重视,不希望自己回家时候发现家里已经被人光顾了。更具体地,对公安来说,他们更希望能够找到嫌疑人。人最明显的标志是脸,因为人脸特征非常丰富,相对来说比较容易识别,相对来说比指纹更容易在公共的场合获取,所以通过人脸识别来抓到嫌疑人或找到嫌疑人,在公安领域非常受欢迎。

在另外一些场景下,我们需要知道某些人是不是带了违禁物品。比如一些恶性事件里,我们需要在嫌犯拿出刀、枪的时候,检测到,及时向周围巡警发出通知。这样,我们在安防监控上可以让人们的生活变得更安全。另外,在日常的生活中,比如最近的手机卡实名制。之前因为历史的原因,中国大多数人包括我自己都是不太喜欢购买手机卡时提供名字等个人信息,所以通常用假名字。这个政策出来后,可能要得去中国移动营业网点重新去登记一下。对于我个人来说可能不是什么大问题,打个车来回一趟不麻烦,但是对中国移动来说,是个非常大的需求,因为中国可能有 10 亿个左右类似情况的手机号,如果为这 10 亿个人办的话,要在几个月内完成几乎不可能,用人脸识别就可以帮他来解决这个问题。比如我在家里可以打开一个中国移动的 APP,把我的个人信息,身份证和我的脸做适配,把我的个人信息和手机号定义起来,可以减少移动这方面的工作,对移动是非常重要的。

另外如互联网金融:如果事先在家里能处理好开户和某些业务,能省下去银行的时间,省了两个小时的排队。在网上自己处理可能半小时,或几分钟就搞定了。

还有一些偏娱乐的场景,也是商汤占有优势的应用场景。比如直播,美女通常都希望自己的镜头里面表现的非常漂亮,那我们如何在直播里面,通过人脸技术去提高网红颜值,也非常重要。

InfoQ :您谈到这个,互联网金融和安防监控趋确实是行业里头谈的比较多的,这两个应用已经有几年的时间了,那么您刚刚谈到这个网红确实以前很少关注过,娱乐行业也好,现在对人脸识别的实时要求也挺高的。

刘文志 :娱乐也是人们的日常需求,通过我们的人脸技术,甚至与其他技术结合,可以把美颜等做得更好,把人的外观体验也做得更好。另外比如两个人在聊天时候,可能对方觉得我现在穿着睡衣不太合适,就把我的衣服换成一个西装等等。

InfoQ :是,现在对直播的监管要求也比较高,而且如果你纯粹把它看成一个互动娱乐也挺有意思,比如我想让主播换个装什么的,真的可以虚拟实现。您说的这些场景一部分是识别,一部分需要结合实时分析。那咱们是围绕图像识别和人脸识别提供引擎,还是提供一个完整的系统,包括图像识别,也包括了实时分析,以及消息系统?

刘文志 :这些商汤都提供。一方面,我们提供这种偏 IP 的 SDK,另外一方面,也提供整个业务系统,比如安防监控服务器,我们可以提供整个服务器给客户,供客户直接使用,不用二次开发。

InfoQ :咱们提供的接口是什么样的呢?

刘文志 :这个关系不大。对于大多数工程师来说,C 肯定是一个必须要掌握的编程语言,其他语言基本都能加入 C 的支持,所以呢,我们要提供一个 C 的接口,去包装 Android,包装 Python 接口。基本上所有用户都可以接受 C 的接口。

InfoQ :现在用深度学习实现的人脸识别也有一些不同的技术,一些开源框架,像 kaggle 网站上也有一些分享和实验,商汤在人脸识别,图像识别上的优势是在什么地方呢?

刘文志 :如果单从人脸识别的技术上来讲,业界的几个顶尖的公司的差别不是非常大。但是对整个产业来说,优势从来都不是比单个点。更多的是综合集成的优势。

对商汤来说,从技术到算法,到平台,我们都有优势。我们有自己的做深度学习的框架,相比与 Caffe、TensorFlow,我们有自己的一些特色。当然这些特色如果跟 TensorFlow 一比一的比较,可能各有优势。但是好处就在于商汤可以完全控制该框架,我们可以按需求去做修改,对特殊场景去做非常好的优化,而这很难通过 TersorFlow 框架获得的。另外,我们在算法上面,有非常多的研究人员,技术上可以开发非常好的技术版本,超越业界的顶尖水平,另外,也可以关注新领域,新方向,去看未来一年两年可能在哪些领域上取得突破,预先做准备。

除了在训练平台上保证我们技术领先之外,在部署和交付用户时,如何保证也是领先的,这样是一个非常大的挑战,因为客户需求是千变万化的,有的需要在云上部署一个应用,有的可能需要在手机上部署一个应用,有的客户可能需要在摄像头上部署,有的客户可能需要在手表上部署。在这些千变万化的应用中,我们需要有一个平台,一个技术框架来保证我们的算法都在各个平台上能够跑到比较好的性能。因为在云上一般是用 X86,计算能力在一百 G flops 左右,在手机单核通常就十几 G,嵌入可能就几 G,差别通常几倍到几十倍。我们在云上跑的很好的算法,可能在手机上跑得非常慢,嵌入式可能就跑得更慢了。

那我们怎么样把不同平台的性能做好,我们商汤自己开发一整套系统,从云到手机,到嵌入式,甚至到 FPGA,我们都做了很多工作,让我们和竞争对手拉开很大距离。另外,在数据上,因为我们商汤从成立一开始,我们就非常关注数据的价值,我们通过公开渠道获取了许多重要的人脸数据,做了标注等工作,人力投入也是非常大的。所以单讲算法优势,我们可能并不是非常大,但是,把集成其他的优势,我们相比竞争对手,或者其他一些开源技术,是非常大的。

InfoQ :谢谢。您刚提到商汤自己开发的深度学习框架,如果我们的开发者想尝试一下试用,需要准备怎么样的开发平台呢?

刘文志 :目前来说,如果要把我们的框架公布出去,会带来另外一个需求,很多同事,朋友会好心地给我们提需求,但按照我们现在的体量和现在面临的压力,没有时间和精力去做这个事情的。目前来说我们不太会公布。更多的是把这些东西在我们自己的产品上使用好。

关于如何提升一个平台来去做深度学习的训练和部署,国内有许许多多的厂商已经非常的专业了,像浪潮,曙光,AMS 等等,他们都已经做了很多年的积累,对这方面的需求也比较了解,可能更熟悉。我的经验在于,如果需要一个好的深度学习的训练平台的话,我们可以去基于 NVIDIA GPU 自己去搭一个。通常关注的问题主要是两个,一个是整体的功耗,整体的功耗限制了我们要用多大的电源,机房线路能不能承受的起。另外要考虑空调散热和噪音,通常单机的话不会存在这个问题,但是如果是一个小机房就要考虑空调的问题。

InfoQ :您谈得有道理,如果要维护一个深度学习的开发框架,所需要付出的精力不是一点点,很多人会提很多的需求。

刘文志 :这也是现在为什么我们现在并没有公开,如果有一天发展得像 BAT 发展的这么大了,我们也很愿意把它公开出去,因为那个时候我们就有人力来维护这个事情,而且这个事情对整个产业都是非常有利的。

InfoQ :您刚刚提到在不同平台上头做部署,在手机端、摄像头、嵌入式上的部署。NVIDIA 也是有这样的考虑,在嵌入式设备,在云端,在高性能计算也需要兼容不同的 GPU。是不是也是类似于这样的框架思路,在不同的设备上的 kernel、代码是一样的,只是编译到不同的设备平台?

刘文志 :因为不同的设备有不同的特性,计算能力不一样,希望有共同的模型,思路基本上是一致的。

GPU 编程应用与深度学习

InfoQ :在并行计算上,英伟达和 Intel 在国内都做了很多工作,nvidia 进来得很早,英伟达近年发展也很强,我们知道天河二号用了 Intel 的 XeonPhi,英伟达各个系列的 GPU 的开发者群体很大,您有没有一些心得,或者观察到的一些有意思的东西跟我们分享一下?

刘文志 :从面向市场的宣传来说, GPU 比 XeonPhi 更早。 Xeon Phi 当时的目的之一是 Intel 为了避免在 HPC(高性能计算)里被 NVidia 超越。但是在深度学习领域,都是为了面对深度学习训练的需求,目标是一样的。不同点主要两个方面,一是生态系统,二是芯片的设计。Xeon Phi 相比于原先的 X86 的架构做了一些更适合做众核的改变和调整,而 GPU 本身擅长图像处理、渲染,运算有非常大的并行性,更关心整幅图,整个场景,最终渲染的时间,而不是说某个像素的结果,设计时有非常大的差别。

在生态系统,Intel X86 坚持的是串行优先,兼顾并行的方式,构建生态系统的思路也不太一样。

但是整体来说,我个人看来,无论是 Intel,还是 NVidia,他们都很难单独把人工智能这个市场吃掉。站在消费者的角度来说他们的竞争是好事,一方面能够提高整个行业的技术水平,给消费者提供更好的产品和服务,同时会促进整个市场的繁荣和行业的向前发展。

InfoQ : 如您提到的,Xeon Phi 也好, GPU 也好,在并行计算上,思路有一定的区别。比如 GPU 以计算单元比较多,而控制流转、控制单元和缓存都大大减少,不同处理器的架构对编程思路也会有区别,像您说的话,GPU 一幅图,是一个单向逻辑,多个线程同时做一个,而不用很多跳转。这对开发者和代码维护来说有很大挑战的。如果你一旦你的程序是面向 GPU 写的话, 如果今后想转移到 Xeon Phi 上,代码调整还是很大的一个工作量,两种处理器上的编程不完全是兼容的。

刘文志 :如果要深入细节的话差别是有。你刚才提到的那个关于控制的方面,在 GPU 上是要减少控制的比例,在 Xeon Phi 也是同样的,因为控制它本身会导致这个并行的时候,一些工作是浪费掉的。而且控制会导致 Cache Miss,分支预测失败等等。从优化的角度来说是近似的,只是说优化的技术在哪个架构上产生的收益哪些会大些,哪些会小些。

InfoQ :这个话题可能有点走题,不过前段时间,我也关注一下并行计算优化层面的东西,包括编译器层面的优化,实际上现在也有很多挑战。并不是完全有定论,所以我们这个时代好像很有意思,正好在一个快速发展的阶段。







请到「今天看啥」查看全文