Pytorch 1.0正式版發佈!曾經Pytorch許諾的都實現了嗎?_風聞
观察者网用户_244308-2018-12-09 12:53
PyTorch正式版發佈!
12月8日,在加拿大蒙特利爾召開的NeurIPS 2018會議上,Facebook 宣佈正式推出 PyTorch 1.0 穩定版,在 Facebook code 博客上,也一併同步了這一消息。
Facebook在5月份公佈了該版本的新功能,並在10月舉辦的PyTorch開發者大會上首次推出它的預覽版。大會上,Facebook就曾宣佈了有關該框架生態的一系列更新,包括軟件、硬件和教育方面的合作。
“我們在 PyTorch1.0 發佈前解決了幾大問題,包括可重用、性能、編程語言和可擴展性。”Facebook 人工智能副總裁 Jerome Pesenti 曾在 PyTorch 開發者大會上表示。
幾個月過去了,曾經Pytorch許諾的諸多功能,現在到底是否已經實現了呢?
GitHub 地址:https://github.com/pytorch/pytorch/releases/tag/v1.0.0
PyTorch新特性
PyTorch 1.0的主要新特性包括**JIT編譯器、更快的分佈式、C++**擴展等。
JIT 編譯器
JIT(Just-In-Time)是一組編譯工具,用於彌合 PyTorch 研究與生產之間的差距。
它允許創建可以在不依賴 Python 解釋器的情況下運行的模型,並且可以更積極地進行優化。使用程序註解可以將現有模型轉換為 PyTorch 可以直接運行的 Python 子集 Torch Script。模型代碼仍然是有效的 Python 代碼,可以使用標準的 Python 工具鏈進行調試。
PyTorch 1.0 提供了 torch.jit.trace 和 torch.jit.script 兩種方式使現有代碼與 JIT 兼容。一經註解,Torch Script 代碼便可以被積極地優化,並且可以被序列化以在新的 C++ API 中使用,並且 C++ API 不依賴於 Python。
# Write in Python, run anywhere!
@torch.jit.script
def RNN (x, h, W_h, U_h, b_h):
y = []
for t in range (x.size (0)):
h = torch.tanh (x[t] @ W_h + h @ U_h + b_h)
y += [h]
return torch.stack (y), h
全新並且更快的分佈式庫
torch.distributed 軟件包和 torch.nn.parallel.DistributedDataParallel 模塊採用了重新設計的全新分佈式庫,亮點包括:
1、新的 torch.distributed 是性能驅動的,並且對所有後端完全異步操作,包括:Gloo、NCCL 和 MPI。
2、顯着的分佈式數據並行性能改進,尤其適用於網絡較慢的主機,如基於以太網的主機。
3、為 torch.distributed 包中的所有分佈式集合操作添加異步支持。
4、在 Gloo 後端添加了一些 CPU 操作:send、recv、reduce、all_gather、gather 與 scatter。
5、在 NCCL 後端添加 barrier 操作。
6、在 NCCL 後端添加 new_group 支持。
C++ 前端
C++ 前端是 PyTorch 後端的純 C++ 接口,它遵循已建立的 Python 前端的 API 和體系結構,旨在實現高性能、低延遲和裸機 C++ 應用的研究。它提供了 torch.nn、torch.optim、torch.data 和 Python 前端的其它組件的等價物。
下邊是兩種語言前端的簡單比較:
Python
import torch
model = torch.nn.Linear (5, 1)
optimizer = torch.optim.SGD (model.parameters (), lr=0.1)
prediction = model.forward (torch.randn (3, 5))
loss = torch.nn.functional.mse_loss (prediction, torch.ones (3, 1))
loss.backward ()
optimizer.step ()
C++
#include
torch::nn::Linear model (5, 1);
torch::optim::SGD optimizer (model->parameters (), /*lr=*/0.1);
torch::Tensor prediction = model->forward (torch::randn ({3, 5}));
auto loss = torch::mse_loss (prediction, torch::ones ({3, 1}));
loss.backward ();optimizer.step ();
對此,廣大C++程序員表示非常優秀,感謝自己終於得到了Facebook的重視。
C++的API不僅能用於訓練,也能用於推理。
一名在Facebook AI研究院(FAIR)的程序員説,現在C++的API感覺非常像在PyTorch中使用Python,在模型中完全使用C++處理張量也非常方便。
最近FAIR的星際爭霸AI——TorchCraftAI——就是用C++實現的。
PyTorch 1.0的其他新功能還有:
N維空張量
新的算符
新的分佈式
稀疏API改進
對現有算符和分佈式的補充
PyTorch社羣
PyTorch 在 2017 年年初推出,很快便成為人工智能研究人員的熱門選擇,他們發現,其靈活、動態的編程環境和用户友好的界面是快速實驗的理想之選。從那時起,我們看到 PyTorch 社羣迅速發展。PyTorch 現在是 GitHub 上增長第二快的開源項目(https://octoverse.github.com/projects),在過去的一年裏,PyTorch 社區的貢獻者增加了 2.8 倍。
隨着 PyTorch 生態系統和社羣的不斷發展,供開發者使用的有意思的新項目和教育資源越來越多,這一次在NeurIPS 2018上,Facebook 發佈了PyTorch 1.0 穩定版。
研究人員和工程師現在可以輕鬆地充分利用開源深度學習框架的新特性,如用於在 eager 執行模式和 graph 執行模式之間無縫轉換的混合前端、改進的分佈式訓練、用於高性能研究的純 C++ 前端以及與雲平台的深度集成。
PyTorch 1.0 加快了 AI 從研究原型開發到生產部署的工作流程,使這一流程變得更加簡單、更容易開始。就在過去的幾個月裏,我們看到初學者通過新的、豐富的教育項目越來越多地使用 PyTorch,專家們構建出創新的項目,將這一框架從自然語言處理擴展到概率編程等各個領域。
教育課程讓 AI 開發者聯繫更緊密
上個月,Udacity 和 Facebook 推出了一門新課程——PyTorch 深度學習入門(Introduction to Deep Learning with PyTorch),同樣還推出了 PyTorch 挑戰賽,為持續的 AI 教育提供獎金。在最初的幾個星期裏,已經有成千上萬的學生在網上積極學習了。更重要的是,這些教育課程拉近了開發人員之間的距離,從英國到印度尼西亞,我們看到全球範圍內的開發者自發地開始線下聚會。
所有人都可以在 Udacity 上免費獲取完整課程,開發人員很快就可以在更高級的 AI Nanodegree 課程中繼續 PyTorch 教育。
除了在線教育課程,例如 fast.ai 等組織也提供一些軟件庫來支持開發人員學習如何利用 PyTorch 構建神經網絡。fastai 是一個讓神經網絡的訓練更加快速和準確的庫,自兩個月前發佈以來,它已經在 GitHub 上獲得了 1 萬顆 star。
開發人員們已經利用這個庫做出了一系列成果。例如,Santhosh Shetty 使用 fastai 將災後損傷等級分類的準確率提高了一倍;與傳統方法相比,Alena Harley 將腫瘤常規測序的假陽性率降低了 7 倍;Jason Antic 創建了一個名為 DeOldify 的項目,該項目利用深度學習對舊圖像進行着色和修復。
圖像着色與修復
一些對 PyTorch 進行擴展的新項目
PyTorch 已經被用在圖像識別、機器翻譯等多個領域,我們看到了開發人員社羣對這一框架的不斷擴展和支持,例如:
Horovod—分佈式訓練框架,開發人員可以輕鬆地在單 GPU 或多個 GPU 上進行訓練。
PyTorch Geometry ——提供了一組程序和可微分模塊的幾何計算機視覺庫。
TensorBoardX——將 PyTorch 模型記錄到 TensorBoard 的模塊,允許開發人員在訓練模型時使用可視化工具。
此外,Facebook 團隊還在不斷構建和開源 PyTorch 項目,例如 Translate,這是一個基於 Facebook 機器翻譯系統的進行序列到序列模型訓練的庫。
對於那些希望在特定領域迅速開展工作的 AI 開發者來説,PyTorch 的生態系統為他們提供了獲取行業最新前沿研究的便捷途徑 (可以關注 @PyTorch 瞭解最新進展)。隨着 PyTorch 的不斷發展,我們期待着從社區中發現新的項目。
從雲端開始
為了使 PyTorch 更易於使用,對用户更加友好,我們繼續深化了與雲平台和服務的合作,例如 Amazon Web services、Google Cloud Platform 和 Microsoft Azure。就在最近,AWS 推出了支持 PyTorch 的 Amazon SageMaker Neo,允許開發人員在 PyTorch 中構建機器學習模型,只需一次訓練,就可以部署到雲或端的任何地方,在性能上提升兩倍。開發人員現在還可以通過創建一個新的深度學習 VM 實例,在谷歌雲平台上使用 PyTorch 1.0。
此外,微軟 Azure 機器學習服務現在已經廣泛可用了,它允許數據科學家在 Azure 上無縫訓練、管理和部署 PyTorch 模型。使用該服務的 Python SDK, PyTorch 開發人員可以利用按需分佈式計算功能,用 PyTorch 1.0 大規模訓練模型,加速生產過程。
AI 開發人員可以通過雲合作伙伴或本地安裝輕鬆地開始使用 PyTorch 1.0,並在 PyTorch 網站上按照逐步更新的教程完成任務,例如使用混合前端部署序列到序列模型、訓練一個簡單的聊天機器人等等。大家可以在 PyTorch GitHub 上看到更新文檔。
本部分內容來自於:https://code.fb.com/ai-research/pytorch-developer-ecosystem-expands-1-0-stable-release/
TensorFlow王位堪憂?
Pytorch自從發佈以來,在學術界和工業界都備受關注。由於TensorFlow的難用性以及Pytorch的易用性,導致很多學者,開發者,選擇使用pytorch實現自己的模型。
自PyTorch出道以來,不斷有人表示,發現了這樣的趨勢:“學術圈正在慢慢地拋棄TensorFlow,轉投PyTorch。”
2017年1月19日,PyTorch才第一次公開發布,到今天還不到兩年,為何發展得這般蓬勃?
可能原因也許是:1、PyTorch可能比較善良;2、PyTorch的確有親和力。
**PyTorch容易上手。**只要熟悉Python,就很容易和PyTorch玩耍在一起了。相比之下,學TensorFlow就像在學一種新的語言,語法很複雜,尤其不適合新手。
**PyTorch許多操作都很簡潔。**比如,Tensor和Numpy之間的互轉,可以在PyTorch裏優雅地完成,而在TF裏就不輕鬆了。
**PyTorch如果debug很方便。**PyTorch作為動態圖框架的優勢就有體現,像給Python代碼debug那樣。有人説在TF裏debug,還沒有肉眼看一遍來得快。
對離開TensorFlow擁抱PyTorch的人類來説,TF的槽點簡直不勝枚舉。
其實短期來看,這沒有什麼,但就生態而言,pytorch已經在開始領先了。至於TensorFlow在2.0版本推出以後是否能更勝一籌,就得拭目以待了(據説2.0將會全面採用tf.keras的API)。
-END-