云计算对于很多企业来说是个趋势。
但是亚马逊在中国市场不乐观。
现在这个形势……
声明:本文仅代表个人观点与立场判断,不代表其它组织与机构意见。
我们现在使用的电脑,其名称叫做计算机(Computer),在历史上,它的分类应该算是微型计算机。
对,电脑最初被数学家们设计出来的目的,就是计算。
虽然现在的计算机被赋予了各种各样的功能,但无论是界面绘制、游戏、上网、服务器服务,还是科学计算,亦或是学术研究领域,他们的终极本质都是计算。
关于计算,人们往往存在两种截然不同的观点,我们的计算设备,究竟是性能过剩还是性能不足?
持有性能过剩观点的人认为,他用旧电脑做各种操作都感觉还可以用啊,哪里需要高性能了?但认为性能不足的人却总可以举出很多需要性能的场合例子,处理器以及各种厂商也在不断的提升性能,这些从各方面都客观的证明了,计算机设备作为一个整体类别,它总是需求越来越多的性能,它的性能永远都是不足的,我们需要不断提升性能。
不过这两种观点是可以调和的。现实中,常见的办法就是把一些特殊的,需要高性能计算的应用独立出来,用专用硬件实现之,这样使得对处理器的整体性能要求不会因为小部分高性能计算需求而无限拔高。
虽然,诞生于上世纪八十年代的「PC兼容机」架构具备着难以撼动的生命力,但专用处理器在这个过程中已经不断的开始涌现,声卡,显卡,路由器之类的各种电子设备,以及ARM,MIPS,RISC-V等非x86兼容架构都逐渐崛起。
这其中,为消费者最熟知的变革则来源于智能手机的崛起,它取代了原先人们用微型计算机才能完成的很多工作,而几大智能手机的操作系统恰好都选择了ARM平台,这给ARM平台带来了大量的新鲜生命力。制造业的7nm,5nm先进制程都是先上的ARM平台。
虽然ARM事实上早就已经开始在服务器端部署,但普通消费者对ARM进入通用计算领域还是从苹果开始的,苹果率先的将5nm制程的ARM架构放到了笔记本平台。从而获得了普通消费者的广泛认知,在苹果强大的影响力下,很多人开始认识到ARM架构已然成长到能和x86架构相比拟的地步。
不过,两者还是有不同的。
在x86领域,由于历史的原因,阴差阳错的诞生了一套「x86兼容机」的标准。这使得各厂商可以独立制作出通用的x86硬件,并且适配通用的操作系统。而在其他领域,包括但不限于ARM,MIPS,RISC-V等等,并没有构建出类似的整机标准,这也就使得传统DIY市场无法直接使用这些平台。
因此,x86兼容架构可以多个产商自行定制,并且兼容独立研发的操作系统软件。而操作系统软件可以独立的发布,不用考虑硬件是哪个厂商推出。
这个特点有好处有坏处,好处自然是x86体系本身的生命力。而缺点,自然是因为受限于「x86兼容机」这个架构,产商并不能很方便的做一些软硬件配合更加紧密的修改。为兼容机架构进行修改都涉及到了很多方面的利益代表,所以它的推动会相对困难一些。
而ARM体系就恰恰相反,因为缺少了「ARM兼容机」这一个标准,每个产商实质上可以按照自己的想法制作ARM设备,给它定制不同的启动方式,增加不同的专用处理器,由于操作系统本来就没法脱离具体的设备通用兼容,所以,只需要自己定制自己的操作系统,让它支持这款设备就够了。
我们知道,ARM,MIPS,RISC-V等新架构体系,都是RISC精简指令集,而x86呢?名义上是CISC复杂指令集,但是实际上内置了译码器,最终还是翻译成RISC执行的。在架构上他们没有本质区别,不过x86为了兼容,背上了很大的历史包袱,所有历史版本的指令,它都要试图兼容,所有兼容它的操作系统,它都要能跑起来,历史上曾经有一次机会抛弃兼容性从头做起的ia64,也被amd64干趴下了,自那以后,x86平台再也没有试图想要抛弃过兼容性。
而ARM就不一样,一方面,大量的出货量,大量的研发力量投入进去,使得ARM阵营有能力支撑新制程的研发,二方面,ARM可以大刀阔斧的抛弃兼容性。比如新出的ARMv9架构就抛弃了32位指令的支持。去掉一部分指令集的支持,能够节省晶体管数量,节省晶体管数量,也就能节省芯片面积,而节省芯片面积,则可以提升能耗比,减少发热量,或者在同样的面积堆更多的处理器核心。
鉴于目前没有一个通用的「ARM兼容机」架构标准,散件组装ARM整机还是不现实的,而购买ARM整机看起来也不算是非常轻松的方案,毕竟苹果的ARM整机,价格确实不便宜。
另一方面,服务器端其实很早就已经开始部署ARM架构,因为ARM架构成本更低,能耗比更好;相同性能下功耗更低,相同功耗下也可以获得更高的性能。与此同时,服务器可以针对具体所需要承载的高性能计算,进行定制化的优化,其性质可以类似于专用DSP。
所以,对于高性能计算的更简单方式,还可以是针对特定的计算需求,租用特定的云服务器。
机器学习被很多场合频繁使用,各大互联网厂商都在加强机器学习方面的技术投入。软件方面,支持机器学习的框架不断更新,例如Tensorflow,PyTorch,MxNet等机器学习框架都呈现出蓬勃发展的态势。
而硬件方面,机器学习的要求一点也不低,很多朋友需要专门架设HEDT高性能计算机平台然后搭配多显卡来进行计算,而这在DIY市场价格高企,显卡供求失衡的今天显得成本越来越高,无论是使用CUDA进行GPU学习,还是使用CPU学习,都面临着不小的成本。
另外还有一个趋势就是使用云计算,租用云计算的算力能够使算力共享,节省大家的成本,实现互惠互利。
云计算省掉了搭建环境的步骤,毕竟是专业云计算公司搭建好的架构。而使用云计算,就可以更方便的用上为具体计算定制的处理器。也使得专门为特定处理器进行的优化更易用,因为类似的优化可以直接集成到云计算平台提供的SDK,系统直接配置好。
机器学习本身有训练跟推理等步骤,其中主流的方案大致有NV,Intel以及亚马逊云科技。
这里可以看到,除了NV与Intel方案以外,针对训练的云平台有亚马逊云科技的Trainium平台,而针对推理的则有亚马逊云科技的Graviton平台。
GPU运算的特性是需要将信息不断在CPU与GPU之间进行交互,而数据也需要从CPU的内存与GPU的显存之间不断搬移。对于训练而言,多GPU处理仍然是主流方案,而对于推理而言,如果能够将对计算特化的优化直接做进CPU,那么回归CPU计算也许是某种趋势,毕竟,这样的架构可以更好的利用内存带宽的增长,CPU核心之间的通讯也可以更高效。
亚马逊云科技提供了专门用于机器学习的平台,并为此专门研发了自研处理器平台,针对训练与推理的不同性能使用场景,定制优化两个不同的平台。目前已经迭代了若干代。
训练数据连年增长,单处理器已经变得无法满足日益增长的需求,使用多处理器方案就需要考虑串行化策略的问题。
然而,计算性能并不能依赖单纯的堆砌更多的处理器数量来增长,因为随着数量的增长,处理器之间通讯的开销会逐渐增大,多处理器会使得总体计算效率下降。
而专门为机器学习训练而生的Trn1n架构可以通过各种手段来提升效率。
这些策略包括:
传统需要6周才能完成的BERT-large训练,在云平台中可以1个小时完成。
有了这样的性能,就可以用来去跑一些更加大型的数据训练。比如GPT-3。
BERT-large拥有3.4亿个参数,而GPT-3拥有1750亿个参数,大约是前者的500倍。而在现在的高性能云平台中,GPT-3这样的训练也得以在两周以内完成。在这样的平台诞生以前,如此巨大参数量的机器学习训练可能是不现实的。
使用这个云平台训练的好处之一在于,它是可以基于本机的CPU编程手法来直接操作CPU,而不需要使用专用访问GPU的代码。它对于部分自己写代码的科研人员来说会显得比较方便,毕竟,大多数人还是更习惯使用标准C标准C++语言特性直接面对CPU进行编程,而不是借助CPU来间接访问GPU。
当然,其实亚马逊云科技的自研处理器还有一些新的特性,比如基于统计学的随机舍入功能。
通常来说,当我们需要节省有效数位时,我们将 0.3 四舍五入为 0,将0.6舍入到1。这样的舍入要么减小了数值,要么增大了数值,在计算量极为庞大的情况下,很小的舍入误差逐渐累计,最终误差将达到非常大的程度。
科学家提出过一种算法,就是随机舍入,让一个舍入函数的输出随机:
0.3 有 70%的概率舍入为 0,有30% 的概率舍入为 1。——这样的舍入能够使得大量的0.3在统计学意义上舍入结果数学期望为0.3。这种方法原理上与显示领域的低色彩深度抖动到高色彩深度类似,都是使用低精度更好的表达高精度数据的办法。
不过,要用算法实现随机舍入,需要相对比较大的开销,每次舍入都生成一次随机数,这对整个训练的时间会有非常大影响。因而,虽然科学家证明了随机舍入在某些场合会对改善结果有帮助,但现实中大家很少用随机舍入进行训练,而亚马逊云科技将这个功能直接做进处理器,处理器在指令集实现这种功能,可以使得它的开销更小,让它更可用,而为了使用这些功能,直接调用亚马逊云科技封装好的SDK就行。
与此类似,针对推理算法的Graviton3架构也包含一些处理器级别的新特性,例如它支持 bfloat16 短浮点类型,这使得浮点计算能力大幅度提升,而一部分机器学习的推理运算并不需要太高的精度,使用这个类型可以大幅度提升性能与效率。
关于亚马逊云科技对计算架构带来的革新,欢迎参考
在特定领域我们会面临越来越大的数据量,以及越来越高的计算量,使用针对特定计算而优化的定制处理器往往能够获得更好的性能以及效率,而搭建特定计算平台的代价比通用平台大不少,所以专门为高性能计算定制的云计算平台会带来更强大的计算能力以及更多可能,使得更多更复杂的模型得到计算,最终,推进机器学习等各方面的科研成果与技术进步。