PyTorch發布一年團隊總結:運行資源降低至十分之一,單機王者
本文由 「AI前線」原創,原文鏈接:PyTorch發布一年團隊總結:運行資源降低至十分之一,單機王者
譯者|核子可樂
AI 前線導讀:」The PyTorch Team 發布了一份年度盤點,同時為了紀念 PyTorch 發布滿一周年。在老師木的《深度學習框架技術剖析》中我們提到過,TensorFlow 系統完整度最高,但是需要解決性能問題;PyThorch 是 NLP 應用首選、單機場景下的王者,但是缺點是難以支持大規模應用。我們可以再看看 PyTorch 團隊的總結。」
原文翻譯如下:
今天是 PyTorch 項目公開發布的一周年節點。這是個瘋狂的過程——我們希望打造一套靈活的深度學習研究平台。過去一年當中,我們親眼見證了一群非常傑出的參與者如何積極使用、貢獻並傳播 PyTorch——在這裡,我們感謝您的厚愛。回顧過去,我們希望對 PyTorch 的一年歷程作出總結,包括來自社區的進展、最新消息以及要點。
社區
我們迎來了一個由深深熱愛 PyTorch 的研究人員與工程師所共同構成的強大社區。核心團隊包含來自多個國家、眾多企業與高校的工程師及研究人員。可以說,如果沒有每位參與者的積極貢獻,我們絕不可能將 PyTorch 由思路轉化為現實。
研究論文、軟體包與 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 示例當中。
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 在內的多個項目,旨在利用來自多個領域的前沿模型及介面數據集。
受篇幅所限,這裡無法將所有卓越項目一一列出,感興趣的朋友可以查看相關清單:https://github.com/soumith?tab=stars
我們也要向大力支持論壇建議的朋友們表示感謝,特別是 ptrblck、jpeg729、QuantScientist、albanD、tom 以及 chenyun tc。各位給予我們非常寶貴的支持,再次感謝!
數字指標
下面讓我們立足數字了解更多情況:
- 在 GitHub 上,有 87769 行用於導入 torch 的 Python 代碼。
- GitHub 上擁有 3983 個在名稱或描述當 提到 PyTorch 項目的庫。
- PyTorch 二進位資源下載超過 50 萬次,更具體地講,應為 65 萬 1916 次。
- 5400 位用戶在我們的論壇 http://discuss.pytorch.org (http://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 篇論文所提及。
- http://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 對該稀疏軟體包的支持能力。該軟體包體積小巧且功能有限,主要用於實現稀疏嵌入以及深度學習中所常用的各類稀疏範式。目前其規模還不大,仍有待擴展——如果大家有意參與這套軟體包的擴展工作,請在討論板上聯繫特准:https://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 格式以發送至其它框架處,具體包括 Caffe2、MXNet 以及 TensorFlow 等 ; 或者直接將其發送至 CoreML 或 TensorRT 等硬體加速庫處。在未來一年中,您將了解到更多與 JIT 編譯器性能改進相關的消息,敬請期待!
原文鏈接:
http://pytorch.org/2018/01/19/a-year-in.html
更多乾貨內容,可關注AI前線,ID:ai-front,後台回復「AI」、「TF」、「大數據」可獲得《AI前線》系列PDF迷你書和技能圖譜。
推薦閱讀:
TAG:PyTorch |