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