PyTorch一週年戰績總結:是否比TensorFlow來勢凶猛?

機器之心發表於2019-03-03

 PyTorch 自發布以來,由於除錯、編譯等多方面的優勢,它成為 2017 年熱度極高的框架之一。本文內容介紹了開源一週年以來,PyTorch 取得的成績。在一些指標上,PyTorch 也與 TensorFlow 做了同期對比。PyTorch 是不是 2017 年的明星框架?

PyTorch一週年戰績總結:是否比TensorFlow來勢凶猛?

Yann LeCun Twitter

截止到今天,PyTorch 已公開發行一週年。一年以來,我們致力於打造一個靈活的深度學習研究平臺。一年以來,PyTorch 社群中的使用者不斷做出貢獻和優化,在此深表感謝。

通過此文,我們打算對 PyTorch 一年的發展歷程做一個總結:PyTorch 的進展、新聞以及社群亮點。

社群

我們很幸運,PyTorch 團隊有一批強大、飽含熱情的研究者和工程師,核心團隊的工程師和研究者來自不同的國家、公司和大學,沒有他們的付出就不會有今天的 PyTorch。

研究論文、工具包、GitHub

PyTorch 才發行幾天,社群使用者已經開始藉助 PyTorch 實現其最喜愛的研究論文,並把程式碼公佈在 GitHub 上。開原始碼對當今的研究者來說是一個主要而核心的工具。

人們一起建立了 torchtext、torchvision 和 torchaudio,以便利化平民化不同領域的研究。

首個 PyTorch 社群工具包(被命名為 Block)來自 Brandon Amo,有助於更輕鬆地處理塊矩陣(block matrix)。來自 CMU 的 Locus 實驗室後來繼續公佈 PyTorch 工具包及其大部分研究的實現。首個研究論文程式碼來自 Sergey Zagoruyko,論文名稱為《Paying more attention to attention》。

來自 U.C.Berkeley 的 Jun-Yan Zhu、Taesung Park、Phillip Isola、Alyosha Efros 及團隊釋出了非常流行的 Cycle-GAN 和 pix2pix,用於影像轉換。

PyTorch一週年戰績總結:是否比TensorFlow來勢凶猛?

HarvardNLP 和 Systran 的研究者開始使用 PyTorch 開發和提升 OpenNMT,它最初開始於 Facebook Adam Lerer 的 [Lua]Torch 程式碼最初的再實現。

來自 Twitter 的 MagicPony 團隊貢獻了其超解析度研究示例的 PyTorch 實現。

Salesforce 釋出了若干個工具包,包括其亮點成果 PyTorch-QRNN,這是一種新型 RNN,相比於 CuDNN 優化的標準 LSTM 可提速 2 到 17 倍。James Bradbury 及其團隊是 PyTorch 社群中最活躍和最有吸引力的團隊之一。

PyTorch一週年戰績總結:是否比TensorFlow來勢凶猛?

來自 Uber、Northeaster、Stanford 的研究者圍繞著其工具包 Pyro 和 ProbTorch,形成了一個活躍的概率程式設計社群。他們正在積極開發 torch.distributions 核心工具包。該社群非常活躍,快速發展,我們聯合 Fritz Obermeyer、Noah Goodman、Jan-Willem van de Meent、Brooks Paige、Dustin Tran 及其他 22 名參會者在 NIPS 2017 上舉辦了首次 PyTorch 概率程式設計會議,共同探討如何使世界貝葉斯化。

PyTorch一週年戰績總結:是否比TensorFlow來勢凶猛?

英偉達研究者釋出了三個高質量 repo,實現了 pix2pix-HD、Sentiment Neuron 和 FlowNet2。對 PyTorch 中不同資料並行模型的擴充套件性分析對整個社群都很有益。

PyTorch一週年戰績總結:是否比TensorFlow來勢凶猛?

艾倫人工智慧研究所釋出 AllenNLP,包括多個 NLP 先進模型:標準 NLP 任務的參考實現和易用 web demo。

PyTorch一週年戰績總結:是否比TensorFlow來勢凶猛?

六月份,我們還首次取得了 Kaggle 競賽冠軍(團隊 grt123)。他們獲得了 2017 資料科學杯(關於肺癌檢測)的冠軍,後來公開了其 PyTorch 實現。

在視覺化方面,Tzu-Wei Huang 實現了 TensorBoard-PyTorch 外掛,Facebook AI Research 釋出了與 PyTorch 相容的 visdom 視覺化包。

PyTorch一週年戰績總結:是否比TensorFlow來勢凶猛?

最後,Facebook AI Research 釋出了多個專案,如 ParlAI、fairseq-py、VoiceLoop 和 FaderNetworks,在多個領域中實現了先進的模型和介面資料集。由於空間有限,這裡就不將優秀專案一一列出,詳細列表可參閱:https://github.com/soumith?tab=stars。

我們還要感謝那些在論壇中積極幫助別人的使用者。你們提供了無比珍貴的服務,非常感謝!

指標

從數字上來看:

  • 在 Github 上有 87769 行程式碼引入 Torch。

  • 在 Github 上有 3983 個 repository 在名字或者描述中提到了 PyTorch。

  • PyTorch binary 下載量超過 50 萬,具體數字是 651916。

  • 在論壇上,有 5400 名使用者發表了 21500 條討論,涉及 5200 個主題。

  • 自發布以來,在 Reddit 上的/r/machinelearning 主題中有 131 條討論提到了 PyTorch。同期,TensorFlow 被提及的次數為 255。

參見:

研究指標

PyTorch 是一個專注於研究的框架。所以與衡量它的指標包括 PyTorch 在機器學習研究論文中的使用。

  • 在 ICLR 2018 學術會議提交的論文中,有 87 篇提到了 PyTorch,相比之下 TensorFlow 228 篇,Keras 42 篇,Theano 和 Matlab 是 32 篇。

  • 按照月度來看,arXiv 論文提到 PyTorch 框架的有 72 篇,TensorFlow 是 273 篇,Keras 100 篇,Caffe 94 篇,Theano 53 篇。

課程、教程與書籍

我們在釋出 PyTorch 的時候,已經準備了很好的 API 文件,但教程有限,只有幾個 ipython notebook,雖然有用但還不夠。

Sasank Chilamkurthy 承擔了改進教程的任務,教程詳見:http://pytorch.org/tutorials/。

PyTorch一週年戰績總結:是否比TensorFlow來勢凶猛?

Sean Robertson 和 Justin Johnson 編寫了 NLP 領域的全新教程,還有通過示例學習的教程。Yunjey Choi 寫了用 30 行或者更少的程式碼部署大多數模型的教程。每個新教程都幫助使用者用不同的學習方法更快地找到適合自己的學習路徑。

Goku Mohandas 和 Delip Rao 把正在寫的書中的程式碼做了改變,使用了 PyTorch。

我們看到,一些大學的機器學習課程是使用 PyTorch 作為主要工具講授的,例如哈佛 CS 287。為了更進一步方便大眾學習,我們還看到三個線上課程使用 PyTorch 講授。

Fast.ai 的「Deep Learning for Coders」是個流行的線上課程。9 月份,Jeremy 和 Rachel 宣佈下一個 fast.ai 的課程將幾乎全部基於 PyTorch。

Ritchie Ng,在清華、新加坡國立大學都學習過的研究者,推出了名為「Practical Deep Learning with PyTorch」的 Udemy 課程。

來自香港科技大學的 Sung Kim 在 Yotube 上推出了面向普通觀眾的線上課程「PyTorch Zero to All」。

工程

去年 PyTorch 實現了多個功能,包括 board 上的效能、修復大量 bug 等。去年完成的任務清單詳見:https://github.com/pytorch/pytorch/releases。下面是其中的幾個亮點:

高階梯度

隨著多篇關於實現梯度罰項的論文的發表,以及二階梯度法的不斷研究發展,高階梯度成為必需的熱門功能。去年 8 月,我們實現了一個通用介面,可使用 n 階導數,加快支援高階梯度函式的收斂,截至寫作本文時,幾乎所有 ops 都支援此介面。

分散式 PyTorch

去年 8 月,我們釋出了一個小型分散式包,該包使用非常流行的 MPI 集合(MPI-collective)方法。它有多個後端,如 TCP、MPI、Gloo 和 NCCL2,以支援多種 CPU/GPU 集合操作和用例,這個包整合了 Infiniband 和 RoCE 等分散式技術。分佈很難,我們在初始迭代時也有一些 bug。在後續版本中,我們作出了一些改進,使這個包更加穩定,效能也更強。

更接近 NumPy

使用者最大的一個需求是他們熟悉的 NumPy 功能。Broadcasting 和 Advanced Indexing 等功能方便、簡潔,節約使用者的時間。我們實現了這些功能,開始使我們的 API 更接近 NumPy。隨著時間的進展,我們希望在合適的地方越來越接近 NumPy 的 API。

效能

效能是一場仍在進行中的戰鬥,尤其對於想要最大化靈活性的動態框架 PyTorch 而言。去年,從核心 Tensor 庫到神經網路運算元,我們改善了 PyTorch 在 board 上的效能,能在 board 上更快的編寫微優化。

  • 我們新增了專門的 AVX 和 AVX2 內部函式,用於 Tensor 運算;

  • 寫更快的 GPU kernel,用於常用的工作負載,如級聯和 Softmax;

  • 為多個神經網路運算元重寫程式碼,如 nn.Embedding 和組卷積。

PyTorch 在 board 上的開銷降低 10x

由於 PyTorch 是動態圖框架,我們在訓練迴圈的每次迭代時都要建立一個新圖。因此,框架開銷必須很低,或者工作負載必須足夠大來隱藏框架開銷。去年 8 月,DyNet 的作者(Graham Neubig 及其團隊)展示了 DyNet 在一些小型 NLP 模型上的速度快於 PyTorch。這是很有意思的一個挑戰,我們開始重寫 PyTorch 內部構件,將框架開銷從 10 微妙/運算元降低到 1 微妙。

ATen

重新設計 PyTorch 內部構件的同時,我們也構建了 ATen C++11 庫,該庫現在主導 PyTorch 所有後端。ATen 具備一個類似 PyTorch Python API 的 API,使之成為便於 Tensor 計算的 C++庫。ATen 可由 PyTorch 獨立構建和使用。

輸出模型用於生產:支援 ONNX 和 JIT 編譯器

我們收到的一個普遍請求是將 PyTorch 模型輸出到另一個框架。使用者使用 PyTorch 進行快速研究,模型完成後,他們想將模型搭載到更大的專案中,而該專案只要求使用 C++。

因此我們構建了 tracer,可將 PyTorch 模型輸出為中間表示。使用者可使用後續的 tracer 更高效地執行當前的 PyTorch 模型,或將其轉換成 ONNX 格式以輸出至 Caffe2、MXNet、TensorFlow 等其他框架,或直接搭載至硬體加速庫,如 CoreML 或 TensorRT。今年,我們將更多地利用 JIT 編譯器提升效能。

PyTorch一週年戰績總結:是否比TensorFlow來勢凶猛?

PyTorch一週年戰績總結:是否比TensorFlow來勢凶猛?

文章選自PyTorch,由機器之心編譯,原文連結:pytorch.org/2018/01/19/…

相關文章