AI算力需求6年增長30萬倍、3.5月翻一番——OpenAI數據分析
來自專欄機器之心
選自OpenAI,作者:DARIO AMODEI、DANNY HERNANDEZ,機器之心編譯。
人工智慧技術近年來的發展不僅仰仗於大數據,更是計算機晶元算力不斷增強的結果。然而,如果 AI 算力需求的增長速度大大超過了晶元算力的進步,我們又該怎麼辦?這種擔心似乎正在成為現實。根據 OpenAI 最新的分析,近年來人工智慧訓練任務所需求的算力每 3.43 個月就會翻倍,這一數字大大超越了晶元產業長期存在的摩爾定律(每 18 個月晶元的性能翻一倍)。
OpenAI 近日發布的分析表明,自 2012 年以來,人工智慧訓練任務中使用的算力正呈指數級增長,其目前速度為每 3.5 個月翻一倍(相比之下,摩爾定律是每 18 個月翻倍)。自 2012 年以來,人們對於算力的需求增長了超過 300,000 倍(而如果是以摩爾定律的速度,只會有 12 倍的增長)。在此期間,硬體算力的提升一直是人工智慧快速發展的重要因素。因此,如果我們希望目前的發展趨勢持續下去,我們就需要為實現遠超當前方法負載的全新系統做好準備。
上表顯示了不同模型以 petaflop/s-days 計的計算總量。深度模型需要耗費大量時間和算力,因此若給定足夠信息,我們可以估計已知訓練結果的總算力需求。一個 petaflop/s-day(pfs-day)代表在一天時間內每秒執行 10^15 次神經網路操作,總計約為 10^20 次操作(operations)。這種計法類似於電能的千瓦時。在這裡,我們不測量硬體 FLOPS 數的理論峰值,而是嘗試估計執行的實際操作數量。OpenAI 在這裡將任何加法或乘法計為單個操作,而不考慮數值精度(使「FLOP」略微用詞不當),同時忽略集成模型。通過計算,每次算力需求翻倍的時間為 3.43 個月。
概論
推動人工智慧發展的動力有三個:演算法創新、數據(其可以是有監督數據或者互動式環境),以及可以用於訓練的算力。演算法創新和大數據體量或許難以跟蹤,但算力通常是可以量化的,這為我們探究 AI 發展進程提供了機會。顯然,使用大量算力有時候只會暴露人類當前演算法低效的現實,但至少目前在很多領域中,使用更多的算力通常會帶來更為優秀的結果,而且這通常也與演算法的進步相輔相成。
在算力的分析中,OpenAI 相信起決定作用的數字並不是單個 CPU 的速度,也不是數據中心的最大容量,而是用於訓練單個模型所需的算力數字——這一數字最有可能代表當前最佳演算法的強大程度。以模型計的算力需求與總算力有很大不同,因為並行計算的限制(硬體和演算法上)定義了模型不能過大,訓練的效率也不會太高。當然,重要的技術突破仍然是在適量的計算上實現的——在這裡我們僅分析算力需求。
OpenAI 發現,目前發展的趨勢是每年大約增加 10 倍。這一過程部分是由更為專業的硬體(如 GPU 和 TPU)使得給定價格下晶元每秒能夠執行更多操作,但主要還是由研究人員一再推動尋找和使用並行方法,花費大量資金來實現的。
時期
從圖中我們可以看到四個時期:
- 2012 年之前:使用 GPU 研究 ML 還不常見,圖中的任何結果都很難達到。
- 2012-2014:在多個 GPU 上進行訓練的基礎架構不常見,因此大多數結果使用 1-8 個速度為 1-2 TFLOPS 的 GPU 進行訓練,得到 0.001-0.1 pfs-days 的結果。
- 2014-2016:使用 10-100 個速度為 5-10 TFLOPS 的 GPU 進行大規模訓練,得到 0.1-10 pfs-days 的結果。減少數據並行化的返回值意味著更大的訓練運行產生的值是有限的。
- 2016-2017:允許更大演算法並行的方法(如較大的批量大小、架構搜索和專家迭代)以及專用硬體(如 TPU 和更快的互聯)極大地突破了限制,尤其是對某些應用來說。
AlphaGoZero/AlphaZero 是公眾可見的大型演算法並行化例子,而很多其他同等規模的應用現在在演算法層面上是可行的,而且可能已經用於生產。
展望
有很多理由讓我們相信圖中展示的趨勢將會繼續。很多硬體創業公司正在開發 AI 專用的晶元,一些企業聲稱他們將在接下來一兩年大幅提高晶元的 FLPOS/Watt(和 FLOPS/$相關)。此外,也可以僅通過重配置硬體,以更少的經濟成本得到相同的計算次數。在並行性方面,上述的很多近期的演算法創新在原則上可以相乘地結合,例如,架構搜索和大規模並行 SGD。
另一方面,成本最終會限制該趨勢的並行性方面,物理學將會限制晶元效率方面。OpenAI 認為如今最大規模的訓練運行使用的硬體在個位數數量上就要以百萬計美元的成本來採購(儘管已攤銷成本低得多)。但今天的神經網路計算的主體仍然在於推理(部署)階段,而不是訓練過程,這意味著企業可以重新利用或採購更大規模的晶元機群用於訓練。因此,如果出現了足夠的經濟誘因,我們甚至可以見證更大規模的平行訓練,為此該趨勢將繼續保持多年。全世界的總體硬體預算是每年 1 萬億美元,因此絕對的限制仍然遠未達到。總體而言,給定上面的數據,計算的指數增長趨勢的先例、在機器學習專用的硬體上運行,以及正在發揮作用的經濟誘因,OpenAI 認為那些相信這個趨勢在短期內將消失的看法是錯誤的。
過去的趨勢並不足以預測該趨勢將在未來持續多久,或當它繼續時會發生什麼。但容量的快速增長的合理潛力意味著開始解決安全(https://blog.openai.com/concrete-ai-safety-problems/)和 AI 的惡意使用成為重要的問題,我們必須搶在該趨勢之前率先行動,而不是延遲地反應。
附錄:方法
OpenAI 使用了兩種方法來生成這些數據點。當我們有足夠的信息時,可以直接計算各種架構在每個訓練樣本所花費的 FLOPs 數(加和乘運算數),並乘以訓練過程中前向傳播與反向傳播的總數量。當我們沒有足夠的信息直接計算 FLOPs 數時,可以查看 GPU 訓練時間與 GPU 的使用數量,並假設一個使用效率(通常為 0.33)。對於大多數論文,我們可以直接使用第一種方法,不過仍然有少數模型需要使用第二種方法計算,OpenAI 儘可能使用兩種方法計算以作為一致性檢查。此外,OpenAI 也會將大多數計算結果送與原作者確定。計算並不是非常精確,但 OpenAI 旨在 2-3 倍的範圍內保持準確,以下提供了一些計算示例。
方法 1 示例:計算模型中的操作數
這種方法在作者給出了前向傳播中的操作數(operations)時非常容易處理,例如在論文 Going deeper with convolutions 中構建的 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
已知模型架構的操作數可以通過一些深度學習框架程式地計算出來,或者我們也可以簡單地手動計算操作數。如果論文給出了足夠的信息以計算操作數,那麼方法 1 會非常精確. 但有些時候論文並沒有包含所有的必要信息,且作者也不能公開地展示詳細細節,這樣的計算就會比較麻煩。
方法 2 示例:GPU 時間
如果我們不能直接計算操作數,那麼就要查看模型需要多少 GPU 訓練多長時間,然後再根據對 GPU 利用率的合理假設估計執行的操作數量。需要強調的是,我們不能只計算 FLOPs 的理論峰值,相反需要使用理論 FLOPs 數的假定分數來嘗試預測實際的 FLOPs 數。根據 OpenAI 的實驗經驗,除非有更加具體的信息,他們一般假設 GPU 的利用率為 33%、CPU 的利用率為 17%。
例如在 AlexNet 論文中,原文表示「我們的網路在兩塊 GTX 580 3GB 顯存的 GPU 上需要花 5 到 6 天進行訓練。」根據 OpenAI 的假設,那麼它的總計算數可計算為:
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
這個方法只是一種近似計算,並且很容易超出實際的上下兩倍。因此,OpenAI 的目標是僅估計模型操作數的數量級。在實踐中,這兩種方法都可以用且結果也比較相似,例如直接計算 AlexNet 的操作數將得出 0.0054 pfs-days,而通過 GPU 執行時間估計可得出 0.0058 pfs-days。
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
可視化和理解卷積神經網路
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 connectedFirst layer: 20*20*3*16*8*8 = 1.23M add-multipliesSecond layer: 9*9*16*32*4*4 = 0.66M add-multipliesThird layer: 9*9*32*256 = 0.66M add-mutlipliesTotal ~ 2.55M add-multiplies2.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 MFLOPs20 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
神經架構搜索
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-daysDetails given in a [later paper](https://arxiv.org/pdf/1707.07012.pdf).
神經機器翻譯
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
附錄:使用適當計算量得到的近期新結果
產生重要的結果不一定需要大量的計算。很多近期值得注意的結果僅使用了適當的計算量。以下是一些相關的案例,它們能為計算評估給出足夠的信息。OpenAI 並沒有使用多種方法來評估這些模型的計算,對於上邊界他們對可能的丟失信息進行的保守估計,因此它們會有更多的總不確定度。這些結果並不包含在 OpenAI 的定量分析中,但它們仍然是有趣和值得分享的:
- Attention is all you need: 0.089 pfs-days (6/2017)(https://arxiv.org/abs/1706.03762)
- Adam Optimizer: less than 0.0007 pfs-days (12/2014)(https://arxiv.org/abs/1412.6980)
- Learning to Align and Translate: 0.018 pfs-days (09/2014)(https://arxiv.org/abs/1409.0473)
- GANs: less than 0.006 pfs-days (6/2014)(https://arxiv.org/abs/1406.2661)
- Word2Vec: less than 0.00045 pfs-days (10/2013)(https://arxiv.org/abs/1310.4546)
- Variational Auto Encoders: less than 0.0000055 pfs-days (12/2013)(https://arxiv.org/abs/1312.6114)
原文鏈接:https://blog.openai.com/ai-and-compute/
推薦閱讀:
※光子晶元橫空出世,28 歲 MIT 中國青年科學家直取 AI 算力霸業!AI 晶元賽局勝負未定 | 獨家
※阿里達摩院自主研發AI晶元 布局「中國芯」
※沙子變金子全過程--CPU成長記
※AI晶元之戰誰將成為人工智慧時代的最終玩家
※想擊敗英偉達?可能得十家以上不同垂直領域的深鑒科技,這就是AI晶元的「行情」| 人物對話