OpenAI 是如何估计与分析模型计算量的?

发布于 2024-6-25 10:03
浏览
0收藏

今天看到OpenAI前些年发布的一个模型计算量的分析,感觉很有价值,有需求的人童鞋可以看一下, 内容如下:


自 2012 年以来,最大规模 AI 训练运行中使用的计算量呈指数级增长,翻倍时间为 3.4 个月(相比之下,摩尔定律的翻倍期为 2年)。自 2012 年以来,这一指标增长了 300,000 多倍(2 年的翻倍期只能产生 7 倍的增长)。计算能力的提升一直是 AI 进步的关键组成部分,因此只要这一趋势持续下去,就值得为远远超出当今能力的系统带来的影响做好准备。


AlexNet 到 AlphaGo Zero:计算量增加了 300,000 倍

OpenAI 是如何估计与分析模型计算量的?-AI.x社区

总计算量(以千万亿次/秒为单位),$[footnote-petaflops]$用于训练相对知名的选定结果,在其时间内使用了大量计算,并提供了足够的信息来估计所使用的计算。

概述

推动人工智能发展的因素有三个:算法创新、数据(可以是监督数据或交互式环境)以及可用于训练的计算量。算法创新和数据难以追踪,但计算却可以量化,为衡量人工智能进步的一项投入提供了机会。当然,大规模计算的使用有时只会暴露我们当前算法的缺点。


但至少在当前的许多领域中,更多的计算似乎可预见地带来更好的性能(https://arxiv.org/abs/1712.00409),并且通常与算法的进步相补充。


对于此分析,OpenAi认为相关数字不是单个 GPU 的速度,也不是最大数据中心的容量,而是用于训练单个模型的计算量——这个数字最有可能与我们的最佳模型的强大程度相关。每个模型的计算与总体计算有很大不同,因为并行性受到限制(http://learningsys.org/nips17/assets/slides/dean-nips17.pdf)(硬件和算法)限制了模型的大小或训练效果。当然,重要的突破仍然需要适度的(https://openai.com/index/ai-and-compute/#appendixrecentnovelresultsthatusedmodestamountsofcompute)计算量——下面的分析仅涵盖计算能力。


这一趋势每年大约增长 10 倍。这在一定程度上是由定制硬件推动的,这些硬件允许以给定价格(GPU 和 TPU)每秒执行更多操作,但主要推动力是研究人员不断寻找并行使用更多芯片的方法,并愿意为此付出经济成本。

时代

根据提供的图表,我们可以将GPU在机器学习领域的发展历程分为四个阶段:


  1. 2012年之前,GPU用于机器学习比较罕见,导致无法获得相关结果;
  2. 2012年到2014年,虽然在多台GPU上进行训练的基础设施并不普及,但大多数结果仍使用1-8个GPU,每个GPU的性能 1-2 TFLOPS, 总计 0.001-0.1PFSDays;
  3. 2014年到2016年,出现了支持更大规模算法并行性的技术,如大批量、架构搜索和专家迭代等方法,以及TPU和更快互连等专用hardware。这些改进显著削减了先前的限制,至少对某些应用程序而言;
  4. 2016年到2017年,AlphaGo Zero / AlphaZero是大规模算法并行性的一个引人注目的公开示范。但是,这种规模的许多其他应用程序在算法上已经可行,并且很可能已经在生产环境中得到应用。


需要指出的是,2012年到2014年期间,大多数结果使用了1-8个GPU,每个GPU的性能峰值约为1-2 TFLOPS,共计0.001-0.1PFSDays。随着数据并行化带来的效益逐渐降低,进一步扩大规模的训练所带来的价值也会受到限制。

期待

基于给定的图表,OpenAI认为 ML 的这种趋势可能会继续存在。首先,许多硬件初创公司正在开发 AI 专用芯片,并声称在未来 1-2 年内将实现FLOPS/Watt的大幅提升(FLOPS/$ 也类似)。这意味着仅仅通过以更低的经济成本执行相同数量的操作,就可能带来好处。在并行性方面,许多最近的算法创新原则上可以相互累积,例如架构搜索和大规模并行 SGD。


然而,成本最终会限制这种趋势的并行性方面,而物理会限制芯片效率方面。当今最大规模的训练运营使用的硬件购买成本高达数百万美元(尽管摊销成本要低得多)。但事实上,大部分神经网络计算仍在推理(部署)中完成,而不是训练,这意味着公司可以重复利用或负担得起购买更大的芯片用于训练。因此,只要有足够的经济动力,我们可能会看到更大规模的并行训练运营,这将使这种趋势继续数年。


另外,全球硬件总预算为 1 万亿美元/年,因此绝对上限仍然遥遥无期。总的来说,考虑到以往的数据、计算指数趋势的先例、机器学习专用硬件的发展以及其中的经济动力,认为这种趋势不会在短期内继续下去是不切实际的。


虽然过去的趋势不足以预测未来这种趋势将持续多久,也不足以预测这种趋势将持续下去会发生什么,但即使有快速提升能力的合理潜力,也意味着现在开始解决人工智能的安全和恶意使用问题至关重要。远见至关重要,对于负责任的政策制定和负责任的技术发展,必须在这些趋势的前面行事,而不是迟缓地做出反应。

附录:方法

OpenAI使用两种方法生成数据点:

  1. 当有足够信息时,我们计算每个训练样本中所述架构的 FLOPs (浮点运算次数),再乘以整个训练过程中前向传播和 backward propagation 的总轮次。
  2. 当缺乏直接计算FLOPs的信息时,我们观察GPU训练时长和使用的GPU总数,假设利用率(通常为0.33)。


对于大多数论文,我们优先选择第一种方法;但是,对于一部分论文,我们采用第二种方法,并尽可能同时计算这两种方法以做一致性检查。OpenAI还与作者核实了结果。坐着的计算准确性不是非常严格,但能够在2-3倍范围内正确。并在下文提供了一些计算示例。

方法1:计算模型中的计算

当作者提供了前向传递中使用的操作数时,该方法非常便于使用。例如,Resnet 论文(尤其是 Resnet-151 模型)中给出了操作数。

计算公式为:(add-multiplies per forward pass) × (2 FLOPs/add-multiply) × (3 for forward and backward pass) × (number of examples in dataset) × (number of epochs)

Resnet-151 模型:

OpenAI 是如何估计与分析模型计算量的?-AI.x社区

在某些深度学习框架中,我们甚至可以通过编程方式计算已知模型架构的操作数,或者手动计算操作数。如果论文提供了足够的信息来进行此计算,计算结果会非常准确。但是,在某些情况下,论文可能没有提供所有必要的信息,作者也可能无法透露这些信息。

方法2:GPU 时间

如果不能直接计算操作数,我们可以检查训练了多少个 GPU,训练花费了多长时间,然后假设 GPU 利用率,尝试估计执行的数量。OpenAI在这里没有计算峰值理论 FLOPS,而是使用假设的理论 FLOPS 分数来尝试猜测实际 FLOPS。根据经验,通常假设 GPU 的利用率为 33%,CPU 的利用率为 17%,除非Open获取到更具体的信息(例如,作者交流过,或工程是在 OpenAI 完成的)。


例如,AlexNet 论文中指出:"网络在两个 GTX 580 3GB GPU 上训练需要五到六天的时间"。根据我们的假设,这意味着总计算量为:

OpenAI 是如何估计与分析模型计算量的?-AI.x社区

更多模型的计算

DropOut(https://arxiv.org/abs/1207.0580)

方法 2:1 GPU * 4 days * 1.54 TFLOPS/GTX 580 * 0.33 utilization = 184 PF = 0.0021 pfs-days

可视化并理解卷积网络(https://arxiv.org/abs/1311.2901)

方法 2: 1 GPU * 12 days * 1.54 TFLOPS/GTX 580 * 0.33 utilization = 532 PF = 0.0062 pfs-days

DQN(https://arxiv.org/abs/1311.2901)

  • 方法 1:
  • Network is 84x84x3 input, 16, 8x8, stride 4, 32 4x4 stride 2, 256 fully connected
  • First layer: 20203168*8 = 1.23M
  • add-multiplies Second layer: 9916324*4 = 0.66M
  • add-multiplies Third layer: 9932*256 = 0.66M
  • add-mutliplies Total ~ 2.55M
  • add-multiplies 2.5 MFLOPs * 5M updates * 32 batch size * 2 multiply-add * 3 backward pass = 2.3 PF = 2.7e-5 pfs-days

Seq2Seq(https://arxiv.org/abs/1409.3215)

  • 方法 1: (348M + 304M) words * 0.380 GF * 2 add-multiply * 3 backprop * 7.5 epoch = 7,300 PF = 0.085 pfs-days
  • 方法 2: 10 days * 8 GPU’s * 3.5 TFLOPS/ K20 GPU * 0.33 utilization = 8,100 PF = 0.093 pfs-days

VGG(https://arxiv.org/pdf/1409.1556.pdf)

  • 方法 1:1.2 M images * 74 epochs * 16 GFLOPS * 2 add-multiply * 3 backward pass = 8524 PF = 0.098 pfs-days
  • 方法 2:4 Titan Black GPU’s * 15 days * 5.1 TFLOPS/GPU * 0.33 utilization = 10,000 PF = 0.12 pfs-days

DeepSpeech2(https://arxiv.org/abs/1512.02595)

  • 方法 1:1 timestep = (1280 hidden units)^2 * (7 RNN layers * 4 matrices for bidirectional + 2 DNN layers) * (2 for doubling parameters from 36M to 72M) = 98 MFLOPs 20 epochs * 12,000 hours * 3600 seconds/hour * 50 samples/sec * 98 MFLOPs * 3 add-multiply * 2 backprop = 26,000 PF = 0.30 pfs-days
  • 方法 2:16 TitanX GPU’s * 5 days * 6 TFLOPS/GPU * 0.50 utilization = 21,000 PF = 0.25 pfs-days

Xception(https://arxiv.org/abs/1610.02357)

  • 方法 2:60 K80 GPU’s * 30 days * 8.5 TFLOPS/GPU * 0.33 utilization = 4.5e5 PF = 5.0 pfs-days

Neural Architecture Search(https://arxiv.org/abs/1611.01578)

  • 方法1:50 epochs * 50,000 images * 10.0 GFLOPSs * 12800 networks * 2 add-multiply * 3 backward pass = 1.9e6 PF = 22 pfs-days
  • 方法 2:800 K40’s * 28 days * 4.2 TFLOPS/GPU * 0.33 utilization = 2.8e6 PF = 31 pfs-days

本文转自AI生成未来 ,作者:APlayBoy


原文链接:​​https://mp.weixin.qq.com/s/E2IgMSoou_hvlMPnn7zf9g​

已于2024-6-25 10:04:23修改
收藏
回复
举报
回复
相关推荐