PyTorch發佈一年團隊總結:運行資源下降至十分之一,單機王者

本文由 「AI前線」原創,原文連接: PyTorch發佈一年團隊總結:運行資源下降至十分之一,單機王者
譯者|核子可樂

AI 前線導讀:」The PyTorch Team 發佈了一份年度盤點,同時爲了記念 PyTorch 發佈滿一週年。在老師木的《深度學習框架技術剖析》中咱們提到過,TensorFlow 系統完整度最高,可是須要解決性能問題;PyThorch 是 NLP 應用首選、單機場景下的王者,可是缺點是難以支持大規模應用。咱們能夠再看看 PyTorch 團隊的總結。」html


原文翻譯以下python

今天是 PyTorch 項目公開發布的一週年節點。這是個瘋狂的過程——咱們但願打造一套靈活的深度學習研究平臺。過去一年當中,咱們親眼見證了一羣很是傑出的參與者如何積極使用、貢獻並傳播 PyTorch——在這裏,咱們感謝您的厚愛。回顧過去,咱們但願對 PyTorch 的一年曆程做出總結,包括來自社區的進展、最新消息以及要點。git

社區程序員

咱們迎來了一個由深深熱愛 PyTorch 的研究人員與工程師所共同構成的強大社區。核心團隊包含來自多個國家、衆多企業與高校的工程師及研究人員。能夠說,若是沒有每位參與者的積極貢獻,咱們毫不可能將 PyTorch 由思路轉化爲現實。github

研究論文、軟件包與 GitHub編程

在項目發佈的幾天以內,來自社區的用戶就開始在 PyTorch 當中實現其感興趣的研究論文內容,同時在 GitHub 上發佈相關代碼。開源代碼已經成爲目前研究人員所使用的主要工具。參與者們共同打造出 torchtext、torchvision 以及 torchaudio 軟件包,旨在促進 PyTorch 項目在不一樣領域實現研究民主化。後端

第一款基於 PyTorch 的社區軟件包來自 Brandon Amos,這款名爲 Block 的軟件包可以下降塊矩陣的處理難度。卡耐基 - 梅隆大學的 Locus 實驗室隨後發佈了與其研究成果緊密相關的多套 PyTorch 軟件包及實現方案。第一份研究論文代碼則來自 Sergey Zagoruyko,題爲《關注‘關注機制’》。網絡

來自加州大學伯克利分校的 Jun-Yan Zhu、Taesung Park、Phillip Isola、Alyosha Efros 及其團隊發佈了廣受好評的 Cycle-GAN 與 pix2pix,後者負責實現圖像到圖像轉換。框架

HarvardNLP 與 Systran 的研究人員們選擇開發並改進 OpenNMT in PyTorch,其靈感源自對 Facebook 公司 Adam Lerer 編寫的 [Lua]Torch 代碼進行重現。Twitter 公司的 MagicPony 團隊亦做出貢獻,將其早期 Super-resolution 工做成果引入 PyTorch 示例當中。dom

Salesforce Research 發佈了多款軟件包,其中包括其引覺得傲的 PyTorch-QNN——這是一種 RNN 類型,在 CuDNN 的優化之下可實現 2 倍至 17 倍於標準 LSTM 的速度表現。James Bradbury 及其團隊目前已經成爲 PyTorch 禰發中最活躍且最具吸引力的團隊之一。

「咱們發佈的 @PyTorch-QRNN,擁有 2 倍到 17 倍於英偉達 cuDNN LSTM 的速度表現。這樣的速度水平要歸功於經過 CuPy 實現的 50 行代碼。」

來自優步、Northeastern 以及斯坦福大學的研究人員們彙集在一塊兒,圍繞 Pyro 與 ProbTorch 組建起一個活躍的機率編程社區。該社區取得了活躍且快速的發展態勢,咱們在 NIPS 2017 的首屆 pytorch-probabilistic-programming 會議上與 Fritz Obermeyer、Noah Goodman、Jan-Willem van de Meent、Brooks Paige、Dustin Tran 以及其餘 22 名與會者共同討論瞭如何構建世界貝葉斯網絡。

英偉達公司研究人員發佈了三套高質量庫,旨在實現 pix2pix-HD、Sentiment Neuron 以及 FlowNet2 論文中的成果。他們對 PyTorch 當中不一樣數據並行模型的可擴展性分析工做給社區做出了巨大貢獻。

Allen Institute for AI 發佈了 AllenNLP,其中囊括多套業界領先的天然語言處理模型——包括面向標準天然語言處理任務的參考實現方案以及易於使用的 Web 演示素材。

2017 年 7 月,咱們還迎來了首支 Kaggle 獲勝隊伍 grt123。他們拿下了 DataScience Bowl 2017 大賽的肺癌檢測獎,並隨後公佈了相關 PyTorch 實現方案。

在虛擬化方面,Tzu-Wei Huang 開發出一款 TensorBoard-PyTorch 插件,而 Facebook AI Research 則面向其 visdom 虛擬化軟件包實現 PyTorch 兼容性。

最後,Facebook AI Research 發佈了包括 ParlAI、fairseeq-py、VoiceLoop 以及 FaderNetworks 在內的多個項目,旨在利用來自多個領域的前沿模型及接口數據集。

受篇幅所限,這裏沒法將全部卓越項目一一列出,感興趣的朋友能夠查看相關清單:github.com/soumith?tab…

咱們也要向大力支持論壇建議的朋友們表示感謝,特別是 ptrblck、jpeg72九、QuantScientist、albanD、tom 以及 chenyun tc。各位給予咱們很是寶貴的支持,再次感謝!

數字指標

下面讓咱們立足數字瞭解更多狀況:

  • 在 GitHub 上,有 87769 行用於導入 torch 的 Python 代碼。
  • GitHub 上擁有 3983 個在名稱或描述當 提到 PyTorch 項目的庫。
  • PyTorch 二進制資源下載超過 50 萬次,更具體地講,應爲 65 萬 1916 次。
  • 5400 位用戶在咱們的論壇 discuss.pytorch.org (discuss.pytorch.org/) 上圍繞 5200 個主題發佈了 2 萬 1500 篇討論文章。
  • 自發布以來,Reddit 的 /r/machinelearning 上共提到 PyTorch 131 次。與此同時,TensorFlow 被說起的數量爲 255 次。

研究指標

PyTorch 是一套以研究爲核心的框架。所以,咱們所關注的一大指標在於從機器學習研究論文當中發現學術人士對 PyTorch 的使用。

  • 在最近的 ICLR2018 會議上,有 87 篇論文提到 PyTorch,提到 TensorFlow 的論文數量爲 228 篇,提到 Keras 的有 42 篇,Theano 與 Matlab 分別被 32 篇論文所說起。
  • Arxiv.org 每個月說起 PyTorch 項目 72 次,TensorFlow 說起次數爲 273 次,Keras 爲 100 次,Caffe 爲 94 次,而 Theano 則爲 53 次。

課程、教程與書籍

當初剛剛發佈 PyTorch 時,咱們雖然擁有良好的 API 文檔,但教程資料卻還僅限於幾份 ipython 筆記——有幫助,但還不夠理想。

Sasank Chilamkurthy 攬下這項重任,並把教程內容轉化爲現在美觀的網站形式。

Sean Robertson 與 Justin Johnson 編寫出了大量出色的新教程——例如天然語言處理方向等等。Yunjey Choi 則經過一篇堪稱驚豔的教程,幫助學習者瞭解如何使用 30 行甚至更少代碼實現大部分模型。每一份新教程的誕生都能幫助用戶更好更快地找到適合本身的學習途徑。Goku Mohandas 與 Delip Rao 正調整其所編寫論著中的代碼內容,旨在使用 PyTorch 項目。

另外,咱們發現很多大學的機器學習課程都將 PyTorch 做爲主要教學工具,其中包括哈佛大學的 CS287。爲了進一步推動學習民主化,咱們在這裏推薦與 PyTorch 緊密相關的三大在線課程。

  • Fast.ai 的」面向程序員的深度學習」是一項高人氣在線課程 2017 年 9 月,Jeremy 與 Rachel 宣佈將來的 fast.ai 課程將幾乎徹底基於 PyTorch 進行設計。
  • 與新加坡國立大學與清華大學關係密切的研究人員 Ritchie Ng 發佈了一項名爲「利用 PyTorch 踐行深度學習」的 Udemy 課程。
  • 來自香港科技大學的 Sung Kim 在 YouTube 上發佈了一項題爲「從零開始學 PyTorch」的在線課程,專門面向普通觀衆。

工程技術

過去一年以來,咱們實現了多項功能、全面提高性能表現,同時修復了大量錯誤。咱們所作工做的完整列表可在咱們的發佈說明中找到。如下爲去年咱們的核心工做重點:

高階梯度

隨着一系列關於梯度懲罰以及二階梯度方法相關研究論文的陸續發表,這已經成爲一項重要且受到高度關注的功能。2017 年 8 月,咱們實現了一個可使用 n 階導數的廣義接口,並隨時間推移而逐步增長所支持高階梯度函數的覆蓋範圍。截至發稿之時,其幾乎已經可以支持全部運算。

分佈式 PyTorch

2017 年 8 月,咱們發佈了一套小型分佈式軟件包,其中採用了極受歡迎的 MPI 共同方法。該軟件包擁有多種後端,例如 TCP、MMPI、Gloo 以及 NCCL2 等,可支持多種不一樣 CPU/GPU 共同運算及用例,並可整合 Infiniband 以及 RoCE 等分佈式技術。分佈式絕非易事,咱們的最初迭代版本中也存在一些錯誤。但在隨後的發行版本中,咱們提高了該軟件包的穩定度,其性能也獲得了提高。

走近 NumPy

用戶提出的最爲迫切的需求之一,在於他們但願得到本身所熟知的 NumPy 功能。這類功能包括便捷的廣播與高級索引等功能,其確實可以爲用戶節約時間與精力。咱們實現了這些功能,但開始調整自身 API 以進一步走近 NumPy。隨着時間的推移,咱們但願可以在適當的時候提供與 NumPy 全面契合的 API。

稀疏張量

2017 年 3 月,咱們發佈了一套支持稀疏張量的小型軟件包。同年 5 月,咱們發佈了 CUDA 對該稀疏軟件包的支持能力。該軟件包體積小巧且功能有限,主要用於實現稀疏嵌入以及深度學習中所經常使用的各種稀疏範式。目前其規模還不大,仍有待擴展——若是你們有意參與這套軟件包的擴展工做,請在討論板上聯繫特准:discuss.pytorch.org/

性能表現

對性能的追求是一場永無休止的鬥爭,特別是對於 PyTorch 這樣一套但願最大程度提高靈活性的動態框架而言。過去一年當中,咱們從核心 Tensor 庫到神經網絡運算程序對性能進行了全面升級,同時亦編寫出速度更快的微優化成果。

  • 咱們爲 Tensor 運算添加了專門的 AVX 與 AVX2 內聯函數。
  • 爲高頻工做負載編寫更快的 GPU 內核,例如 concatenation 與 Softmax 等等。
  • 從新爲多個神經網絡運算程序編寫了代碼,特別是 nn.Embedding 與組卷積。

總體運行資源需求下降至十分之一

因爲 PyTorch 是一套動態圖形框架,所以咱們須要在訓練循環的每一次迭代當中以動態方式建立一個新圖形。這意味着框架的運行資源開銷必須很低,要麼就是令工做負載規模極高,從而幾乎能夠忽略掉框架運行開銷。2017 年 8 月,DyNet 的做者們(Graham Neubig 及其團隊)表示,其在處理小型 NLP 模型時的速度要遠高於 PyTorch。這是一項有趣的挑戰,但當時咱們並不清楚這些進行訓練的模型的具體大小。在接下來的幾個月當中,咱們努力對 PyTorch 內部進行重大改寫,對每一個執行時間超過 10 微秒的運算程序做出調整,最終使其可在 1 微秒左右執行完成。

ATen

在咱們對 PyTorch 進行內部從新設計時,咱們亦構建起如今負責支持所有 PyTorch 後端的 Aten C++ 11 庫。ATen 擁有的 API 可反映 PyTorch 的 PyThon API,這使其成爲一套可進行張量計算的便捷 C++ 庫。ATen 可獨立於 PyTOrch 進行構建與使用。

將模型導出至生產環境——ONNX 支持與 JIT 編譯器

聆聽社區的聲音,咱們收到的一項常見請求就是將 PyTorch 模型導出至其它框架當中。用戶在 PyTorch 當中可進行快速的研究週期,並但願在工做完成以後將其發送至僅要求 C++ 的大型項目當中。

考慮到這一點,咱們爲 PyTorch 構建起一套追蹤器,其可以將 PyTorch 模型導出爲中間表現形式。接下來的追蹤則可用於更高效地運行現有 PyTorch 模型(經過對其運行優化),或者將其轉換爲 ONNX 格式以發送至其它框架處,具體包括 Caffe二、MXNet 以及 TensorFlow 等 ; 或者直接將其發送至 CoreML 或 TensorRT 等硬件加速庫處。在將來一年中,您將瞭解到更多與 JIT 編譯器性能改進相關的消息,敬請期待!

原文連接:

pytorch.org/2018/01/19/…

更多幹貨內容,可關注AI前線,ID:ai-front,後臺回覆「AI」、「TF」、「大數據」可得到《AI前線》系列PDF迷你書和技能圖譜。

相關文章
相關標籤/搜索