OpenAI 是如何估計(jì)與分析模型計(jì)算量的?
今天看到OpenAI前些年發(fā)布的一個(gè)模型計(jì)算量的分析,感覺很有價(jià)值,有需求的人童鞋可以看一下, 內(nèi)容如下:
自 2012 年以來,最大規(guī)模 AI 訓(xùn)練運(yùn)行中使用的計(jì)算量呈指數(shù)級(jí)增長,翻倍時(shí)間為 3.4 個(gè)月(相比之下,摩爾定律的翻倍期為 2年)。自 2012 年以來,這一指標(biāo)增長了 300,000 多倍(2 年的翻倍期只能產(chǎn)生 7 倍的增長)。計(jì)算能力的提升一直是 AI 進(jìn)步的關(guān)鍵組成部分,因此只要這一趨勢持續(xù)下去,就值得為遠(yuǎn)遠(yuǎn)超出當(dāng)今能力的系統(tǒng)帶來的影響做好準(zhǔn)備。
AlexNet 到 AlphaGo Zero:計(jì)算量增加了 300,000 倍
總計(jì)算量(以千萬億次/秒為單位),$[footnote-petaflops]$用于訓(xùn)練相對(duì)知名的選定結(jié)果,在其時(shí)間內(nèi)使用了大量計(jì)算,并提供了足夠的信息來估計(jì)所使用的計(jì)算。
概述
推動(dòng)人工智能發(fā)展的因素有三個(gè):算法創(chuàng)新、數(shù)據(jù)(可以是監(jiān)督數(shù)據(jù)或交互式環(huán)境)以及可用于訓(xùn)練的計(jì)算量。算法創(chuàng)新和數(shù)據(jù)難以追蹤,但計(jì)算卻可以量化,為衡量人工智能進(jìn)步的一項(xiàng)投入提供了機(jī)會(huì)。當(dāng)然,大規(guī)模計(jì)算的使用有時(shí)只會(huì)暴露我們當(dāng)前算法的缺點(diǎn)。
但至少在當(dāng)前的許多領(lǐng)域中,更多的計(jì)算似乎可預(yù)見地帶來更好的性能(https://arxiv.org/abs/1712.00409),并且通常與算法的進(jìn)步相補(bǔ)充。
對(duì)于此分析,OpenAi認(rèn)為相關(guān)數(shù)字不是單個(gè) GPU 的速度,也不是最大數(shù)據(jù)中心的容量,而是用于訓(xùn)練單個(gè)模型的計(jì)算量——這個(gè)數(shù)字最有可能與我們的最佳模型的強(qiáng)大程度相關(guān)。每個(gè)模型的計(jì)算與總體計(jì)算有很大不同,因?yàn)椴⑿行允艿较拗?http://learningsys.org/nips17/assets/slides/dean-nips17.pdf)(硬件和算法)限制了模型的大小或訓(xùn)練效果。當(dāng)然,重要的突破仍然需要適度的(https://openai.com/index/ai-and-compute/#appendixrecentnovelresultsthatusedmodestamountsofcompute)計(jì)算量——下面的分析僅涵蓋計(jì)算能力。
這一趨勢每年大約增長 10 倍。這在一定程度上是由定制硬件推動(dòng)的,這些硬件允許以給定價(jià)格(GPU 和 TPU)每秒執(zhí)行更多操作,但主要推動(dòng)力是研究人員不斷尋找并行使用更多芯片的方法,并愿意為此付出經(jīng)濟(jì)成本。
時(shí)代
根據(jù)提供的圖表,我們可以將GPU在機(jī)器學(xué)習(xí)領(lǐng)域的發(fā)展歷程分為四個(gè)階段:
- 2012年之前,GPU用于機(jī)器學(xué)習(xí)比較罕見,導(dǎo)致無法獲得相關(guān)結(jié)果;
- 2012年到2014年,雖然在多臺(tái)GPU上進(jìn)行訓(xùn)練的基礎(chǔ)設(shè)施并不普及,但大多數(shù)結(jié)果仍使用1-8個(gè)GPU,每個(gè)GPU的性能 1-2 TFLOPS, 總計(jì) 0.001-0.1PFSDays;
- 2014年到2016年,出現(xiàn)了支持更大規(guī)模算法并行性的技術(shù),如大批量、架構(gòu)搜索和專家迭代等方法,以及TPU和更快互連等專用hardware。這些改進(jìn)顯著削減了先前的限制,至少對(duì)某些應(yīng)用程序而言;
- 2016年到2017年,AlphaGo Zero / AlphaZero是大規(guī)模算法并行性的一個(gè)引人注目的公開示范。但是,這種規(guī)模的許多其他應(yīng)用程序在算法上已經(jīng)可行,并且很可能已經(jīng)在生產(chǎn)環(huán)境中得到應(yīng)用。
需要指出的是,2012年到2014年期間,大多數(shù)結(jié)果使用了1-8個(gè)GPU,每個(gè)GPU的性能峰值約為1-2 TFLOPS,共計(jì)0.001-0.1PFSDays。隨著數(shù)據(jù)并行化帶來的效益逐漸降低,進(jìn)一步擴(kuò)大規(guī)模的訓(xùn)練所帶來的價(jià)值也會(huì)受到限制。
期待
基于給定的圖表,OpenAI認(rèn)為 ML 的這種趨勢可能會(huì)繼續(xù)存在。首先,許多硬件初創(chuàng)公司正在開發(fā) AI 專用芯片,并聲稱在未來 1-2 年內(nèi)將實(shí)現(xiàn)FLOPS/Watt的大幅提升(FLOPS/$ 也類似)。這意味著僅僅通過以更低的經(jīng)濟(jì)成本執(zhí)行相同數(shù)量的操作,就可能帶來好處。在并行性方面,許多最近的算法創(chuàng)新原則上可以相互累積,例如架構(gòu)搜索和大規(guī)模并行 SGD。
然而,成本最終會(huì)限制這種趨勢的并行性方面,而物理會(huì)限制芯片效率方面。當(dāng)今最大規(guī)模的訓(xùn)練運(yùn)營使用的硬件購買成本高達(dá)數(shù)百萬美元(盡管攤銷成本要低得多)。但事實(shí)上,大部分神經(jīng)網(wǎng)絡(luò)計(jì)算仍在推理(部署)中完成,而不是訓(xùn)練,這意味著公司可以重復(fù)利用或負(fù)擔(dān)得起購買更大的芯片用于訓(xùn)練。因此,只要有足夠的經(jīng)濟(jì)動(dòng)力,我們可能會(huì)看到更大規(guī)模的并行訓(xùn)練運(yùn)營,這將使這種趨勢繼續(xù)數(shù)年。
另外,全球硬件總預(yù)算為 1 萬億美元/年,因此絕對(duì)上限仍然遙遙無期。總的來說,考慮到以往的數(shù)據(jù)、計(jì)算指數(shù)趨勢的先例、機(jī)器學(xué)習(xí)專用硬件的發(fā)展以及其中的經(jīng)濟(jì)動(dòng)力,認(rèn)為這種趨勢不會(huì)在短期內(nèi)繼續(xù)下去是不切實(shí)際的。
雖然過去的趨勢不足以預(yù)測未來這種趨勢將持續(xù)多久,也不足以預(yù)測這種趨勢將持續(xù)下去會(huì)發(fā)生什么,但即使有快速提升能力的合理潛力,也意味著現(xiàn)在開始解決人工智能的安全和惡意使用問題至關(guān)重要。遠(yuǎn)見至關(guān)重要,對(duì)于負(fù)責(zé)任的政策制定和負(fù)責(zé)任的技術(shù)發(fā)展,必須在這些趨勢的前面行事,而不是遲緩地做出反應(yīng)。
附錄:方法
OpenAI使用兩種方法生成數(shù)據(jù)點(diǎn):
- 當(dāng)有足夠信息時(shí),我們計(jì)算每個(gè)訓(xùn)練樣本中所述架構(gòu)的 FLOPs (浮點(diǎn)運(yùn)算次數(shù)),再乘以整個(gè)訓(xùn)練過程中前向傳播和 backward propagation 的總輪次。
- 當(dāng)缺乏直接計(jì)算FLOPs的信息時(shí),我們觀察GPU訓(xùn)練時(shí)長和使用的GPU總數(shù),假設(shè)利用率(通常為0.33)。
對(duì)于大多數(shù)論文,我們優(yōu)先選擇第一種方法;但是,對(duì)于一部分論文,我們采用第二種方法,并盡可能同時(shí)計(jì)算這兩種方法以做一致性檢查。OpenAI還與作者核實(shí)了結(jié)果。坐著的計(jì)算準(zhǔn)確性不是非常嚴(yán)格,但能夠在2-3倍范圍內(nèi)正確。并在下文提供了一些計(jì)算示例。
方法1:計(jì)算模型中的計(jì)算
當(dāng)作者提供了前向傳遞中使用的操作數(shù)時(shí),該方法非常便于使用。例如,Resnet 論文(尤其是 Resnet-151 模型)中給出了操作數(shù)。
計(jì)算公式為:(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 模型:
在某些深度學(xué)習(xí)框架中,我們甚至可以通過編程方式計(jì)算已知模型架構(gòu)的操作數(shù),或者手動(dòng)計(jì)算操作數(shù)。如果論文提供了足夠的信息來進(jìn)行此計(jì)算,計(jì)算結(jié)果會(huì)非常準(zhǔn)確。但是,在某些情況下,論文可能沒有提供所有必要的信息,作者也可能無法透露這些信息。
方法2:GPU 時(shí)間
如果不能直接計(jì)算操作數(shù),我們可以檢查訓(xùn)練了多少個(gè) GPU,訓(xùn)練花費(fèi)了多長時(shí)間,然后假設(shè) GPU 利用率,嘗試估計(jì)執(zhí)行的數(shù)量。OpenAI在這里沒有計(jì)算峰值理論 FLOPS,而是使用假設(shè)的理論 FLOPS 分?jǐn)?shù)來嘗試猜測實(shí)際 FLOPS。根據(jù)經(jīng)驗(yàn),通常假設(shè) GPU 的利用率為 33%,CPU 的利用率為 17%,除非Open獲取到更具體的信息(例如,作者交流過,或工程是在 OpenAI 完成的)。
例如,AlexNet 論文中指出:"網(wǎng)絡(luò)在兩個(gè) GTX 580 3GB GPU 上訓(xùn)練需要五到六天的時(shí)間"。根據(jù)我們的假設(shè),這意味著總計(jì)算量為:
更多模型的計(jì)算
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
可視化并理解卷積網(wǎng)絡(luò)(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
本文轉(zhuǎn)自AI生成未來 ,作者:APlayBoy
