AI智能
改变未来

清华陈文光教授:AI 超算基准测试的最新探索和实践(附演讲视频)

2020 北京智源大会

本文属于2020北京智源大会嘉宾演讲的整理报道系列。北京智源大会是北京智源人工智能研究院主办的年度国际性人工智能高端学术交流活动,以国际性、权威性、专业性和前瞻性的“内行AI大会”为宗旨。2020年6月21日-24日,为期四天的2020北京智源大会在线上圆满举办。来自20多个国家和地区的150多位演讲嘉宾,和来自50多个国家、超过50万名国内外专业观众共襄盛会。

无规矩不成方圆。放在超级计算机的研发领域,没有一个大家普遍接受的算力评测指标,便难以推动超算迅猛发展。

 

而现在伴随着人工智能的发展,大量专门针对人工智能而研发的超算系统不断涌现。原来的评测指标,由于种种原因,已经不再适合来评测AI超算——“坏的指标导致坏的结果”。

 

于是如何设计新的AI超算基准测试,俨然已经成为超算研究的当务之急。谁能抓住时机,制定出适用于AI系统的“好指标”,并将之推广成国际标准,谁便能主导AI超算评测的核心工作。

 

2020年6月21日下午,在第二届智源大会“智能体系架构和芯片”专题论坛上,清华大学陈文光教授做了题为“人工智能超算的基准测试初探”的专题报告,介绍了由鹏城实验室和清华大学共同开展的AI超算算力基准测试程序的研究进展。

 

陈文光,国内系统研究的领军人物之一,担任中国计算机学会副秘书长、曾任ACM中国理事会主席、ACM中国操作系统分会ChinaSys主席、ACM通讯中文版主编等。

 

陈文光的演讲分为四部分,首先分析了为什么需要人工智能算力基准测试程序,指出好的Benchmark对于领域发展具有引领作用;接着梳理了人工智能基准测试的关键要素及程序特点,并在对比了现有AI算力Benchmark的基础上,陈文光详细介绍了基于AutoML的测试方案以及在广州超算中心、鹏城实验室进行测试的实验结果;最后,他展望了这个领域,在未来的几个工作重点方向。

 整理:贾伟,王光华

一、为什么需要人工智能算力基准测试程序?

 

我们先来看传统的超算。 图1:高性能TOP500计算机系统(https://www.top500.org/statistics/perf-devel/)

 

上图是每年通过基准测试评选出来的高性能TOP500计算机系统的性能表现。三条线中,最下面的是TOP500 中最慢的性能,橙色线是第一名机器的性能,绿色线是前500名性能之和。

 

从这幅图可以看出,任何一台机器都对应一个值。这个值是高性能计算领域常用的标准,即Linpack测试值,通过用高斯消元法求解N元一次稠密线性代数方程组的测试,评价高性能计算机的(浮点)性能指标。

 

现在有很多人工智能应用和系统在做人工智能计算,例如用寒武纪处理器、GPU等构成的系统。

 

对于多样的智能计算系统,能不能像传统的高性能计算机一样,用一个简单的指标来回答哪一套系统的人工智能算力更强?我们能不能用一个数字来表示这个指标,给任意一个机器一个确定的数值,并在通过分析这些数值来预测未来一段时间内的发展趋势?

 

好的指标可以引领一个领域的健康发展。比如Linpack指标很大程度上就主导了对设计高性能计算机时的指标要求,从而鼓励更有针对性的设计。

 

但反过来说,一个不好的指标会阻碍领域的发展。传统的高性能计算主要在使用双精度浮点运算,而人工智能计算里面训练主要是单精度浮点数以及16位浮点数,推理甚至可能只用8位,还可以通过网络裁剪和量化做到更低的位宽。如果我们用双精度浮点数的性能来评价一个人工智能机器的性能,显然是不合适的。一个不好的指标有可能引领这个领域往错误的方向发展。所以传统的Linpack指标本身并不能直接用来评测一个人工智能计算系统的算力。

 二、人工智能算力基准测试的主要考虑

 

设计人工智能算力的基准测试,需要考虑以下几个因素:

 

首先,怎样实现具有人工智能意义的全机规模测试?现阶段,全机规模指的是几千块甚至上万块的加速卡,未来的机器有可能要准备10万块甚至更多的加速卡。目前,还没有单个人工智能的训练任务能够达到计算机的全机规模。即使可能勉强把一些人工智能应用跑到这个规模,得到的结果可能是可能收敛计算速度并没有变得更快,或者准确率上并没有改进,反而变得更差了。所以强行用全机做人工智能并没有意义,并不会有训练时间和准确率的改进,这也不是一个好的测试。

 

其次,如何做到大规模可变?如果要测规模变化巨大的人工智能系统,从几块、几十到几千上万块加速卡,都能对它们进行客观测试并得出分数,这个测试就必须规模可变。Linpack的规模是方程组的阶数N的规模,是N×N的变量,通过改变N便可以改变测试规模。如果要测试规模范围变化巨大的人工智能集群计算机,测试程序必须是规模可变的。

 

第三,如何考虑准确率?这个点很重要!对于人工智能来说,准确率受限的因素很多,包括训练方法、网络结构以及各种参数。如果很快就能算到给定的很低的准确率,那么测试就没有意义;另外有一种思路是把准确度也计到分数里面去。

 

基于以上考虑,以及现有超算算力Benchmark成功案例的分析,陈文光教授认为,人工智能算力基准测试程序应该包含以下四个特性:

 

1. 一个分数。从Linpack的成功,我们可以得出一个结论,即一个分数非常重要。而且分数应该近似线性,当机器规模增大一倍的时候,这个分数最好提高一倍;当然不可能正好是完整的增加一倍,达到百分之七八十,都算比较好的线性。不能机器增加,分数反而下降。

 

2. 可变问题规模。这是设计人工智能基准测试程序最重要的一个考虑。可变问题规模有两点:第一,它可以适应单卡内存规模的变化,一块加速卡本身内存大小存在很多变化,比如从8G到32G等,怎么能够适应这个内存规模的变化;第二,怎么适应从1块卡到1万块卡的变化?。

 

3. 计算要有人工智能意义。以HPL-AI 来说,仅使用人工智能的运算精度是不够的,人们更希望计算本身是具有人工智能意义的。现在最流行的AI运算是神经网络运算,可以认为具有一定的人工智能意义。

 

4. 多机通信可以少,但不能没有。比如,两台机器相隔一万公里,各算各的,最后得出一个分数,这样显然可以达到线性加速比。但这个事情是不对的,因为这没有对系统的通信(包括IO、存储等各方面)的协同能力做出挑战,可能导致系统很多任务并不能完成。测试程序应该相对来说在对紧耦合的机器上进行测评才能得到一个比较好的性能,而不是完全各干各的。

 三、人工智能基准测试程序

 

目前,在人工智能性能基准测试这个领域已经有很多探索,比如MLPerf,小米的mobile AI bench,百度的Deepbench,中国人工智能产业发展联盟的AIIA DNN Benchmark等。其中,MLPerf是国际上大家比较认可的机器学习的标准。此外,混合精度的HPL-AI是在全双精度的Linpack基础上把它改成混合精度的算法,即先用半单精度/单精度计算得到一个近似解,再用双精度计算得到一个更精确精度的解。但其实它除了用到一些半精度/单精度的运算外,实际上和AI并没有直接的关系,HPL-AI更多是用于混合精度算法的研究。

 图2:现有AI性能Benchmark程序

 

已有的人工智能基准测试程序的存在两个主要问题。首先,除HPL-AI外都它们是固定规模的,没有解决可变规模的问题;其次,它们都采用多个应用,这个思路有点像NAS等测八个应用。它们都想完整的反映系统的特点,但是最后公众能够理解和记住的还是HPL(High Performance Linpack)。一个系统一个分数,这是公众最容易接受和理解的东西。

 

那么如何设计符合AI的算力Benchmark呢?

 

一种方案是利用AutoML来做基准测试,通过算法自动搜索合适的神经网络模型结构和超参数,找到特定任务效果比较好的优化的解。这个方案的原始思路是清华大学张悠慧老师提出来的。它是一个类似于搜索的问题,因此需要的计算资源很高,而且做每一次搜索,得到一个神经网络,要对这个模型进行训练,然后才能知道这个搜索出来的模型好不好。

 

AutoML包括两方面,一个是网络结构搜索,一个是超参数搜索。网络结构搜索主要是改变当前的网络结构;超参数搜索更多是在每一层的连接参数上做一些变化。这两个是正交的,也就是说搜出一个网络结构以后,再对它进行超参数搜索。

AutoML具备足够的并行度,通过多次测试或统计平均改善搜索的随机性问题。实验得出,整体上找到解的优劣程度和搜索消耗的计算量基本呈正比,也就是说投入的计算量越多,搜索的空间越大,统计上可以获得的解也越好。

 

AutoML做人工智能基准测试程序有这样的特点:

1)任务自身是深度学习任务设计中的关键环节,且任务能够直接体现超算系统在 深度学习方面的综合性能(包括训练、推断) ;

2)找到的解的优劣程度随着搜索所消耗的计算量而逐渐提升;

3)可以换算成计算效率(%)

 图3:基于AutoML的Benchmark工作流程

 

图3是结构搜索的工作流程。在AutoML框架中,master节点将模型历史及达到的精度发送至slave节点,slave节点根据模型历史及其精度搜索出一个新模型并进行训练,slave节点将根据某种策略停止训练,并将此模型及其达到的精度发送至master节点,master节点接收并更新模型历史及精度(参见文献1)。

 

1. 在广东超算中心的初步实际测试

 

首先,在广东超算中心对16块卡、32块卡做了测试。从图4结果可以看出32块卡训练精度达到78.9%,而16块只达到76.87%。卡数越多flops越高,从16块到32块,卡数增加1倍,但是flops是3倍多,这是传统超性能计算里面很少见到线性加速比。原因在于网络结构搜索时开始的起点是比较小的,搜索到越来越大的网络时候,随着网络越来越大运算效率逐渐增高,就会得到这样一个超线性的加速。从图5可以看出32个GPU时当遇到后面比较大的网络的时候,它的平均flops比前面的高一些。

 图4:广东超算中心16块卡、32块卡测试结果

 图5:广东超算中心各任务的FLOPs性能

 

2. 在鹏城实验室的初步实际测试

 

在鹏城实验室做了最多到128卡的测试。

 图6:鹏城实验室32、64、128卡测试结果

 

图6表明,最优精度32块卡到81.56%,128块卡时到了82.78%。Fflops是增加的,效率是下降的,这和HPC的经验比较相似。随着规模增大,同步、负载等开销不均衡,会带来一些问题让性能下降。另外测试的精度为82%还有很大提高的空间,而人类在这个上面已经可以达到99%了,两者之间的差距是非常大的。当然,这和采用的搜索框架、搜索起点是有关。

 

任务的运行的flops的情况、参数量如图7、图8所示。图7:鹏城实验室各任务的FLOPs性能

 图8:鹏城实验室各任务的参数量

 

用Network Morphism算法后续生成神经网络时,需要将之前所有的历史都看一遍。所以它的生成开销跟历史个数N有关系,当N不断的增加,到后期开销相当大。这也是后续需要解决的问题。

 图9:Network Morphism算法各模型生成时间

 

怎么解决这个问题?如果生成网络时间太长,我们可以增加一个并行度,即在当前网络结构上进行超参数搜索。超参数搜索的好处是搜索时网络结构相对比较稳定,也就是说计算性能差别不大。另外,超参数搜索的生成时间也比较稳定,生成新的超参数的时间和已经评测的超参数个数是无关的,仅和搜索空间相关。超参数搜索的坏处是并行度并不高,所以需要把超参数搜索和结构搜索结合起来,才能进一步提高精度。

 图10:超参数搜索的测试结果

 

图10是超参数搜索的测试结果,可以看到它的每个任务在网络结构上做超参数搜索的性能相对很稳定,生成时间也很稳定,这是很好的特点。

 四、总结与未来工作

 

人工智能超算需要在计算精度上是符合人工智能特点的,计算内容具有人工智能意义,而且规模是可变的,能够适应很大范围的机器规模。

 

展望未来,陈文光指出后续要做的事情包括:

 

1. 进一步提高模型生成与搜索的效率。

1)并行化模型生成算法。现在是在单线程上做的,但是CPU几十个核,如果可以并行做会得到更好效果。

2)优化模型生成算法。利用其他的模型生成的算法,比如遗传算法,不用保留全部的历史,只需要保留当前一代即可。

3)选择更好的优化起点。当前最后得到的accuarcy和人类相比是很低的,因为从60%多这个非常差的起点开始搜索,如果我们从相对比较好的起点上去开始搜索,就能够获得更好的最终效果。

4)使用更大规模的数据集。现在使用的CIFAR-100数据规模比较小,希望用更大规模的数据集,这样对整个系统的IO、网络、通信也会有更好的测试。

 

2. 结合参数搜索。

 

3. 在多种和更大平台上开展测试。

 

4. 做流程管理。借鉴TPC-C等都有相对完整的运行规则、辅助工具、报告和审查机制,希望以后能够真正的做一个相对公平和客观的测试结果发布,能够对AI超算的发展起到一定的支撑作用。

 

参考文献

1. Haifeng Jin, Qingquan Song, and Xia Hu. 2019. Auto-Keras: An Efficient Neural Architecture Search System. In Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining (KDD ’19). Association for Computing Machinery, New York, NY, USA, 1946–1956.

 

点击阅读原文,进入智源社区参与更多讨论。

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 清华陈文光教授:AI 超算基准测试的最新探索和实践(附演讲视频)