我们在多年前就提到过,AIworkloadtraining充足的数据,使用卷积神经网络逐渐成为主流,全球各大HPC(高性能计算)中心多年来一直在交接这方面的workload。Nvidia的GPU处理。对于仿真、建模等任务,GPU性能可谓相当出众。从本质上讲,HPC模拟/建模和AI训练实际上是一种调和收敛,而GPU作为大规模并行处理器尤其擅长执行此类工作。但从2012年开始,AI革命正式爆发,图像识别软件的准确率首次超越人类水平。所以我们很好奇HPC和AI之间可以在类似GPU上高效处理的共性会持续多久。于是在2019年夏天,通过模型的细化迭代,我们尝试使用混合精度数学单元在Linpackbenchmark上达到了和FP64计算一样的结果。在次年Nvidia推出“Ampere”GA100GPU之前,我们又在HPC和AI处理性能上做了一次尝试。Nvidia当时还没有推出“Ampere”A100GPU,因此这家图形巨头还没有正式向在混合精度张量核上训练AI模型的方向靠拢。现在答案当然很清楚了。FP64向量单元上的HPC工作负载需要一些架构调整才能发挥GPU性能。毫无疑问,它有点像“二等公民”。但在当时,一切皆有可能。随着今年早些时候Nvidia的“Hopper”GH100GPU的推出,AI和HPC在性能提升方面的差距进一步拉大。不仅如此,在最近的秋季GTC2022大会上,Nvidia联合创始人兼CET黄仁勋表示,AI工作负载本身也出现了分歧,这也迫使Nvidia开始探索CPU业务——或者更多准确的说,应该叫做面向GPU的一个优化的扩展内存控制器。我们稍后会详细讨论这个问题。两朵花开,一枝一朵让我们从最清晰的判断开始。如果Nvidia希望其GPU拥有更强的FP64性能,以支持天气建模、流体动力学计算、有限元分析、量子色动力学等高强度数学模拟等64位浮点HPC应用,那么加速器的设计思路应该是这样的:做一个没有任何tensorcores的产品,也没有FP32CUDAcores(主要用作CUDA架构中的图形着色器)。然而,只有几百个客户愿意购买这样的产品,因此单个芯片的价格可能在数万甚至数十万美元。只有这样才能覆盖设计和制造成本。为了建立更大、更有利可图的业务,Nvidia必须设计一种更通用的架构,该架构只需要比CPU更多的向量数学运算。因此,自从Nvidia在15年前决定认真地为HPC应用程序设计产品以来,他们一直专注于使用FP32浮点数学运算的HPC场景——包括地震处理、信号处理和基因组学类工作负载任务中使用的单精度数据和处理,并逐渐增加GPU的FP64能力。K10加速器于2012年7月推出,配备两个“开普勒”GK104GPU,与游戏显卡中使用的GPU完全相同。它有1536个FP32CUDA内核,不使用任何专用的FP64内核。它的FP64支持纯粹是在软件中完成的,因此无法实现明显的性能提升:双GK104GPU在FP32任务上的性能为4.58teraflops,在FP64上的性能为190gigaflops,比率为24比1。2012年底SC12超算大会上发布的K20X采用GK110GPU,FP32性能为3.95teraflops,FP64性能为1.31teraflops,比例提升至3:1。在这一点上,该产品最初可用于HPC应用程序以及在学术/超大规模计算领域训练AI模型的用户。K80GPU加速卡使用两颗GK110BGPU。这是因为Nvidia并没有为当时最高端的“Maxwell”GPU添加FP64支持,所以GK110B成为了当时最流行和性价比最高的选择。K80的FP32性能为8.74teraflops,FP64性能为2.91teraflops,比例依然是3比1。对于“帕斯卡”GP100GPU来说,随着FP16混合精度的引入,HPC和AI的差距进一步拉大指标,但向量FP32与向量FP64的比率进一步转换为2比1,而“Volta”GV100之后的“Ampere”在GA100和“Hopper”GH100等较新的GPU中一直保持这一点。在Volta架构中,Nvidia首先引入了固定矩阵大小的TensorCore矩阵数学单元,显着提升了浮点(和整数)计算能力,并在架构中继续保留向量单元。这些张量核用来处理越来越大的矩阵,而具体的运算精度却越来越低,所以这样的设备已经达到了极其夸张的AI负载吞吐量。当然,这与机器学习本身的模糊统计特性密不可分,与大多数HPC算法所需的高精度数学也存在巨大差距。下图显示了AI和HPC之间性能差距的对数表示。相信大家已经看出两者的趋势差异了:对数形式不够震撼,再用实际比重来看一下:系统设计的艺术:当HPC和AI应用成为主流,GPU架构该何去何从去?并非所有HPC应用程序都可以针对张量核心进行调整,也并非所有应用程序都可以将数学运算卸载到张量核心,因此Nvidia在其GPU架构中仍然保留了一些向量单元。此外,许多HPC组织实际上无法提出像HPL-AI这样的迭代求解器。HPL-AI求解器用于Linpack基准测试,它使用传统的HPLLinpack和FP16加FP32操作,辅以一点FP64操作收敛到与纯FP64蛮力计算相同的答案。这种迭代求解器能够在橡树岭国家实验室的“Frontier”超级计算机上提供6.2倍的有效加速,在RIKEN实验室的“富岳”超级计算机上提供4.5倍的有效加速。如果更多的HPC应用能够迎来自己的HPL-AI类求解器,那么AI与HPC“分离”的问题将迎刃而解。我相信这一天会到来。但与此同时,对于许多工作负载,FP64性能仍然是唯一的决定因素。而凭借强大的AI算力赚得盆满钵满的英伟达,短时间内肯定没有太多时间来打理HPC市场。又开了两朵花,各开一枝。可以看出,英伟达的GPU架构在保持可接受的HPC性能的同时,主要追求更高的AI性能。双管齐下的方法引导客户每三年更新一次硬件。从纯粹的FP64性能来看,NvidiaGPU的FP64吞吐量在2012年到2022年的十年间增长了22.9倍,从K20X的1.3teraflops到H100的30teraflops。如果能将张量核心矩阵单元与迭代求解器结合使用,增幅可达45.8倍。但如果是只需要低精度大规模并行计算的AI训练用户,那么FP32到FP8的性能变化就有些夸张了。FP32的计算能力从最早的3.95teraflops提升到FP8稀疏矩阵的4petaflops,即提升了1012.7倍。而如果和当时K20XGPU上的FP64编码的AI算法(当时的主流方法)相比,那么近十年的性能提升也只是可怜的2倍。显然,两者的性能差异已经不能用巨大来形容了。黄仁勋自己也提到,现在的AI阵营本身又一分为二。一类是由transformer模型支持的巨大基础模型,也称为大型语言模型。此类模型的参数数量增长迅速,对硬件的需求也不断增加。与之前的神经网络模型相比,今天的transformer模型代表了一个完全不同的时代,如下图所示:请原谅这张图有点模糊,但重点是:对于第一组不包含的AI模型transformers,计算要求在两年内增加了8倍;但对于包含Transformer的AI模型,它们的计算需求在两年内增加了275倍。如果使用浮点运算来处理,那么系统中必须有100,000个GPU才能满足需求(这不是什么大问题)。但是,切换到FP4精度会使计算量增加一倍。未来GPU使用1.8nm的晶体管时,算力会提升2.5倍左右,所以还有55倍左右的差距。如果能实现FP2运算(假设精度足够解决问题),计算量可以减半,但至少要用到25万个GPU。此外,大型语言转换器模型通常难以扩展,尤其是在经济上不可行。所以这种模式成为了大公司的专属,就像核武器只会掌握在强国手中一样。而作为“数字经济引擎”的推荐系统,不仅需要成倍的计算量,还需要远超大型语言模型甚至GPU所能提供的内存容量的数据规模。黄仁勋在之前的GTC主题演讲中提到:“与大语言模型相比,每个计算单元在处理推荐系统时所面临的数据量要大一个数量级。显然,推荐系统不仅要求内存速度更快,并且需要大语言模型10倍的内存容量,虽然大语言模型随着时间的推移一直保持着指数级增长,对计算能力有着不断的需求,但是推荐系统也一直保持着这样的增长速度,并不断吞噬更多的内存容量.大型语言模型和推荐系统可以说是目前最重要的两类AI模型,并且有不同的计算要求。推荐系统可以扩展到数十亿用户和数十亿条目,每篇文章,每个视频和每个社交帖子有相应的数字表示,称为嵌入。每个嵌入表可能包含数十个TB级的数据,需要由多个GPU处理。在处理推荐系统时,既有部分网络实现数据并行处理,又要求网络的其他部分实现模型并行处理,这对计算机的各个部分都提出了更高的要求。”如下图所示,是推荐系统的基本架构:为了理解和确定特殊的内存容量和带宽问题,Nvidia开发了“Grace”Arm服务器CPU,并将其与HopperGPU紧密耦合。我们也开玩笑说,如果需要的主存量很大,那么Grace其实只是Hopper的内存控制器。但从长远来看,说不定一堆运行NVLink协议的CXL端口就可以挂到Hooper的下一代GPU上了。所以Nvidia的TheGrace-Hopper超级芯片相当于将一个“儿童”级CPU集群放入一个巨大的“成人”级GPU加速集群中。这些ArmCPU可以支持传统的C++和Fortran工作负载,但要付出代价:混合集群的性能CPU部分仅相当于集群中GPU性能的十分之一,但成本是常规纯CPU集群的3到5倍。顺便说一句,我们尊重并理解Nvid做出的任何工程选择ia.Grace是一个很棒的CPU,Hopper是一个很棒的GPU,两者的结合肯定会很好。但现在我们在同一平台上拥有三种截然不同的工作负载,它们各自将架构推向不同的方向。高性能计算、大型语言模型和推荐系统,这三哥各有特点,不可能同时以经济的方式优化架构。而且显然,AI这种情况已经持续了将近十年。HPC要想完成自我改造,其代码就必须向推荐系统和大语言模型靠拢,而不是固步自封。现有的C++和Fortran代码在FP64上运行。而且很明显,与AI客户相比,HPC客户对每个操作都有溢价。所以除非HPC专家弄清楚迭代求解器的通用开发方法,否则他们将很难扭转这种被动局面。几十年来,我们一直觉得大自然本身并不符合数学定律。我们被迫使用高精度数学来模拟物理世界。描述自然的影响,或用不合适的语言描述客观现实。当然,自然界可能比我们想象的更微妙,迭代求解器更接近我们想要建模的现实。如果真是这样,那对人类来说或许是一种幸运,甚至比十年前HPC和AI的偶然巧合还要幸运。毕竟世界上没有路,走的人多了,就成了路。
