OpenAI发布的分析显示,自2012年以来,最大规模的人工智能训练运行所使用的计算量呈指数增长,3.5个月翻一倍(相比之下,摩尔定律需要18个月)。自2012年以来,该指标增长了30多万倍。计算方面的改进一直是AI进展的关键部分,所以只要这种趋势继续下去,未来系统的能力将远远超出当今系统。
对数标尺
线性标尺
该图表显示了以petaflop/s-days为单位的计算总量,用于训练相对熟知的选定结果,使用大量时间计算,并提供足够的信息来估计所用的计算。每秒petaflop/p-day(pfs-day),每天执行10-15次神经网络操作,总共大约10到20次操作。我们不测量硬件的峰值理论FLOPS,而是尝试估计实际操作的数量。我们将加法和乘法计算做为单独的操作,而不考虑数值精度(这样的话,说成“FLOP”就有些用词不当了),并忽略ensemble model。最佳拟合的倍增时间为3.43个月。
概述
推动人工智能发展的因素有三个:算法创新,数据(可以是监督数据或交互式环境),以及可用于训练的计算量。算法创新和数据的进展很难追踪,但计算量是可量化的,提供了衡量AI进展的机会。当然,使用大规模计算有时会暴露我们当前算法的缺陷。但至少在许多现有领域中,计算越多似乎会性能就越好,并且这往往是对算法进步的补充。
对于这种分析,我们认为相关数字不是单个GPU的速度,也不是数据中心的最大容量,而是用于训练单个模型的计算量,这是最可能表明我们的最佳模型强度的数字。每个模型的计算与总体计算有很大不同,因为并行性(硬件和算法)限制了模型的大小,以及有用的训练的多少。当然,重要的突破仍然是通过适量的计算来实现的,这一分析仅涵盖计算能力。
这种趋势每年大约增加10倍。一部分是由定制硬件驱动的,它允许在给定的成本(GPU和TPU)下每秒执行更多的操作,但主要原因是研究人员不断寻找方法,同时使用更多的芯片,并愿意支付这样做所花费的经济成本。
发展4阶段
通过图表,我们大致可以看到四个不同的发展阶段:
- 2012年之前:ML使用GPU并不常见,因此很难实现图表中的结果。
- 2012年到2014年:在许多GPU上进行训练的基础架构并不常见,因此大多数结果使用1-8个GPU,额定功率为1-2 TFLOPS,总共为0.001-0.1 pfs-days。
- 2014年至2016年:大规模的结果使用了10到100个 GPU,额定功率为5-10 TFLOPS,用时0.1-10 pfs天。数据并行性收益递减意味着更大规模的训练价值有限。
- 2016年至2017年:至少对于某些应用程序而言,允许更大算法并行性的方法(如大批量,体系结构搜索和专家级迭代)以及专用硬件(如TPU和更快的互连)大幅突破了这些限制。
AlphaGoZero / AlphaZero是大规模并行算法中最明显的示例,但此规模的许多其他应用程序现在在算法上也可行,并且可能已经应用到生产环境中了。
展望
我们有足够的理由相信图表中的趋势可能会延续下去。许多硬件初创公司正在开发AI专用芯片,其中一些宣称他们将在未来1-2年内大幅增加FLOPS/Watt(与FLOPS/$相关)。简单地重新配置硬件,完成相同数量的操作,也可以减少经济成本。在并行性方面,上述许多算法创新原则上可以乘法组合,例如体系结构搜索和大规模并行SGD。
另一方面,成本最终将限制并行规模,芯片的效率在物理上也是有限的。我们认为,今天最大规模的训练采用硬件,需要数百万美元的购买成本(尽管摊销成本要低得多)。但目前大多数神经网络计算仍然用于推理(配置),而不是训练,这意味着公司可以重新调整用途或购买更多的芯片进行训练。因此,如果有足够的经济激励措施,我们可以看到更多的大规模并行训练,从而使这一趋势持续数年。全球硬件总预算为1万亿美元一年,所以绝对的限制还很遥远。总的来说,考虑到上述数据,计算指数趋势的先例,ML特定硬件的工作以及经济激励,我们确信这种趋势在短期内会持续存在。
以往的趋势不足以用来预测这种趋势将持续多久,或者继续下去会发生什么。但即使是能力迅速增长的合理潜力,现在就开始解决安全使用AI问题至关重要。有预见力对决策和技术发展很关键。
附录:方法
有两种方法用于生成这些数据点。当我们有足够的信息时,我们直接在每个训练样例中描述的架构中计算FLOP的数量(相加和相乘),并乘以训练期间的前向和后向通道总数。当我们没有足够的信息来直接计算FLOP时,我们查看了GPU的训练时间和使用的GPU总数,并假设了使用效率(通常为0.33)。对于大多数论文,我们能够使用第一种方法,但对于少数我们依赖第二种方法,并且我们尽可能计算两者作为一致性检查。计算并不是精确的,但我们的目标是在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)
= (11.4 * 10^9) * 2 * 3 * (1.2 * 10^6 images) * 128
= 10,000 PF = 0.117 pfs-days
在一些深度学习框架中,对于已知的模型架构也可以以编程的方式操作,或者我们可以简单地手动计算操作。如果一篇论文提供了足够的信息来进行计算,它将会非常准确,但在某些情况下,论文不包含所有必要的信息,作者也无法公开揭示它。
方法2的示例:GPU时间
如果我们不能直接依靠操作,我们可以看看有多少GPU,需要经过多长时间的训练,并且在GPU利用率上合理的猜测来尝试估计的操作次数。这里我们不计算峰值理论FLOPS,但是使用理论FLOPS的假定分数来尝试猜测实际FLOPS。根据我们自己的经验,我们通常假设GPU的利用率为33%,CPU的利用率为17%,除非我们有更具体的信息。
举例来说,在AlexNet的论文中,它指出“我们的网络在两台GTX 580 3GB GPU上训练需要花费五到六天的时间”。根据我们的假设,这意味着总计算为:
Number of GPUs * (peta-flops/GTX580) * days trained * estimated utilization
= 2 * (1.58 * 10 ^ -3 PF) * 5.5 * 0.33
= 500 PF = 0.0058 pfs-days
这种方法更接近真实,很容易就可以减少2倍或甚至更多,我们的目标只是估计数量级。在实践中,当两种方法都可用时,它们通常表现都很好(对于AlexNet,我们也可以直接对操作进行计数,需要0.0054 pfs-days,而GPU时间方法,则需要0.0058)。
1.2M images * 90 epochs * 0.75 GFLOPS * (2 add-multiply) * (3 backward pass)
= 470 PF = 0.0054 pfs-days
示例
Dropout
Method 2:
1 GPU * 4 days * 1.54 TFLOPS/GTX 580 * 0.33 utilization
= 184 PF = 0.0021 pfs-days
可视化并理解Conv Nets
Method 2:
1 GPU * 12 days * 1.54 TFLOPS/GTX 580 * 0.33 utilization
= 532 PF = 0.0062 pfs-days
DQN
Method 1:
Network is 84x84x3 input, 16, 8x8, stride 4, 32 4x4 stride 2, 256 fully connected
First layer: 20*20*3*16*8*8 = 1.23M add-multiplies
Second layer: 9*9*16*32*4*4 = 0.66M add-multiplies
Third layer: 9*9*32*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
Method 1:
(348M + 304M) words * 0.380 GF * 2 add-multiply * 3 backprop * 7.5 epoch
= 7,300 PF = 0.085 pfs-days
Method 2:
10 days * 8 GPU’s * 3.5 TFLOPS/ K20 GPU * 0.33 utilization
= 8,100 PF = 0.093 pfs-days
VGG
Method 1:
1.2 M images * 74 epochs * 16 GFLOPS * 2 add-multiply * 3 backward pass
= 8524 PF = 0.098 pfs-days
Method 2:
4 Titan Black GPU’s * 15 days * 5.1 TFLOPS/GPU * 0.33 utilization
= 10,000 PF = 0.12 pfs-days
DeepSpeech2
Method 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
Method 2:
16 TitanX GPU’s * 5 days * 6 TFLOPS/GPU * 0.50 utilization
= 21,000 PF = 0.25 pfs-days
Xception
Method 2:
60 K80 GPU’s * 30 days * 8.5 TFLOPS/GPU * 0.33 utilization
= 4.5e5 PF = 5.0 pfs-days
Neural Architecture Search
Method 1:
50 epochs * 50,000 images * 10.0 GFLOPSs * 12800 networks * 2 add-multiply * 3 backward pass
= 1.9e6 PF = 22 pfs-days
Method 2:
800 K40’s * 28 days * 4.2 TFLOPS/GPU * 0.33 utilization
= 2.8e6 PF = 31 pfs-days
Details given in a [later paper](https://arxiv.org/pdf/1707.07012.pdf).
Neural Machine Translation
Method 2:
sqrt(10 * 100) factor added because production model used 2-3 orders of magnitude more data, but only 1 epoch rather than 10.
96 K80 GPU’s * 9 days * 8.5 TFLOPS * 0.33 utilization * sqrt(10 * 100)
= 6.9e6 PF = 79 pfs-days
附录:最近使用适量计算的新颖结果
大规模计算当然不是产生重要结果的要求。最近许多值得注意的结果仅使用适量的计算。以下是使用适度计算的结果的一些例子,它提供了足够的信息来估计计算。我们没有使用多种方法来估计这些模型的计算结果,对于上限,我们对缺失的信息进行了保守估计,因此它们整体不确定性更大。它们对我们的定量分析并不重要,但我们仍然认为它们很有趣,值得分享:
注意是你所需要的一切: 0.089 pfs-days(6/2017)
Adam Optimizer:小于0.0007 pfs-days(12/2014)
学会对齐和翻译: 0.018 pfs-days(09/2014)
GANs:小于0.006 pfs日期(6/2014)
Word2Vec:小于0.00045 pfs天(10/2013)
变分自动编码器:小于0.0000055 pfs天(12/2013)