本文由 「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 在內的多個專案,旨在利用來自多個領域的前沿模型及介面資料集。
受篇幅所限,這裡無法將所有卓越專案一一列出,感興趣的朋友可以檢視相關清單:github.com/soumith?tab…
我們也要向大力支援論壇建議的朋友們表示感謝,特別是 ptrblck、jpeg729、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 格式以傳送至其它框架處,具體包括 Caffe2、MXNet 以及 TensorFlow 等 ; 或者直接將其傳送至 CoreML 或 TensorRT 等硬體加速庫處。在未來一年中,您將瞭解到更多與 JIT 編譯器效能改進相關的訊息,敬請期待!
原文連結:
更多幹貨內容,可關注AI前線,ID:ai-front,後臺回覆「AI」、「TF」、「大資料」可獲得《AI前線》系列PDF迷你書和技能圖譜。