PyTorch 團隊發表周年感言:感謝日益壯大的社群,這一年迎來六大核心突破
雷鋒網 AI 研習社按,2017 年 1 月,Facebook 開源 PyTorch,短短一年時間,PyTorch 便發展成一線開發者爭相使用的工具。這一年間,有哪些研究人員對 PyTorch 的發展做出了貢獻?關於 PyTorch 的經典課程有哪些?它經歷了什麼樣的改變?研究人員又帶來了哪些創新?
在 PyTorch 開源一周年紀念日,其開發團隊在官方 Blog 上發表《PyTorch, a year in....》一文,為我們解答了上述問題。雷鋒網 AI 研習社將原文編譯整理如下:
距離我們開源 PyTorch 已經有一年時間。在這一年時間裡,我們尋求建立一個靈活的深度學習研究平台,這是一段極棒的旅程。感謝所有使用 PyTorch,為 PyTorch 的發展做出貢獻,並不斷傳播 PyTorch 的人,是你們一步一步建立了這樣一個充滿驚喜的社群。
下文中,我們總結了 PyTorch 在這一年間取得的進展、相關新聞和亮點。
社群
PyTorch 社群是一個強健的有機體,感謝社群里喜愛 PyTorch 的研究人員和工程師。我們的社群構成多種多樣,核心團隊中有來自於多個國家、公司和大學的工程師和研究人員,如果沒有他們的點滴貢獻,PyTorch 不可能發展得像現在這麼好。
論文、工具包和 Github
PyTorch 發布之後,一些用戶很快就利用 PyTorch 實現了他們喜歡的論文,並在 Github 上發布代碼。現階段,開源代碼是研究人員的重要工具。
大家在一起,創造出了 torchtext,torchvision和torchaudio工具包,幫助加快 PyTorch 在不同領域的發展。
Brandon Amos 發布了第一個基於 PyTorch 的工具包——Block,使得操作分塊矩陣更加容易。隨後,CMU 的 Locus Lab 實驗室發布了一系列關於 PyTorch 的工具包(https://github.com/locuslab),實現了他們大部分的研究成果。首篇利用 PyTorch 實現的論文是 Sergey Zagoruyko 的 Paying more attention to attention。
Jun-Yan Zhu, Taesung Park, Phillip Isola, Alyosha Efros 和來自加州大學伯克利分校的團隊發布了 Cycle-GAN and pix2pix,這個工具包極受歡迎,能實現圖像轉換。
HarvardNLP 和 Systran 的研究人員開始利用 PyTorch 開發和改進 OpenNMT,這最初是由 Adam Lerer 利用 [Lua]Torch 重實現的。
Twitter 的 MagicPony 團隊也很早就將他們超解析度的工作用 PyTorch 實現了。
Salesforce Research 也發布了幾個工具包,其中就包括最廣為人知的 PyTorch-QRNN,這比用 CuDNN 優化的標準 LSTM 的速度快了 2-17 倍。James Bradbury 和他的團隊是 PyTorch 社群中最活躍、最吸引人的力量之一。
來自 Uber, Northeastern 和 Stanford 的研究人員聚於一起,圍繞 Pyro和ProbTorch,組成了一個活躍的概率編程社區。他們正積極開發 torch.distributions 核心包。這個社區非常活躍,正在快速發展,在 NIPS2017 上,我們第一次開展了 PyTorch 概率編程見面會,會上,我們同 Fritz Obermeyer, Noah Goodman, Jan-Willem van de Meent, Brooks Paige, Dustin Tran 和其他 22 位與會者討論了如何讓世界變得更貝葉斯。
英偉達的研究人員發布了三個高質量的 PyTorch 庫,分別實現了 pix2pix-HD、Sentiment Neuron和FlowNet2。他們基於 PyTorch 對數據並行模型的可伸縮性分析(https://github.com/NVIDIA/sentiment-discovery/blob/master/analysis/scale.md)極有幫助。
艾倫人工智慧研究院發布 AllenNLP,其中包含一些針對標準 NLP 任務的最先進模型,也有參考樣例和一些易於使用的web demo。
7 月,grt123 團隊在 Kaggle DataScience Bowl 2017 中的肺癌預測項目上取得勝利,隨後公布代碼。他們是第一支利用 PyTorch 取得勝利的團隊。
在可視化方面,Tzu-Wei Huang 發布 TensorBoard-PyTorch插件,Facebook 人工智慧研究院也發布了能與 PyTorch 兼容的visdom可視化包。
隨後,Facebook 人工智慧研究院開源 ParlAI、fairseq-py、VoiceLoop 和 FaderNetworks 等工具包,能在多個領域實現先進的模型。
這裡還有很多好的項目,我們就不一一說明,大家可以點擊如下鏈接:https://github.com/soumith?tab=stars
我們也想對 Forum 上那些積極幫助他人的人,特別是 ptrblck, jpeg729, QuantScientist, albanD, tom 和 chenyuntc 表示強烈感謝,你們為他人提供的幫助是無價的。
數據對比
Github 上共有 87769 行 Python 代碼引入 torch;
Github 共有 3983 個庫的名稱或描述中提及 PyTorch;
PyTorch 文件的下載量超過 50 萬次,精確來說,數量是 651916 次;
在關於 PyTorch 的這個論壇 (http://discuss.pytorch.org/) 上,共有 5400 名用戶寫下 21500 篇文章,討論了 5200 個不同主題;
在 Reddit 上的 r/machinelearning 這個版塊,PyTorch 被提及 131 次,同樣的時間段內,TensorFlow 被提及 255 次。
PyTorch 是一個以研究為中心的框架,因此,論文(與機器學習相關)中 PyTorch 的使用率也是我們關注的一點。
論文中被提及次數:
在 ICLR2018 提交的論文中,有 87 篇論文提及 PyTorch,對比起來,TensorFlow 被 228 篇論文提及,Keras 是 42 篇,Theano 和 Matlab 是 32 篇。
按月來看,在 arxiv 上,PyTorch 每月平均被提及 72 次,TensorFlow 平均被提及 273 次, Keras,Caffe 和 Theano 被提及的次數分別是 100 、94、53。
課程與書籍
發布 PyTorch 時,我們已經準備了優良的 API 文檔,但是僅限於一些 ipython notebook 教程,雖然有用,但遠遠不夠。
Sasank Chilamkurthy 親自修改了這些教程,整理在 pytorch.org/tutorials/頁面上,非常清楚和明晰。
Sean Robertson 和 Justin Johnson 基於 PyTorch 寫了很棒的 NLP 教程,他們還舉了很多例子。Yunjey Choi 的教程非常優美,大多數模型的實現只需要 30 行或更少的代碼。每個教程都提供新的方法,幫助用戶更快地上手。
Delip Rao 和 Goku Mohandas 修改了他們正在寫的書中的代碼內容——改為用 PyTorch 實現。
我們也看到,很多大學的機器學習課程中把 PyTorch 作為重要工具,比如哈佛的 CS287。另外,如下三個在線課程均使用 PyTorch 來教學:
Fast.ai 的「Deep Learning for Coders」是一門很受歡迎的在線課程。9 月,Jeremy 和 Rachel 宣布,在下一階段,Fast.ai 的課程將幾乎全都基於 PyTorch。
在新加坡國立大學和清華大學任教的 Ritchie Ng 研究員發布了名為「Practical Deep Learning with PyTorch」的 Udemy 課程。
香港科技大學的 Sung Kim 在 Youtube 上發布「PyTorch Zero to All」在線課程,旨在向大眾普及 PyTorch。
工程化
過去一年間,我們完善了 PyTorch 的多項功能,改進其性能,並修復了大量 bug。大家可以在發布說明中看到我們做的所有更新和改進。以下是過去一年間一些矚目的改進:
1、高階梯度
隨著梯度懲罰在多篇論文中的實現,以及隨之而來的對二階梯度法的研究,在 PyTorch 中實現高階梯度必不可少。8 月,我們實現了一個通用介面,支持 n 階導數,同時增加了支持高階梯度函數的量。
2、分散式 PyTorch
8 月,我們發布了一個小的分散式工具包,集合了許多流行的 MPI 方法。這個工具包覆蓋 TCP、MPI、Gloo 和 NCCL2 等很多後端,支持多種類型的 CPU/GPU 集合操作和用例,並集成了 Infiniband 和 RoCE 等分散式技術。想要做到分散式比較困難,在最初的迭代中我們經常碰到 bug。在隨後的版本中,我們提供的包更加穩定、性能更好。
3、與 NumPy 聯繫更緊
用戶最大的需求之一是他們熟悉的 NumPy 功能。這些功能中,Broadcasting 和 Advanced Indexing 都很方便,可以幫助用戶減少冗餘。PyTorch 目前支持這些特性,它的 API 逐漸向 NumPy 靠攏。
4、稀疏張量
3 月,我們發布了一個支持稀疏張量的小工具包,基於這個工具包,我們在 5 月發布了帶有 CUDA 支持的工具包。這個工具包很小,功能有限,用於實現 Sparse Embedding 以及深度學習中常用的稀疏範例。目前這個工具包仍很小,需要繼續擴展——如果你想貢獻自己的一份力,可以與我們聯繫。
5、性能
性能的提升是一場持久戰,對 PyTorch 這樣一個動態框架來說尤甚。在過去的一年裡,我們極力提升其靈活性,從核心張量庫到神經網路運算,PyTorch 的性能得到了極大提升。
針對張量操作增加了 AVX 和 AVX2
針對 concatenation 和 Softmax 等較為常見的工作負荷,編寫了更快的 GPU kernel
重寫了若干神經網路運算的代碼
將框架的開銷降低十倍
由於 PyTorch 是動態圖框架,訓練中,每次迭代時都必須創建一個新的圖表,因此,框架開銷必須很低,或者工作負載必須足夠大。今年 8 月,DyNet 的作者(Graham Neubig 等)展示了 DyNet 在一些小的 NLP 模型上速度比 PyTorch 快得多。
於是我們開始重寫 PyTorch 的內部結構,這是一次大的調整,調整之後,每個運算元的執行時間從十多微秒降低到一微秒。
ATen
當重新設計 PyTorch 內部結構時,我們構建了 ATen C++11 庫,這個庫現在控制所有的 PyTorch 後端。ATen 中有一個 API 能反映 PyTorch 的 Python API,這使得它非常適合用於張量計算——變得更加方便。
6、從模型輸出到生產——支持 ONNX 和 JIT 編譯器
大家經常對我們提出這樣的請求——希望將 PyTorch 模型導出到另一個框架中。基於 PyTorch,開發者能進行快速的研究,一旦研究做完,他們想將得到的模型導入更大的項目。
考慮到用戶的需求,我們在 PyTorch 中構建了一個 tracer,它能將 PyTorch 模型輸出為中間表示。大家可以利用隨後的 trace 高效執行當前的 PyTorch 模型,或者將其轉換成 ONNX 格式,載入至 Caffe2, MXNet, TensorFlow 等框架中,還可以直接載入至 CoreML 或 TensorRT 等硬體加速庫。
接下來一段時間,大家會聽到更多關於 JIT 編譯器的消息,它能改善 PyTorch 的性能。
via:pytorch.org
雷鋒網 AI 研習社編譯整理。


TAG:雷鋒網 |