AI训练芯片巅峰对决,如何正确“围观”?
AI芯片Benchmark MLPerf最近公开了训练测试0.7版本的结果,我们看到不少相关的新闻和文章。不过,作为有追求的“观众”,我们除了看热闹,当然还要看门道。
亮点
关于这次MLPerf Training 0.7的结果,已经有不少新闻报道[1-4]。从我个人的角度来看,这次的结果有以下几个主要看点和亮点:
新硬件亮相:Google TPU4应该算第一次公开亮相,Nvidia A100也是发布不久,华为的Ascend910第一次参与MLPerf。此外,这中间一个值得关注的现象是,之前的参与的训练系统CPU均来自Intel,而这次Nvidia的A100和Google TPUv4系统,CPU则来自AMD。
训练系统的规模继续飙升:Google TPU v3系统最多4096个处理器,TPU v4系统最多256个处理器;Nvidia V100系统最多1536个处理器,A100系统最多2048个处理器;中国科学院深圳先进技术研究院提交的Ascend910系统最多1024个处理器。
自有框架和硬件相结合:Framework方面,Nvidia针对推荐系统的Merlin/HugeCTR,Google的JAX和华为的Mindspore都是第一次亮相。这几个框架和Tensorflow,Pytorch相比都针对自家硬件有更多性能的优化。
结果解读
source: MLPerf
MLPerf Training 0.7版包括8个Benchmark,其中BERT和DLRM是这次新增的,MiniGo做了调整。整体上看结果还是很惊人的,很多训练时间都不到1分钟,比0.6版本平均提高两倍多。宏观来看,这次的结果反应了这几年大厂在AI芯片上的投入所取得的技术进步。
当然,能在这么短的时间完成训练任务,和MLPerf的规则有关。MLPerf的训练测试就是,指定模型,指定数据集,在目标系统上进行训练,达到“Quality Target”所用的时间,具体如下图。
source: MLPerf
由于MLPerf主要是测试软硬件系统的性能,而不是要达到的state-of-the-art的结果(往往需要更长的训练时间),所以这里设定的目标相对是比较容易较快完成的。同样的系统,要达到满足应用场景的精度要求或者state-of-the-art的结果,需要的训练时间可能长的多(如下图引自新加坡国立大学的尤洋老师)。
如果我们看每项Benchmark的最好成绩,Google TPU v3的4096颗处理器的系统占了4项(两项是用JAX框架实现的),64颗v4 的系统一项,512颗v3 的系统一项。Nvidia的A100系统(1024颗处理器/1792颗处理器)占了两项;
source: MLPerf
PU v4亮相本来是这次MLPerf的一大亮点,本来希望能从提交的结果(GitHub中的system目录)中看到一些TPU v4的信息。不过最详细的描述也只是这个样子:
source: https://github.com/mlperf/training_results_v0.7
所以,有效信息很有限。我也求证过,“TODO”的部分是不是会补充,答案是否定的。所以我们也只能等着Google正式发布了。
综合来看,由于系统配置的差异,测试结果有点“关公战秦琼”的感觉,很难比较。这也是为什么Nvidia和Google可以各自宣布“获胜”的原因。如果一定要比较,可以参考Nvidia所做的一个横向比较。
source: Nvidia
所以,相比单纯看数字的PK,换一些视角的观察可能更有意义。
谁能“玩得起”MLPerf的训练测试
看结果的总表,第一个感受是提交结果玩家不多。Nvidia,Google,Intel提交自家硬件,阿里,Dell,富士通和浪潮提交的是Nvidia加速系统,中国科学院深圳先进技术研究院提交华为系统。所以真正差异的硬件就5个,V100,A100,TPU v3,TPU v4,Ascend910和Intel的CPU,核心玩家就只有Nvidia,Google,Intel和华为。
“Overall, there is still a frustrating lack of submissions from companies other than Google, Nvidia, Intel and Huawei. There were still no results submitted from vocal challengers such as Graphcore and Cerebras. ”[4]
即使是巨头提交的结果,也是非常“稀疏”的,很少有公司能能把所有的Benchmark都做一遍并提交结果。这也反应了部署MLPerf训练评测的门槛是很高的,在不同的系统(包括硬件和框架)的组合下部署这么多个Benchmark的工作量非常大。在MLPerf的Github上可以看到详细的测试结果数据,每个有效的提交都必须有相应的Benchmark,测试系统,测试结果的详细数据。如果我们进一步细看MLPerf的规则和提交结果的要求,就可以看出要完成测试并按要求提交结果的门槛。Google只提交了7个系统组合,还是提交了相对比较完整的结果的(如下图)。
source: MLPerf
Nvidia提交了40个左右的系统组合,包括不同规模的V100和A100系统,还有不同框架的组合,如果每个都提交结果是不现实的。而中国科学院深圳先进技术研究院提交的Ascend910系统则也只提交了Resnet的结果。
另一方面,MLPerf并不是一个强制性评测标准,参与者当然希望提交的数据比较好看。
“Submitting companies are also extremely reticent about which results they submit, with very few figures from similar scale systems ending up in the same column as each other (hence all the normalization that goes on in analysis), due to the fear of coming in in second place. The scores, which are intended to provide ‘apples to apples’ comparisons, are therefore not as useful as they could be for comparing different accelerator architectures.” [4]
软件生态问题
在这次结果当中,个人感觉Framework也是非常值得关注的地方。从MLPerf Training Benchmark的规则来看,它测试的远不止是芯片硬件本身,而是一个完整的软硬件系统的综合能力。而这个系统的规模越来越大,关注点也从单芯片性能到集群的性能。所以,能够提交出一个不错的结果实际上是综合实力的体现。
先看一下DLRM这个Benchmark。我之前的文章,“如何加速推荐系统?这是个高价值问题”中有专门介绍。而在“AI芯片技术发展”中提到Nvidia针对推荐系统专门推出的Merlin框架,这次MLPerf的结果中就可以看出它的效果,如下图。Merlin和PyTorch相比在性能上有不同幅度的提升,大家感兴趣也可以去MLPerf的Github上看看更详细的信息。
source: MLPerf
另外的一个例子是Google的JAX库(JAX is Autograd and XLA, brought together for high-performance machine learning research.)。
source: MLPerf
JAX包括了Google对框架的一些新尝试,MLPerf正好可以作为一个试验场。从结果来看在Transformer上的提升还是不错的。
华为的Mindspore虽然在性能上和TF比并没有太明显的提升,但能支持这种大规模集群的部署也已经证明了它的成熟度。
source: MLPerf
从这几个例子看,现在做AI硬件加速,除了支持TF和PyTorch这样的主流框架,针对场景和性能提供自己的框架应该也是未来的趋势。当然,这对于新的玩家来说又增加了挑战巨头的难度。
“The reason for [the low number of submissions] is while there are a lot of companies that are working on creating custom silicon as well as touting their performance, AI is really hard,” said Nvidia’s Paresh Kharya. “Delivering exceptional performance on AI is really hard, and it requires a lot more than custom silicon. It takes a lot of software as well as a broad ecosystem that works together to innovate and create a full stack that makes AI performance possible. At Nvidia, we’ve invested billions of dollars, and we’ve been working on this problem for almost a decade.”[4]
几点思考
首先,从这次的结果来看,除了几个老面孔巨头继续秀肌肉,其它AI芯片公司的参与度不高,这在Training的基准测试上更为明显(Inference的情况可以参考一下我之前的文章,“AI芯片的第一次同场竞技 - 数据,及数据背后”)。如果未来这个现象无法改变,MLPerf的代表性可能会有疑问,这应该是MLPerf必须思考的问题。最近也看到国内几位老师对AI硬件Benchmark上的思考,比如在HPC上的AI Score,很值得关注。
第二,训练系统的规模化扩展要比单芯片性能更重要,所以很多功夫不是在芯片层面,这对于参与企业的挑战会越来越高。最近新闻中的“GPT-3烧了微软10000张GPU”,虽是比较极端的例子,但模型确实是有不断增大的趋势。当然,MLPerf有一定的炫技成分,实际场景中大多数情况下系统规模不会这么大,会有一个比较合适的平衡点,但支持集群化的训练应该是对做AI训练芯片的玩家的基本要求。从数据上,我们比较关注的是性能增长相对芯片数量能否实现比较稳定的线性增长。
source: MLPerf
因为数据点不多,很难准确的表达趋势,我尽量把可参考的数据集中了一下,希望能给大家个直观感觉。举个例子,Google TPU v4,处理器数量从8颗到64颗,增加8倍,训练Resnet50的时间从30.77下降到4.5,大约是1/6.8,效果还是不错的;增加到256颗,32倍,训练Resnet50的时间从30.77下降到1.82,仅仅是1/16.9;训练BERT的时间从45.57下降到5.73和1.82,约为1/8(相当不错)和1/25(这已经是最好的结果了,猜测可能和BERT模型本身的特点有关)。从有限的结果看,随着芯片数量的增加,性能收益会越来越小。虽然这个结果非常正常,但后面还需要大量软硬件系统的优化,希望能减缓收益下降的速度。
第三,针对这次的结果,Intel也发了一篇文章[3],分析CPU训练的问题,也挺有意思。其中比较重要的讨论是什么样的workload更适合用CPU来训练。简单的结论是,“For training, 3rd Gen Intel® Xeon® Scalable processors are well-suited for large datasets/models, intermittent, lower priority batch jobs on spare cycles with shared infrastructure for transfer learning, high-definition computer vision, recommender engines and more.”[4]
source: Intel
在实际应用中,目前还是有很多情况是GPU/TPU不好发力的,或者是相对CPU优势不大的。同时,CPU也在不断进化,比如Xeon就加强了bf16和VNNI的支持,有可能竞争更多的训练场景。
第四,MLPerf Traning 0.7已经把数据推的这么高了,下一次会玩到什么程度?Google TPU v5会亮相吗,集群规模会不会到上万颗芯片?Nvidia应该会继续挖掘A100的潜力,增加芯片的数量,能提升多少主要就看软件上的功夫了。还有就是,会不会有新面孔出现?
最后还是要插播个小广告。欢迎加入我们壁仞研究院,一起研究AI算法和软硬件系统。
参考资料
[1] Nvidia, "NVIDIA Breaks 16 AI Performance Records in Latest MLPerf Benchmarks"
[2] Google, "Google breaks AI performance records in MLPerf with world's fastest training supercomputer"
[3] Intel, "Intel’s MLPerf Results Show Robust CPU-Based Training Performance For a Range of Workloads"
[4] EETimes, "Nvidia and Google claim bragging rights in MLPerf benchmarks as AI computers get bigger and bigger"
公众号专题:
AI Chip List
https://basicmi.github.io/AI-Chip/
AI Chip Paper List
https://github.com/BirenResearch/AIChip_Paper_List
题图来自网络,版权归原作者所有
本文为个人兴趣之作,仅代表本人观点,与就职单位无关