深度學習框架簡史:TF和PyTorch雙頭壟斷,未來十年迎來黃金時期

2021-01-11 騰訊網

當前,各式各樣深度學習框架的發展充分賦能機器學習,尤其是深度學習領域,為開發者提供了極致便利。在本文中,Waymo 軟體工程師 Lin Yuan 細數了二十一世紀以來深度學習框架的發展歷程,並劃分為了石器、青銅、鐵器、羅馬和工業化時代。

過去十年,機器學習(尤其是深度學習)領域湧現了大量算法和應用。在這些深度學習算法和應用湧現的背後,是各種各樣的深度學習工具和框架。它們是機器學習革命的腳手架:TensorFlow 和 PyTorch 等深度學習框架的廣泛使用,使得許多 ML 從業者能夠使用適合的領域特定的程式語言和豐富的構建模塊更容易地組裝模型。

回顧深度學習框架的演變,我們可以清楚地看到深度學習框架和深度學習算法之間的緊密耦合關係。這種相互依賴的良性循環推動了深度學習框架和工具的快速發展。

By Nationalmuseet, CC BY-SA 3.0,

https://commons.wikimedia.org/w/index.php?curid=90400464

石器時代

(21 世紀初)

神經網絡的概念已經出現一段時間了。在 21 世紀初之前,有一些工具可以用來描述和開發神經網絡。這些工具包括 MATLAB、OpenNN、Torch 等,它們要麼不是專門為神經網絡模型開發定製的,要麼擁有複雜的用戶 api,缺乏 GPU 支持。在此期間,ML 實踐者在使用這些原始的深度學習框架時不得不做很多繁重的工作。

By Nationalmuseet, CC BY-SA 3.0,

https://commons.wikimedia.org/w/index.php?curid=90400464

青銅時代

(~2012 年)

2012 年,多倫多大學的 Alex Krizhevsky 等人提出了一種深度神經網絡架構,後來被稱為 AlexNet[1],該架構在 ImageNet 數據集上達到了 SOTA 精度,並大大超過了第二名的選手。這一出色的結果引發了深度神經網絡的熱潮,此後各種深度神經網絡模型在 ImageNet 數據集的準確性上不斷創下新高。

大約在這個時候,一些早期的深度學習框架,如 Caffe、Chainer 和Theano 應運而生。使用這些框架,用戶可以方便地建立複雜的深度神經網絡模型,如 CNN、RNN、LSTM 等。此外,這些框架還支持多 GPU 訓練,這大大減少了對這些模型的訓練時間,並且能夠對以前無法裝入單一 GPU 內存的大型模型進行訓練。在這些框架中,Caffe 和 Theano 使用聲明式編程風格,而 Chainer 採用命令式編程風格。這兩種不同的編程風格也為即將到來的深度學習框架設定了兩條不同的開發路徑。

Nordisk familjebok — Nordisk familjebok (1910), vol.13, Till art. J rn ldern.

https://commons.wikimedia.org/w/index.php?curid=109777

鐵器時代

(2015 ~ 2016)

AlexNet 的成功引起了計算機視覺領域的高度關注,並重新點燃了神經網絡的希望,大型科技公司加入了開發深度學習框架的行列。其中,谷歌開源了著名的 TensorFlow 框架,它至今仍是 ML 領域最流行的深度學習框架。Caffe 的發明者加入了 Facebook 並發布了 Caffe2;與此同時,Facebook AI 研究(FAIR)團隊也發布了另一個流行的框架 PyTorch,它基於 Torch 框架,但使用了更流行的 Python api。微軟研究院開發了 CNTK 框架。亞馬遜採用了 MXNet,這是華盛頓大學、CMU 和其他機構的聯合學術項目。TensorFlow 和 CNTK 借鑑了 Theano 的聲明式編程風格,而 PyTorch 則繼承了 Torch 的直觀和用戶友好的命令式編程風格。命令式編程風格更加靈活(比如定義一個 While 循環等)並且容易跟蹤,而聲明式編程風格通常為內存和基於計算圖的運行時優化提供了更多的空間。另一方面,被稱為「mix」-net 的 MXNet 同時支持一組符號(聲明性)api 和一組命令式 api,並通過一種稱為雜交(hybridization)的方法優化了使用命令式 api 描述的模型的性能,從而享受了這兩個領域的好處。

2015 年,何凱明等人提出了 ResNet[2],再次突破了圖像分類的邊界,在 ImageNet 的準確率上再創新高。業界和學界已經達成共識,深度學習將成為下一個重大技術趨勢,解決各種領域的挑戰,這些挑戰在過去被認為是不可能的。在此期間,所有深度學習框架都對多 GPU 訓練和分布式訓練進行了優化,提供了更加用戶直觀的 api,並衍生出了專門針對計算機視覺、自然語言處理等特定任務的 model zoo 和工具包。還值得注意的是,Francois Chollet 幾乎是獨自開發了 Keras 框架,該框架在現有框架(如 TensorFlow 和 MXNet)之上提供了神經網絡和構建塊的更直觀的高級抽象。從今天開始,這種抽象成為 TensorFlow 中模型層面事實上的 api。

By User Lamré on sv.wikipedia

https://commons.wikimedia.org/w/index.php?curid=801434

羅馬時代

(2019 ~ 2020)

正如人類歷史的發展一樣,深度學習框架經過一輪激烈的競爭,最終形成了兩大「帝國」:TensorFlow 和 PyTorch 的雙頭壟斷,這兩大「帝國」代表了深度學習框架研發和生產中 95% 以上的用例。2019 年,Chainer 團隊_將他們的開發工作轉移到 PyTorch;類似地,微軟_停止了 CNTK 框架的積極開發,部分團隊成員轉而支持 Windows 和 ONNX 運行時上的 PyTorch。Keras 被 TensorFlow 收編,並在 TensorFlow 2.0 版本中成為其高級 api 之一。在深度學習框架領域,MXNet 仍然位居第三。

在此期間,深度學習框架空間有兩種趨勢。首先是大型模型訓練。隨著 BERT[3] 的誕生,以及它的近親 GPT-3[4] 的誕生,訓練大型模型的能力成為了深度學習框架的理想特性。這就要求深度學習框架能夠在數百臺(如果不是數千臺的話)設備的規模下有效地進行訓練。第二個趨勢是可用性。這一時期的深度學習框架都採用命令式編程風格,語義靈活,調試方便。同時,這些框架還提供了用戶級的裝飾器或 api,以通過一些 JIT(即時)編譯器技術實現高性能。

By Tharunbr77 — Own work, CC BY-SA 4.0,

https://commons.wikimedia.org/w/index.php?curid=86866550

工業時代

(2021+)

深度學習在自動駕駛、個性化推薦、自然語言理解到醫療保健等廣泛領域取得了巨大成功,帶來了前所未有的用戶、開發者和投資者浪潮。這也是未來十年開發深度學習工具和框架的黃金時期。儘管深度學習框架從一開始就有了長足的發展,但它們之於深度學習的地位還遠遠不如程式語言 JAVA/ c++ 之於網際網路應用那樣的成熟。還有很多令人興奮的機會和工作有待探索和完成。

展望未來,有幾個技術趨勢有望成為下一代深度學習框架的主流:

基於編譯器的算子(operator)優化。如今,許多操作符內核都是通過手動或第三方庫實現的,比如 BLAS、CuDNN、OneDNN 等,這些庫針對特定的硬體平臺。當模型被訓練或部署在不同的硬體平臺上時,這會造成很大的開銷。此外,新的深度學習算法的增長速度往往比這些庫的迭代速度快得多,這使得這些庫常常不支持新的算子。深度學習編譯器,如 Apache TVM、MLIR、Facebook Glow 等,已經提出了在任何硬體後端上有效優化和運行計算的建議。它們可以作為深度學習框架的整個後端。

統一的 API 標準。許多深度學習框架共享類似但略有不同的用戶 api。這給用戶從一個框架切換到另一個框架帶來了困難和不必要的學習曲線。雖然大多數機器學習從業者和數據科學家都熟悉 NumPy庫,但在新的深度學習框架中,NumPy API 自然會成為 tenor 操作 API 的標準。我們已經看到快速發展的框架 JAX 受到了用戶的熱烈歡迎,它的 api 完全與 NumPy 兼容。

數據搬運作為一等公民。多節點或多設備訓練正在成為深度神經網絡訓練的規範。最近開發的深度學習框架,如 OneFlow,從設計的第一天起就將這一觀點納入設計考慮,並將數據通信視為模型訓練的整體計算圖的一部分。這為性能優化打開了更多的機會,而且由於它不需要像以前的深度學習框架那樣維護多種訓練策略(單設備 vs 分布式訓練),因此除了提供更好的性能之外,它還可以提供更簡單的用戶界面。

總結

我們正處於一場人工智慧革命的黎明。人工智慧領域的新研究和新應用正在以前所未有的速度湧現。八年前,AlexNet 網絡包含 6000 萬個參數,最新的 GPT-3 網絡包含 1750 億參數,網絡規模在 8 年內增加了 3000 倍!另一方面,人類的大腦包含大約 100 萬億個參數(即突觸)。這表明,如果有可能的話,神經網絡要達到人類的智能水平還有很大的差距。

這種難以接受的網絡規模對模型訓練和推理的硬體和軟體計算效率都提出了很大的挑戰。未來的深度學習框架很可能是算法、高性能計算、硬體加速器和分布式系統的跨學科成果。

參考資料:

[1] Alex Krizhevsky et al., ImageNet Classification with Deep Convolutional Neural Networks (2012), NeurIPS 2012

[2] Kaiming He et al., Deep Residual Learning for Image Recognition (2016), CVPR 2016

[3] Jacob Devlin et al., BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (2018)

[4] Tom B. Brown et al., Language Models are Few-Shot Learners (2020), NeurIPS 2020

[5] Announcing the Consortium for Python Data API Standards (2020)

相關焦點

  • 迎來PyTorch,告別 Theano,2017 深度學習框架發展大盤點
    深度學習是機器學習中一種基於對數據進行表徵學習的方法,作為當下最熱門的話題,谷歌、Facebook、微軟等巨頭紛紛圍繞深度學習做了一系列研究,一直在支持開源深度學習框架的建設。過去一年間,在這些巨頭的加持下,深度學習框架格局發生了極大改變:新框架橫空出世,舊的框架也逐漸退出歷史舞臺,而框架與框架之間的聯繫也更加緊密,生態更為開放。
  • Keras vs PyTorch:誰是第一深度學習框架?
    兩大框架的連結:  Keras:https://github.com/keras-team/keras (https://keras.io/)  PyTorch:https://github.com/pytorch/pytorch  你想學習深度學習嗎?
  • TensorFlow與PyTorch之爭,哪個框架最適合深度學習
    那麼究竟哪種框架最適宜自己手邊的深度學習項目呢?本文作者從這兩種框架各自的功能效果、優缺點以及安裝、版本更新等諸多方面給出了自己的建議。如果你在讀這篇文章,那麼你可能已經開始了自己的深度學習之旅。如果你對這一領域還不是很熟悉,那麼簡單來說,深度學習使用了「人工神經網絡」,這是一種類似大腦的特殊架構,這個領域的發展目標是開發出能解決真實世界問題的類人計算機。
  • 重磅| Torch7團隊開源PyTorch:Python優先的深度學習框架
    據官網介紹,PyTorch 是一個 Python 優先的深度學習框架,能夠在強大的 GPU 加速基礎上實現張量和動態神經網絡。官網:http://pytorch.orgGitHub:https://github.com/pytorch/pytorchPyTorch 是一個 Python 軟體包,其提供了兩種高層面的功能:使用強大的 GPU 加速的 Tensor 計算(類似 numpy)構建於基於 tape 的 autograd 系統的深度神經網絡如有需要,你也可以復用你最喜歡的
  • 還不會使用PyTorch框架進行深度學習的小夥伴,看過來
    選自heartbeat.fritz.ai作者:Derrick Mwiti機器之心編譯參與:Geek AI、王淑婷這是一篇關於使用 PyTorch 框架進行深度學習的教程,讀完以後你可以輕鬆地將該框架應用於深度學習模型。
  • ...首席科學家鄧力:深度學習十年簡史和人工智慧未來展望(33PDF...
    原標題:微軟人工智慧首席科學家鄧力:深度學習十年簡史和人工智慧未來展望(33PDF下載) 1 新智元原創 > 演講:鄧力,微軟人工智慧首席科學家 整理:聞菲 【新智元導讀】微軟人工智慧首席科學家鄧力18日在首屆發表主旨演講《深度學習十年簡史和人工智慧未來展望》。
  • PyTorch框架歷史和特性更迭與安裝過程
    PyTorch是由Facebook公司開發的深度學習框架,其起源應該是Torch這個深度學習框架。Torch深度學習框架最初的開發可以追溯到2002年。相比使用Python語言作為深度學習框架前端的PyTorch,Torch使用了Lua語言作為深度學習框架的前端。由於機器學習的主流語言是Python,相比之下,Lua語言比較小眾。
  • 用PyTorch做深度學習實驗!Facebook新框架Ax和BoTorch雙雙開源
    在現代機器學習應用中,對實驗到生產的流程進行簡化是最難實現的任務之一。在已經市場化深度學習框架中,Facebook的PyTorch因其高度靈活性成為數據科學界的最愛,PyTorch能夠實現快速建模和實驗。但是,深度學習應用中的許多實驗面臨的挑戰已經超出了特定框架的能力範圍。
  • Pytorch框架安裝方法(基於Anaconda環境和Pycharm IDE)
    本文介紹基於Anaconda環境以及PyCharm軟體結合,安裝PyTorch深度學習框架。1.6 單擊啟動Anaconda Prompt 創建虛擬「房間」通過conda創建一個名為:pytorch的虛擬「房間」,可以方便未來對不同版本的PyTorch進行管理,具體方法如下:conda create -n pytorch python=3.61.7 查看創建的「房間」方法:conda info --envs
  • 2020年深度學習發展大盤點及對2021年深度學習的未來展望|極客雲算
    深度學習框架作為AI底層工具,對個人而言是進入深度學習世界的一把鑰匙,掌握深度學習框架並不等於理解了深度學習,要在AI開發中有所作為,關鍵還是要真正理解框架背後的技術、實踐和生態。隨著近年來的人工智慧發展,2020年深度學習依然是發展最快的領域之一,直奔未來工作。其發展是多方面的,而且是多方位的。
  • PyTorch 深度學習官方入門中文教程 pdf 下載|PyTorchChina
    它主要由Facebookd的人工智慧小組開發,不僅能夠 實現強大的GPU加速,同時還支持動態神經網絡,這一點是現在很多主流框架如TensorFlow都不支持的。 PyTorch提供了兩個高級功能: 1.具有強大的GPU加速的張量計算(如Numpy) 2.包含自動求導系統的深度神經網絡 除了Facebook之外,Twitter、GMU和Salesforce等機構都採用了PyTorch。
  • 初學AI神經網絡應該選擇Keras或是Pytorch框架?
    對於許多開發者來說,TensorFlow是他們接觸的第一個機器學習框架。TensorFlow框架儘管意義非凡,引起極大關注和神經網絡學習風潮,但對一般開發者用戶太不友好。軟體開發者畢竟不是科學家,很多時候簡單易學易用是程式設計師選擇的第一要素。
  • 基於PyTorch的CV模型框架,北大學生出品TorchCV
    機器之心整理參與:張倩、澤南在機器學習帶來的所有顛覆性技術中,計算機視覺領域吸引了業內人士和學術界最大的關注。剛剛推出 1.3 正式版的 PyTorch 風頭正勁,人們已經圍繞這一深度學習框架開發出了越來越多的工具。最近,一個名為 TorchCV 的計算機視覺模型框架站上了 GitHub 趨勢榜。
  • Deep CARs:使用Pytorch學習框架實現遷移學習
    更準確地說,是使用一個深度神經網絡,因此得名Deep CARs(深度計算機自動額定值系統)。想要實現這一目標,需要完成兩部分的學習,第1部分:構建汽車分類器;第2部分:部署分類器。本文將著重論述第1部分內容。我們將使用一種叫做遷移學習的方法來訓練分類器。什麼是遷移學習?
  • PyTorch官方出品了一本深度學習書,免費提供給開發者
    根據出版商Manning出版社的介紹,這本書的核心,是教你如何使用Python 和 PyTorch 實現深度學習算法。所以出版商介紹稱,想要更好的消化這本書,需要對Python知識和基本線性代數有了解,對深度學習有一些理解更好,但並不需要你具備使用PyTorch或其他深度學習框架的經驗。
  • 教程| 斯坦福CS231n 2017最新課程:李飛飛詳解深度學習的框架實現...
    今天機器之心給大家分享的是其中的第八講——深度學習軟體(Deep Learning Software)。主要內容有:CPU 和 GPU 的對比;深度學習框架簡介;TensorFlow 和 PyTorch 的實例;以及各種深度學習框架的比較。
  • Keras vs PyTorch,哪一個更適合做深度學習?
    本文作者以 Keras 和 Pytorch 庫為例,提供了解決該問題的思路。當你決定學習深度學習時,有一個問題會一直存在——學習哪種工具?深度學習有很多框架和庫。這篇文章對兩個流行庫 Keras 和 Pytorch 進行了對比,因為二者都很容易上手,初學者能夠輕鬆掌握。
  • Facebook 開源 3D 深度學習函數庫 PyTorch3D
    原標題:Facebook開源3D深度學習函數庫PyTorch3D來源:開源中國Facebook近日開源了將PyTorch用於3D深度學習的函數庫PyTorch3D,這是一個高度模塊化且經過優化的庫,具備獨有的功能,旨在通過PyTorch簡化3D深度學習。
  • PyTorch官方教程書限時免費!500頁內容帶你上手最流行框架
    書籍地址:https://pytorch.org/assets/deep-learning/Deep-Learning-with-PyTorch.pdfPyTorch 是當前最熱的深度學習框架之一。自 2016 年誕生以來,PyTorch 迅速發展,成為廣受開發者和研究人員喜愛的框架。
  • 神經網絡篇——用TensorFlow2.0框架實現BP網絡
    這要回顧一下我們在學習BP之前學習的感知器模型。它模仿的是人類體內的信號傳導的過程,當信號達到一定的閾值時,就可以繼續向後傳播。那這個感知器模型和BP網絡有什麼關係呢?#構建一個結構為[10,15,1]的BP神經網絡model = tf.keras.Sequential([tf.keras.layers.Dense(15,activation='relu',input_shape=(10,)),tf.keras.layers.Dense(1)])model.summary() #顯示網絡結構model.compile