春争日,夏争时,扫码抽取夏日礼包!!! 了解详情
写点什么

AI、5G、云等技术快速迭代,开发者如何解决计算焦虑?

  • 2020 年 9 月 28 日
  • 本文字数:15382 字

    阅读完需:约 50 分钟

AI、5G、云等技术快速迭代,开发者如何解决计算焦虑?

作为深度学习的三架马车,数据、算法、算力共同驱动了第三轮人工智能浪潮的兴起。一方面,硬件计算能力的发展确实快速推动深度学习技术在各个领域取得巨大进展,但另一方面,深度学习模型升级的频率显著高于过去,模型的计算力需求呈爆炸式增长,已经将过去多年来累积的计算力成本下降的红利迅速蚕食。


近几年,许多给人留下深刻印象的技术突破都是“大力出奇迹”类型,即算法的新鲜度不强 ,但是通过使用更多的数据、更多的算力,实现更惊艳的效果 。以最近火爆全球的 GPT-3 模型为例,其参数量高达 1700 亿,有行业人士估计训练这一份模型需要 1200 万美金,别说普通人玩不起,就是一般的公司也难以承担。人工智能要真正实现全面落地,还面临着巨大的鸿沟。


但万物智联的时代就在眼前,数据的增长、算法的发展将会给算力带来越来越大的挑战,提高整个计算系统的性能与效率迫在眉睫。面对算力瓶颈,软件层面能做些什么?如何进一步通过软件释放硬件的最大性能?如何更好地满足对海量数据进行实时处理和分析的需求?实现“计算普惠”还有哪些途径?


围绕这些话题,9 月 25 日,在 InfoQ 大咖说直播间(点击这里观看直播回放视频),以“跨越计算鸿沟:如何通过软硬件协同实现算力的指数级提升?”为主题,InfoQ 邀请到英特尔中国研究院院长宋继强,英特尔架构、图形和软件集团副总裁兼中国区总经理谢晓清,南京大学软件工程教授张贺,清华大学计算机系长聘副教授翟季冬,中科院计算所研究员崔慧敏进行分析和探讨。



智能互联时代,算力面临哪些挑战?

在全球疫情大流行的背景下,互联网、数字经济、人工智能加速发展,今年年初这几个月的疫情,对数字化转型的推动甚至超过了过去 10 年。但与此同时,也导致数字鸿沟的问题进一步加剧,这背后反映的是什么问题?当前计算力面临着哪些方面的挑战?


英特尔中国研究院院长宋继强:

疫情让我们的数字化进程突然提速,提速带来的效果是我们更快地实现了系统或者说终端设备的联网化和智能化。很多数据开始从智能设备不断往网络、往云里去送。不仅数据量很大,按照统计数字来讲是以 25%的年复合增长率在增长,而现在的计算力只能处理其中很小一部分。数据类型也很多样,而且很多数据都需要实时处理,这导致我们对计算的要求发生了很大的变化。


另外,很多数据处理需要用 AI 模型,AI 模型本身就有很多的参数,也就是元数据。这些参数也需要快速的存取,需要被计算,这就带来了非常多的新挑战。


同时,上下行的带宽分配也和以前不同了,以前是下载的东西多,现在变成上行的压力会越来越大,而且大家希望看到很快速的处理。那么计算到底在哪儿做也是一个问题。在云端做还是在终端做,还是在最新提出的边缘计算做?边缘又在哪里?


数字鸿沟主要指的是算力、网络、带宽分配不均匀。在发达地区,密集的城市地区会有比较好的算力和网络支持,但到偏远地区,西部地区开发还比较慢的地区,在这一次疫情来的时候,就很难马上享受到数字化的便捷。上网课缺乏好的网络,缺乏快的计算设备,用 AI 去做加速也很困难。其实真正的数字化,对整个基础设施的建设,终端的硬件能力建设,包括网络侧、边缘计算的异构的加速都还有很大的挑战,还有很多地方需要提升。


清华大学计算机系长聘副教授翟季冬:

谈到应用和算力之间的鸿沟,我想分享几个数据。最近几年自然语言处理领域发展非常迅速,2018 年 6 月份推出的 GPT 模型是 1.17 亿个参数,到 2019 年 2 月份,GPT-2 模型是 15 亿个参数,到今年 5 月份最新的 GPT-3 模型参数已经高达 1750 亿个。从 GPT-1 到 GPT-3,短短两年时间,这个模型的参数量增长了 1000 倍。


据 OpenAI 公司的最新统计,OpenAI 在 2019 年计算了自 2012 年以来所有模型所用的计算量。他们发现最大规模的 AI 模型所需要的算力已经增长了 30 万倍,平均是每 3.4 个月翻一倍。而根据摩尔定律,芯片增长速度的平均周期是 18 个月到 24 个月,而且现在摩尔定律增长还有放缓的节奏。


从这些数据来看,我觉得当前发展最主要的问题就是应用对算力的需求在逐渐增加,算力和应用之间的鸿沟变得越来越大,算力问题成为当前非常重要的一个矛盾。


南京大学软件工程教授张贺:

除了刚刚宋院长提到的,由算力或者网络等资源分布不均匀引起的数字鸿沟或者说算力鸿沟,实际上鸿沟还体现在其他方面,比如说核心技术上。目前美国掌握着大部分的关键技术,国内虽然也有像中星微、深鉴科技、寒武纪这样的企业,但在数量上和质量上都存在差距,这是一个比较明显的差异。


另一方面,在科学研究和产品落地这两者之间还存在着一定的鸿沟。过去我们经历了互联网从兴起到发展再到普及的过程,实际上互联网的商业化是一个长期的过程。在这个过程当中,我们前期看到的和我们现在感知到的,我们生活当中接触到的互联网可能有很大的不同。在科学研究,在理论上面,虽然说现在有很多的人在投入,但和实际的落地中间还是有一定差距的。短期内的改善并不是很乐观。现在很多人工智能领域的知名人物也有回归学术界的意愿。短期内要突破,尤其是在产业落地的突破,可能需要一个过程。


还有一个,在教育方面。在人才教育培养方面,国内计算机教育的模式也有一定的割裂。近几年,学科越分越多、越分越细,这就导致了人学习的内容局限于一个比较狭窄的范围内。比如说在计算机里,学硬件的人可能不学软件,学软件的人对硬件也了解很少,这样很难去培养真正落地型的人才,尤其是在 AI 领域,我们需要一些复合人才。比如说硬件、软件、数据科学,这也是我们现在所谓数字鸿沟的一个表现。


围绕算力方面的挑战来谈的话:一个是对于算力依赖上的不均衡。比如说在数据学习当中,我们更多依赖于英伟达的 GPU,它市场占有率高并不仅是硬件的架构适合于深度学习,另一方面它有一个 CUDA 库,这个库也可以帮助我们编写基于深度学习的项目。这两者实际上会形成马太效应,也就是说强者恒强,别人要抢占这个市场并不容易。这样一种一家独大的现象,也会造成对特定架构或者是特定供应商的依赖,某种程度上这是一种垄断的现象。


围绕算力的另一个挑战是成本。现在神经网络训练主要使用 CPU 或 GPU,这些硬件的成本是很高的。即便你使用一些类似于谷歌的服务,成本也是很高的。另外模型训练成本也很高,尤其是大规模模型。虽然目前没有一个标准的统计,但是现在有一些单次训练费用的统计。刚刚翟季冬老师提到了 GPT 模型训练,有报道说,大型的 BERT 模型是在 16 个 Cloud TPU 上进行训练,需要训练 4 天时间。核算一下单价,实际上这一次训练的成本就已经需要 1.2 万多美金,模型从搭建到最后确定可以使用,至少要进行上百次训练,这个成本是非常高的。


还有使用效率的问题,模型有大量的参数,而且还需要大量的数据,这些数据需要很多存储空间来保存和进行后续训练。但是单机设备存储空间有限,这就需要并行模型训练。我们要把模型拆分到不同的计算节点上,一拆分就会在不同的设备之间形成一定的数据依赖。数据同步或者是通讯传输,也需要开销。极端情况下,在这种网络模型的训练上,如果是单机或者是单卡的利用率,有可能不到 50%。这就需要在分布式情况下有一个很好的训练策略。训练策略在时间和空间上可能会起到一定作用,但是你需要在模型精度上做一些牺牲,也是一个影响。


中科院计算所研究员崔慧敏:

我的观点可以总结为一个词:多样化,未来像人工智能和超算会越来越融合。


多样性又体现在几个方面:首先是负载有多样化的需求。不同类型的负载对算力有不同的需求。这当中有计算量超级密集的超算类负载,也有现在很火的人工智能类的负载,也有通量非常大但数据处理强度不太高的负载。另外在端侧,对算力的需求就更加多样化了,像手机上也是既有图象处理类的,也有人工智能类的,还有游戏、网页等等不同的负载。


负载的多样化又带来了硬件的多样化设计。当摩尔定律走到今天,我们已经不得不选择一些专用架构持续获得性能提升。在服务器侧有针对超算的 GPU 等架构,针对 AI 有 TPU、寒武纪等架构。针对网络的流式负载则有路由芯片的架构。在手机侧更是如此,现在我们的手机基本上都既有大的 CPU 核也有小的 CPU 核,同时也会有 GPU 处理器,还会有 NPU、DSP 等等各种加速单元。整体上呈现出一个非常明显的异构趋势。


由此,上层的多样化和下层的多样化给系统软件带来了非常大的麻烦。系统软件起的是桥梁的作用,把上面的应用映射到下面的硬件上。既然现在上面和下面都越来越多样化和异构化了,也就意味着中间的系统软件的任务越来越艰巨了。特别是目前的国际大趋势下,系统软件还有一个任务就是把越来越稀缺的硬件资源用到极致。所以对做系统软件的人来说,在上下都极度多样化差异化的背景下,要努力榨出最后一滴“油水”。


英特尔架构、图形和软件集团副总裁兼中国区总经理谢晓清:

现在计算鸿沟其实就是一个需求跟我们能够提供的计算能力之间的鸿沟。技术的提高是跟需求密切相关的。比如说英特尔在 PC 时代,制造出 PC 之后,也制造出来一些人类的不同需求,包括办公室应用、游戏,其实很多需求是先有技术再反过来去影响它的。


现在,我觉得是一个需求和技术你追我赶的过程。中间有一段时间停滞了,PC 的能力五六年不更新似乎也没有问题。后来,移动互联网诞生,又催生了一次指数级的算力增长,把用户的需求释放出来。 从前几年开始,我们进入到云计算、人工智能的时代。很多的用户需求又到了算力不一定完全跟得上的阶段。尤其因为年初的疫情,有一些原来可能不是非常着急的用户场景,变得非常常见。包括我们现在的视频会议,可能在最近的半年当中,我们开的视频会议比原来 5 年时间开的都多。这些其实都是需求和技术之间互相追赶,互相释放彼此的潜能。


我相信计算鸿沟未来还是会持续下去,矛盾会体现在不太一样的方面,不过这也是一个动力,能够推动我们做技术的人一步一步向前走。


如何通过软硬件协同,实现算力的指数级提升?

现在业界基本上已经形成共识,要实现算力的指数级提升需通过软硬协同,那么实现软硬件协同的最好方式是什么?需要具备哪些特点才能达到比较理想的效果?业界现在有哪些比较好的尝试?


清华大学计算机系长聘副教授翟季冬:

现在业界一个非常明显的趋势就是摩尔定律逐渐放缓,刚刚崔慧敏老师也提到,现在的负载是非常多样化的,最近几年做得比较多的就是领域定制芯片。2019 年,图灵奖获得者 Hennessy、Patterson 在《计算机架构的新黄金时代》一文中强调,随着摩尔定律的放缓,领域定制芯片是未来发挥算力的一个非常重要的方向。


我们看过去十年二十年芯片的发展,通用处理器在某种程度上来说一直占据非常重要的地位。通用处理器试图解决所有应用领域的问题,但实际上像刚刚崔慧敏老师也提到,应用有多样性,不同的负载有不同的负载特征,有的可能是计算密集,有的可能是访存密集,还有可能很多负载对存储需求压力会特别大。


所以我们想做一个芯片或硬件能适用于所有领域,这个方向肯定会很难。但是如果我们可以针对一个特定领域的特征,去挖掘这个领域本身的计算、访存、IO 的负载特征,就可以设计一个非常特定的处理器到上层的存储,到系统软件,这样可以带来很大的算力提升。


英特尔中国研究院院长宋继强:

刚刚翟季冬老师讲到一个点非常好,现在通过领域定制芯片的方式去解决各种负载的多样性,能比较有效地最大化硬件加速的效率,不管是从计算、访存还是从一些中间通信的带宽、IO 的定制上来说。这是目前从架构层面来讲非常好且有效的一种方式。但这种方式也存在一些困难,首先,如果领域定制芯片要能够达到 ASIC 这种专用加速器的性价比和能效比,就需要这个应用的量很大,才能支持大家去做一款 ASIC 专门为它服务。当你的应用量没有那么大的情况时,商业规律让你做不了 ASIC。另外,应用多样性变化的趋势很快,要通过做 ASIC 去跟上它的变化太难了。


通过多种不同架构的组合,寻求最符合客户需要的性价比、能耗比的折中,这是一种最好的通过多架构组合的方式去应对应用多样性的方法。需要在不同的架构之间,有很好的折中的处理办法,并且能够集成一些不同种类的方案。比如说板级集成,CPU、GPU、FPGA 这些大芯片之间集成。或者说甚至可以提供像通过封装级集成,让你拥有更小的尺寸和功耗,但是仍然可以提供多种加速功能。


更重要的是,集成起来之后,系统里有了异构单元,如何用专业的软件去给它提供加速,并且能够让上层的软件开发人员不用跟着里面很多不同的硬件架构换来换去,去试很多种不同的组合。这就需要上层的软件屏蔽掉底层硬件之间的差异性,但是能够很好的去对接上面的应用开发框架,并且利用好不同硬件之间的负载分配和通讯同步,包括如何在当中寻找最好的配比。


这一块业界也在寻找更好的完整的软件解决方案,最近英特尔也和业界一起推出了一个开放的跨架构编程模型 oneAPI,它可以通过软件层把很多不同的硬件屏蔽,只在上层暴露出统一的开发接口,并且在底层能够支持不同的专用加速库,快速提升使用不同种类硬件的效能。


软硬件协同是目前最好的一种方法,并且需要在不同种类的硬件之间有一些灵活搭配的方案,而不是说只依赖于 DSA 这种领域加速硬件一种方式。


中科院计算所研究员崔慧敏:

软硬件协同设计还是针对特定领域做的,针对特定领域进行深度的资源垂直整合,来发挥硬件的处理能力。


我觉得有两个方面,因为软硬件既分工又合作,首先讨论一下它们到底是怎么分工的?软硬件之间的界面定义要怎么做,这是未来一个非常重要的问题,也需要根据不同领域来重新探索。具体来说哪些事情由硬件做,哪些事情由软件做,它们的边界如何划分?这里面其实是一个平衡,硬件做的事情越多,意味着硬件资源的使用效率越高,对应付出的代价就是整个通用性会受到影响;反之,如果硬件做的事情少了,通用性就会改善,但同时带来资源使用效率的降低。那么平衡点在哪里,哪些东西需要硬化,哪些东西需要软化,这是我们协同设计时需要考虑的第一个点。


像 AI 在这个方面就进行了很多有趣的探索,不管是谷歌的 TPU,还是寒武纪大电脑系列,还是很多 AIoT 的智能芯片,其实都是把人工智能的计算范式提取出来,根据这个范式来设计自己应用场景的特征。像 TPU 和寒武纪定义了人工智能比较基础的指令集,所以对软件有很大的灵活性。而很多 AIoT 芯片是牺牲了一定的灵活性以追求更高的性能功耗比。这两种无所谓优劣高下之分,完全是设计之初由应用的市场确定的。但是这确实是一个最初就需要确定好的关键决策,因为这不管对后期的整个生态还是软件开发都有很大的影响。


分工完了就是合作了,角色划分之后如何做协同。我觉得在协同方面,有一个非常重要的因素可能比以往都重要得多,那就是工具。 因为在整个软硬协同的设计当中,需要一套自上而下完备的工具软件来支撑。这当中包括仿真器、编译器以及各种性能、能耗、面积的分析工具。而且就像刚刚宋继强院长提到的,因为技术和应用更迭的周期是很快的,你要很快把这个东西做出来,要不然做出来的时候可能就已经过时了。


在这个过程当中就要快速实现一个指令集的定义,应用到指令集的代码生成,对生成的代码和硬件的量化评估,这当中每一个步骤都需要快速完成,这对工具链软件的挑战还是很大的。


简单总结一下,两个永恒的主题,软硬件如何分工,如何协作,都有很大的机会。


英特尔架构、图形和软件集团副总裁兼中国区总经理谢晓清:

我想从英特尔公司的角度来谈一谈这个问题。英特尔传统上来讲是一家硬件公司,从 PC 时代开始,其实是以通用计算这样的一个 CPU 算力来成就现在的英特尔的。


但是,人工智能发展起来之后,其实有很多人工智能或者是数据处理方面的特殊需求,以至于整个硬件行业开始向 GPU、FPGA,包括 AI 的 XPU 方向发展。英特尔目前也在往这个方向转型。从硬件的多样化角度出发,异构计算其实现在已经成为了我们的主题,这是跟行业同步发展是一样的道理。


同时,异构计算其实给研发人员,或者说软件开发者,带来了很多麻烦。尤其是现在的应用程序,用户场景越来越多,很多上层的软件开发者其实是没有时间也没有精力去学那么多不同架构的硬件的。尤其是现在,基于云计算平台的开发对硬件的依赖性,或者对硬件的透明度越来越往抽象层发展。


从系统软件的角度来看,我们会更多去研究怎么把硬件的每一层抽象做好,以让开发者在不同层次上都可以用他们原来熟悉的方式方法做他们的开发工作。


另一方面,怎么提高开发人员的生产效率也是一个非常重要的方面。他们原来可能需要写很复杂的程序才可以解决的问题,如果可以在系统层面提供一套非常用户友好,并且在抽象层方面能够做到充分优化的解决方案,也可以非常大地提高开发者的工作效率。


前面宋继强院长也提到了 oneAPI,这是英特尔的一个尝试。从英特尔的角度来看,传统 PC 行业有很多的开发者生态已经在那个地方了,进一步往前走的话,怎么能够在异构计算这样一个世界,比较好滴借鉴原来的经验,同样把原来的开发者生态挪到异构计算开发者生态上来,使得我们的计算能力能够指数级的增长。从而做到不仅是在硬件层面上是指数级增长的,在软件开发效率上也是一个指数级增长的过程。


南京大学软件工程教授张贺:

我以软件工程的角度来谈谈这个问题。这涉及到软件工程里的一个概念,也就是软件定义。现在是软件定义一切,这个“一切”怎么理解?我们可以把硬件虚拟化,用 API 暴露硬件可以操作的部分,或者接受你的调用管理办法,实现硬件按需管理。


通过这样一种虚拟化的形式去把包括算力、存储、网络这些 IT 资源,进行一个统一的、最优化的管理。这当中不仅计算本身是算力,同时网络、存储也都是算力的表现。


我们可以使用软件定义硬件功能,比如说通过软件的形式给硬件进行赋能。实际上我们刚刚提到 API,API 是一个中间的核心,在 API 之上是软件可以完成的,也就是一切皆可编程的概念,通过 API 我们可以实现软硬件相互之间的解耦,一旦解耦之后,两者就可以各自独立演化。软件要做的是向个性化方向发展,它要满足的是不同用户群体对于算力的个性化要求;而硬件应该是向标准化发展,它们相互之间可以通过虚拟化的形式结合起来。通过一体化的硬件,使用标准化、虚拟化的形式进行解耦,这样硬件就只完成它自己的功能,具体的控制逻辑或业务逻辑交给软件去完成。


在软件定义的概念当中,和算力相关的一个是软件定义算力,或者说分布式算力。本质上就是把算力集中起来,通过软件统一进行协调使用。还有软件定义存储,也就是说通过软件把计算的结果进行一定的存储。过去的计算,可能很多都是算过的,那就没有必要消耗很多的计算资源去重新计算。而是把算过的加上要重新计算的,或者说增量,然后把它们通过软件形成来结合。其他还有刚刚提到软件定义网络,还有软件定义面向用户的应用服务,等等。


如何进一步通过软件释放硬件的最大性能?

在软硬件协同的基础之上,软件方面还有什么创新思路,能够进一步释放硬件最大性能?如何通过软件快速提升算力,满足对海量数据进行实时处理和分析的需求?


英特尔架构、图形和软件集团副总裁兼中国区总经理谢晓清:

其实有一些新的思路我们也在探讨当中。从行业来看,AI 所释放出来的用户场景,使得对我们做软件也好,做硬件也好,驱动力还是非常大的。


现在软件从业人员也特别多,软件开发出来的产品在两年前、五年前根本没有办法想到的。所以我觉得,其实技术从业人员的压力非常大,我们怎么样从技术开发这个层面满足不同的需求。从我们现在内部看到的情况,通过软件优化让硬件潜能得到最大程度的发挥,这些工作我们一直都在做。


举个例子来讲,比如说 ResNet-50 推理的 Throughput 在过去两年之内,硬件一样的情况之下,我们用软件优化的方式可以把原来的性能提高到 285 倍左右。我们原来想像当中,软件的优化可能就是 10%、15%的优化,现在我们发现由于算法、指令集方面的充分利用,这个潜能是非常大的。毫不夸张地讲,软件优化可以使得我们原来做推理的秒级延时,提升到现在的毫秒级;原来无法达到实时体验的用户场景现在完全可以做到实时。训练其实也是一样的,原来需要几周的时间,现在只需要几个小时,甚至是分钟级别。因为时间的缩短,使得原来的一些不可能的用户场景,现在变成可能。


中科院计算所研究员崔慧敏:

就像我之前提的,系统软件要榨干硬件当中的每一滴“油水”,那么怎么去榨干呢?首先我们要对资源进行非常极致的精细化管理,这是系统软件需要解决的最底层的问题。


再往上走一点,对资源使用的动态模型要构建起来。这是我从编译器的角度来说的,以前我们做编译器都是给你一个固定硬件,你拿一个程序去给它生成代码,这个芯片上不管是 Cache 还是寄存器,编译器都认为是这一个程序独占的。但是现在不管是数据中心还是手机上,都是同时运行非常多负载的,这意味着我们在编译一个程序的时候,并不知道它运行的时候能拿到多少资源。传统的编译优化方法拿过来就会有很多问题。这个问题其实之前在数据中心刚刚开始实施混部的时候,就有非常多的研究人员探讨过,也提出了很多方法来解决这个问题。但是基本上都是通过资源的合理预留方式来应对的。现在就像我们刚刚提的,资源越来越宝贵了,尤其是考虑到当下的形势,可能我们都只能用比较落后的工艺来做,以前你预留一部分的方法就玩不转了。我们必须把一个程序的性能和使用的资源之间建立一个比较精确的模型,这也是一个很难的问题,但是我认为对于 DSA 来说是必须要解决的问题,也是我们做编译的研究人员需要跨越的一个比较大的鸿沟。


再往上,我觉得软件栈需要重新思考。现在我们的软件栈很多都是从 CPU 上继承过来的,它是一个层次化剥离做得非常好的架构。以 GPU 为例,底层是操作系统和 Driver,往上一层有 CUDA 或 OpenCL 的运行时,再往上是各种编程框架的运行时,比如可能是 Java 的 JVM、TVM 的运行时、TensorFlow 的运行时等等。这种设计在 CPU 场景下非常好,因为每层有每层的抽象,各层之间实现一个互相的协作,迁移非常简单。但是我们也要注意到一个问题,每层抽象都要付出它的代价,我们不能又要马儿跑,又要马儿不吃草,这个代价就是性能的牺牲。


当我们切换到 DSA 这个领域追求极致算力的时候,跑和吃草这件事情就需要重新想一想了。我们是不是还需要这么多分层?各个分层之间有没有重复做的事情?有没有重新整合的机会?这也是我们现在正在开展的一个很有意思的事情。机会还是蛮多的。我觉得从现在的软硬协同提升算力来讲,对系统软件的研究人员来说也算是一个黄金时代。


南京大学软件工程教授张贺:

实际上性能本身天然就是和普遍适用性是一对矛盾。除了在硬件架构上,或者说在芯片层面上我们可以做一些工作之外,或许我们也可以在其他非算力的方面,比如存储或者是网络上,去挤榨一些性能。


一是从存储的角度来看,因为现在很多大的数据中心,都会有很大的应用负载。比如说像搜索引擎、推荐系统,实际上它们都是以数据为中心的,它的数据是有一定的局部性特征。


另一方面,现在传统计算机的结构是以计算为中心,它会有多层存储结构,如果需要完成这个任务的时候,它就把数据从硬盘搬到 SSD,或者说到内存再到缓存。从存储介质来说,需要经过层层的数据搬运才可以完成这个计算。那么怎么减少这种数据搬运的开销,我们可以通过存储去挤榨一些。


在存储量这一块,我们也可以尽可能的利用存储介质本身有限的内置的计算能力,根据数据存储的位置以及它提取信息的特征、方式,尽可能在存储层面完成一定的处理,这样也可以减少 IO 的开销。这是从存储的角度,看能不能给性能带来一定贡献。


还有在网络上,就是近云端的计算形式。现在智能设备非常多,传统的集中格式的云计算方式很难满足 IoT、无人驾驶这样的应用场景。近些年提出的后云计算时代、雾计算、边缘计算、移动边缘计算,都是对云计算的某一种扩展。比如说把云计算设备部署在离终端用户比较近的地方,这个可能是逻辑上比较近,或者物理距离比较近的位置,这样就可以根据用户所在位置去充分利用端的硬件资源。


另外比如边缘人工智能技术,也就是把人工智能和边缘计算进行一定结合,把算法推理这一部分更多放到终端设备上,就能靠近数据源头提供智能分析、处理的能力。一方面可以减少中心的计算压力,提高效率;另一方面,也可以提供更安全的隐私保护。


清华大学计算机系长聘副教授翟季冬:

快速分享个简短的例子。我在清华带学生参加超算比赛,我们经常会在一个固定的集群服务器上去优化一个应用程序,当硬件不变时,有时候优化后程序性能会提高几十到上百倍,这充分说明在软件优化方面还有很多空间。


刚刚很多老师提了在软件方面的一些办法,我本身的研究方向和崔慧敏老师比较类似,在编译器和编程语言方向做过一些工作。从我的角度来说,针对底层异构芯片,或者是领域定制的 AI 芯片,或者是其他的一些领域定制的芯片,要想充分发挥这些异构器件的性能,上层需要一个非常好的,不但编程容易,而且可以充分发挥底层硬件性能的,领域定制的编程语言或编程模型,这是软件层面上一个比较好的突破点。比如说我们现在经常用到的面向深度学习的 TensorFlow、PyTorch,其实这些都可以说是面向人工智能这个领域的定制的编程模型。从用户的角度来说,它简化了用户编程的复杂度。像刚刚崔慧敏老师提到的,做系统软件就是要榨干底层硬件的所有性能,这些系统软件需要交给专业人士去尽量发挥底层硬件的性能,这样就可以更好地隔离普通用户和底层越来越复杂的硬件之间的鸿沟。


英特尔中国研究院院长宋继强:

除了分层优化软件,上层算法层级也可以带来很大的提升。特别是像 AI,如果算法不经优化直接去用,硬件的开销是很大的。通常来讲,对一个训练好的模型,如果能做很好的压缩,这个压缩既有宽度上的压缩、参数的压缩,还有计算位宽的压缩,一般来讲都可以达到百倍的提速比,从内存占用到计算资源占用上都可以达到很高的提速比。


另外算法设计上也有很大的空间。比如说现在很多深度学习模型都涉及到归一化这个过程。归一化如果做算法调优,有可能把计算复杂度降得很低,降得很低以后,实际上需要硬件做一些调整。这种算法的调优反过来又可以对硬件架构的创新有指导作用。二者起到了相互促进、互相扶持的作用。软件优化可以给硬件提升性能,同时也可以指导硬件进一步增加一些特性,来进一步放大软件优化的效果。我们更希望看到一些跨层合作的案例和创新出现。


同时在软件算法层面,最好我们可以跳出现在的一些框架。因为现在的框架通常都是已经假设我们应用已有的常用架构,比如 CPU、GPU、FPGA、ASIC 这些架构去解决问题,然后对已有的深度学习模型进行优化。如果我们跳出来去看,可能还有更新的解决问题的办法。


我们一方面追求把现在的一些问题、算法优化好解决好,另一方面我们也要探索看做同样一件事有没有另外一种不同的思路。因为现在的做法很多时候能效比不高,如果我们去看像类脑计算这种全新的硬件架构或者说全新的算法会带来什么样的效果,通常也会有一些惊人的发现。比如,我们现在初步的一些关于类脑计算芯片的研究发现,做同样的事,类脑芯片只需要比现在用深度学习方法少 1000 倍的功耗就可以做到。当然这需要硬件架构相应做很大的改变,同时软件算法也要做相应的改变。


实现“计算普惠”还有哪些新路径?

我们现在已经进入万物智联的时代,身边很多设备,包括冰箱、电视,全都会变成一台台小型计算机,不停地产生数据,我们需要对这些数据进行计算,这个算力的需求是日益增长的。还有什么样的方法或途径能够让算力变得人人可用,不仅是用得起,而且能够更方便、更容易地去使用?


南京大学软件工程教授张贺:

首先是对于用户来说,或者说对于普罗大众如何提高大家的计算意识。计算意识一方面是用户,或者说老百姓能够有意识地去利用算力为自己提供个性化的服务,也就是说他能够想到这个事情。另外一个层面是对于厂商或基础设施来说,他们能够给这些用户提供支持他践行工作或者改善生活品质的这些价值层面的输出,并不简单的只是一个技术或者说计算工具的接口,这样才能让民众直接意识到计算对他生产生活的价值。


其次,要构建一个计算的或者说信息的生态环境。现在人工智能并不仅仅是一个独立存在,而是和物联网、5G 通信、大数据等结合在一起的,最终要实现的是人、机、物智能地融合互动,让不同的资源,无论是人类社会的资源,虚拟空间的资源,还是自然空间的资源都能够整合到一起,而人是起到中心节点的作用。整合这些资源为人服务,这需要我们构建一个生态系统,而不仅仅是提高算力就可以做到。


对于开发者,从技术方面来说,AI 领域的门槛还是比较高的,尤其是在算力、数据、开发平台等等方面,这就会影响更多的从业者进入。这和 AI 的普及和现在开发者的需求增长是相矛盾的。我们如何对这些开发者提供有效的支持,对他们赋能,提高他们的生产力,这也是一点。


另一方面是数据,数据是我们能够保证计算质量的一个重要条件,需要有大量的输入,但是这些输入是需要经过特征工程的数据。如果输入数据的质量不理想,产生的模型输出效果也不会好,就是我们传统说的“Garbage in,Garbage out”的概念。虽然现在我们的数据量越来越多了,但是数据质量还是有待提高,从数据的来源、数据的获取以及数据的高质量这些方面,以及是不是能够开放一些经过脱敏的数据,让开发者、民众去获取这些数据,从而降低计算的数据成本。


AI 计算还需要注意一个可持续性的问题,比如我们是不是能够在提高算力的同时降低功耗,进而减少资源的消耗,减少污染。如果大家都去使用计算资源,比如每个用户都是 7×24 小时去使用,这个负载肯定是超乎想像的负载量,这样肯定会对其他的方面造成影响,比如会对环境造成影响。如果真正要达到计算普惠,我们肯定不能忽略的可持续计算的问题。


英特尔中国研究院院长宋继强:

纯粹通过大规模的计算,消耗很多的电来实现智能计算的方式显然是不可持续的。现在我们处于一个万物智能、万物智联的早期阶段,如果以后更多的数据都要拿来做 AI 训练的话,我们一定要找到更低能耗消耗的办法去做智能计算。这要求一是在算法层面要尽量提升,争取达到可以通过类似像人脑这种功耗级别的算力就可以训练出可用的模型。尤其是对前端的很多物联网设备,它的持续学习和模型的训练,可能依靠这种超高能效比的训练就可以了,不需要依赖云端大型的集群。


另外,还有一些更高维度的办法,就是继续去开发量子计算,因为量子计算十分擅长做那些大规模并行计算,它不是什么都能做,但是对解决某些问题是非常高效的,对于解决 AI 问题也是很高效的。当量子计算搞定之后,它可以从传统的高性能计算那里卸掉很多任务。


高性能计算当然还需要继续去发展,我们现在的高性能计算中心不是太多而是太少,还需要在全国各地部署,把资源云化。通过 5G 网络能够把计算能力快速输送到很多人的跟前,可能也需要一些边缘计算的加持。这样能让每个人都以比较低的价格享受到比较充足且随手可得的算力。届时,算力就像开关里的电、水龙头里的水一样,我要用它就来了,不需要家里有一台很强悍的电脑,或者说小区里一定要有一个很强的边缘计算中心,未必,只要网络可以达到那种效果,可以随时去访问到它就好了。


这其实是需要分头去研究各种不同级别的计算资源,也要做更好的部署。


清华大学计算机系长聘副教授翟季冬:

我从三个方面来谈一下计算的普惠性。第一个方面是从个人层面,大家知道物联网现在已经逐渐在我们生活中各个领域发挥非常重要的作用。比如说自动驾驶,其实现在很多车都有自己的计算设备,但自动驾驶并不是一辆车自己的事情,而是大家在路上协调的过程。所以如果能把不同的物联网设备中的计算单元协同起来做一些调度和管理,对每个人来说都是非常有益的。


第二个方面是从公司层面,现在有很多云公司,公有云或者是私有云的公司,把计算资源整合以后提供给很多用户去分散使用。通过云计算的方式可以让更多的用户去共享一些资源,也使很多公司节省了自己运维管理服务器的开销,这也可以让计算更加充分的发挥。


第三个方面是从政府层面,刚刚宋院长提到中国的高性能计算中心其实并不是很多。最近“新基建”提的比较多,政府可以出资建更多的高性能计算中心,通过高性能计算中心云化,让更多用户或者普通公司都可以得到便宜的,或者说容易得到的计算资源,这样可以做更多的应用。


英特尔架构、图形和软件集团副总裁兼中国区总经理谢晓清:

英特尔提到的实现普惠计算的途径其中有一个说法叫超异构计算。前面讲了很多的异构计算,超异构计算的话,英特尔是比较偏底层的,包括芯片级、系统级、软件级(oneAPI 层面)。我的想法是第四个层面,就是怎么样从云边端三边来协同,这三个层面其实都是不同的异构架构。所以从微观一直到宏观,我们都会有不同的计算能力组合出来的强大的计算网络。


云边端这样的一个协同模式从软件层面也提出了更高的要求,计算里的编排方面,如何在正确的时候找到正确的计算资源,然后把数据以最快速、方便、安全的方式实施处理,这方面有很多人在做研究。另一方面,一个很大的挑战是落地,因为从中国目前的情况来看,政府驱动的角度下,非常强的执行能力是我们的优势,有一些可能在其他国家落地不太容易的用户场景,在中国反而可以很快落地。比如说自动驾驶,很有可能在中国会首先大规模商业化。因为云边端协同,包括车和路这方面的协同,都会使得计算能力能够最大程度的发挥出来。


另一方面,在英特尔 oneAPI 部分,希望能够在业界产生共鸣。现在中国也有很多 AI 芯片公司在做自己的异构计算芯片。从异构计算这个角度来看,我们可能希望说,在他们起步阶段,提供给他们系统软件层面的支持,使得国家在芯片行业的发展、投资不至于有太多重复。我们最近在业界希望能够和大家合作,能够有一些思维风暴,看看哪些部分我们可以利用开源的资源,利用工业标准的资源,这样的话,计算力本身只需要开发一次就能普惠到更多行业当中的合作伙伴,可以更好的重建生态,这部分的生态不仅仅是针对应用程序开发商的生态,也包括系统软件方面的生态。


科院计算所研究员崔慧敏:

刚刚谢老师提到的端边云三边协同,我由此想到,也可以利用一个现在云计算提出的红利,就是微服务。亚马逊提供微服务之后,用户就可以把应用程序构建成一个个独立的组件,每个应用程序作为一个服务来运行,这样就让用户云端服务部署变得非常便捷。如果说我们再考虑到将来通信成本可以变得很低,微服务的红利就可以不只是在云这边享受到,在端和边都可以享受到,这样就可以真正扩散到生活的各个角落了。边侧和端侧的应用程序开发和部署都可以享受到微服务在云这边所带来的红利。我觉得这个可能会对未来计算普惠有非常大的影响。当然这里有很多因素的影响,比如说政府的支持、5G 的发展速度等等,都会让这个东西变得非常有潜力,我觉得这是将来有可能大一统的超异构计算。


Q&A

在 AI、5G、云计算等技术快速迭代的今天,各位老师对学校正在学习软件开发的学生有哪些建议?

南京大学软件工程教授张贺:


首先不能盲目去追赶热门的话题、热门的技术。因为我们就是处在大学当中,实际上很多学生并不是非常的熟悉 AI 领域具体的技术,但是他可能会根据市场热度做一个判断,我想首先是在主观判断上应该有一个认识的过程,不能盲目跟风。目前这样一个时代,最大的重点应该是去培养你的学习能力,而不是说你学一堆热门技术。

大学本科教育实际上最大的目标就是培养自学能力,也就是说不管你学的是什么专业,一旦你习得了自学能力,你就可以根据外界的变化,根据知识不断的迭代、更新,能够更新自己的知识,这个能力应该是最重要的。在这个基础之上,像我们软件工程专业,还非常注重实践的能力。比如在 AI 领域当中,并不是说我们拿来数据和模型,然后我们去调一些参数,能够把这个指标刷得多好。至少对学生来说,这并没有太大的意义,就是对他今后的工程实践是没有太大帮助的。反而像我们刚刚提到的话题,比如说软硬件的协同问题,比如说如何解决性能问题,这些实际上应该是更具有实践意义和落地价值。

总结一下我的观点,一是不要跟风,能够进行自我更新和知识迭代,如果你需要学就去学它,解决你当下的问题;二是能够去培养、锻炼,找一切机会实践你动手的能力。


清华大学计算机系长聘副教授翟季冬:


我在清华上课的时候,经常会鼓励学生多去看一些新的科技动态,包括刚刚谈到的 AI、5G、量子计算、类脑计算等。大家知道清华大学的学生都非常努力,会把课本的东西学得非常好。我会鼓励大家多去看一些新的科技洞察,鼓励学生去思考到底这个技术本身会给我们带来一些什么样的变化和挑战。在 5G、AI,或者说新的浪潮下,我会鼓励学生多去思考这些新应用模式会给底层的系统软件和硬件带来哪些新的挑战?下一步的趋势和挑战在哪里?如何和你学到的知识,或者说你脑子里已有的知识结合起来,创造更好的办法,去解决当前或者是未来几年的一些技术挑战?这些是我们应该去思考的。


英特尔中国研究院院长宋继强:


现在的学生们会比较辛苦,相比 10 年、20 年前,现在的技术迭代非常快,而且各个领域之间技术的互相渗透也很多,所以对他们来讲,确实是压力比较大。很可能在本科阶段学的东西,到了硕士甚至是博士还没到的时候,就已经过时了。那么怎么办呢?我觉得张老师和翟老师说的都是有道理的,既需要保证自己能够知道现在业界发展技术的前沿,包括趋势是怎么走的;同时也要能够静得下心来,把自己的专长、技术能力做扎实,实践的能力做好。那么怎么去应对现在这个既广又快的技术发展变化呢?我其实是建议学有余力的同学们,能够多去找一些机会,参与到技术涉及面比较广的大公司的实习活动中去。

比如说英特尔,涉及到技术的方方面面,从硬件到软件,从通信到人工智能都做,很容易就能接触到比较多的技术门类和了解这些技术之间有什么关系,不太容易被很多媒体文章里的宣传所误导,也不容易头脑发热地说一定要从我现在的学科跳到人工智能。大家还是要更早地把自己学习的东西跟业界的专家多做交流,这样可以有更好的发展轨道。


中科院计算所研究员崔慧敏:


我们特别希望学生能做一个上下贯通的开发和研究,我们国科大的包云岗老师也牵头了很有名的“一生一芯”计划,国科大的毕业生可以带着自己的芯片毕业。他们会学习从计算机组成原理,到结构、操作系统等多门课程,今年我的编译原理课也会加入其中。学生到大四的时候就可以做出自己的芯片、操作系统、编译器,也许有一些他们喜欢的人工智能算法也能真的跑在他们自己做的芯片上,这是很有意思的事情,这对学生系统能力的训练确实是特别有用的。


直播视频回放地址:https://live.infoq.cn/room/467


2020 年 9 月 28 日 14:001162
用户头像
蔡芳芳 InfoQ高级编辑

发布了 680 篇内容, 共 357.1 次阅读, 收获喜欢 2383 次。

关注

评论

发布
暂无评论
发现更多内容

【架构师训练营第 1 期 13 周】 作业

Bear

极客大学架构师训练营

JVM垃圾回收原理

幸福小子

JVM垃圾回收原理

JVM&秒杀案例

幸福小子

JVM原理

《JAVA并发编程核心方法与框架》.pdf

田维常

并发编程

作业-第9周

arcyao

架构师训练营 2 期 Week09 作业

架构师训练营第2期 第9周总结

月下独酌

极客大学架构师训练营

成为架构师 - 架构师训练营第 08 周

陈永龙Vincent

第十二周作业

wanlinwang

极客大学架构师训练营

面试官:Mybatis里的设计模式有哪些?我一口气答了8种

田维常

mybatis

盘点2020 | 我要为分布式数据库mongodb在国内影响力提升及推广做点事

杨亚洲(专注mongodb及高性能中间件)

数据库 mongodb 盘点2020 分布式数据库mongodb

互操作性如何助推区块链接入互联网基础设施

CECBC

区块链 密码学

第十三周作业

orchid9

架构师训练营 week10 课后作业

花果山

极客大学架构师训练营

两个周末整理的垃圾回收知识,我要吐血了

moon聊技术

JVM JVM垃圾回收原理

架构师训练营第九周作业

李日盛

架构

架构师训练营第 1 期 -- 第十三周作业

发酵的死神

极客大学架构师训练营

分布式服务框架的选择-《企业IT架构转型之道-阿里巴巴中台战略思想与架构实战》

Man

分布式架构 中台架构

架构师训练营第二期 Week 9 作业

bigxiang

极客大学架构师训练营

架构师训练营 week10 学习笔记

花果山

极客大学架构师训练营

第十三周总结

orchid9

【架构师训练营第 1 期 13 周】 学习总结

Bear

极客大学架构师训练营

C语言学习你要的都在这里

C语言与CPP编程

c++ 学习 编程 C语言

第九周学习总结

晴空万里

极客大学架构师训练营

redis的I/O多路复用

en

redis 多路复用 epoll

成为架构师 - 架构师训练营第 07 周

陈永龙Vincent

南昌“舞动”区块链

CECBC

区块链 基础设施

架构师训练营第 1 期 - 第十三周作业

Todd-Lee

极客大学架构师训练营

week9 性能优化(三)作业和学习总结

杨斌

架构师训练营 - 第十三周 - 作业一

行者

增强产业链供应链自主可控能力

CECBC

供应链

AI、5G、云等技术快速迭代,开发者如何解决计算焦虑?_AI_蔡芳芳_InfoQ精选文章