剛剛,Facebook 通過 PyTorch 官方博客宣佈:PyTorch 1.6 正式發佈!新版本增加了一個 amp 子模塊,支持本地自動混合精度訓練。Facebook 還表示,微軟已擴大了對 PyTorch 社區的參與,現在擁有 PyTorch 在 Windows 上的開發和維護所有權。

相比於以往的 PyTorch 版本,本次即將發佈的 PyTorch 1.6 有哪些吸引人的地方呢?

總的來說,PyTorch 1.6 版本包括許多新的 API、用於性能改進和性能分析的工具,以及對基於分佈式數據並行(DDP)和遠程過程調用(RPC)的分佈式訓練的重大更新。一些亮點包括:

在英偉達的幫助下增加了對自動混合精度(AMP)訓練的本地支持,並且具有穩定的功能;

增加了對 TensorPipe 的本地支持;

在前端 API 增加了對複雜張量的支持;

提供張量級內存消耗信息的新分析工具;

分佈式數據並行(DDP)訓練和遠程過程調用(RPC)包的大量改進和新功能。

PyTorch 官方博客表示,從此版本開始,PyTorch 的特性將分爲 Stable(穩定版)、Beta(測試版)和 Prototype(原型版)。需要注意的是,Prototype 特性不包含在二進制包中,但可以通過使用 Nightly 從源代碼構建或通過編譯器標誌(compiler flag)來使用。

此外,Facebook 還宣佈,他們將把 Windows 版 PyTorch 的開發維護權移交給微軟。

在 Windows 系統上運行 PyTorch 一直都是一種不愉快的體驗,顯然微軟也看到了這一點。他們在 Pytorch 的博客中表示:

「在 PyTorch 1.6 中,我們爲核心 PyTorch 及其域庫提供了與 Linux 相同的測試覆蓋率,同時將教程測試自動化,以此來改進 Windows 的核心質量。在 PyTorch 社區的幫助下,我們將測試覆蓋範圍添加到三個域庫中:TorchVision、TorchText 和 TorchAudio。在 PyTorch 的後續版本中,我們將繼續改進。根據收到的社區反饋,下一步的改進方向應該會聚焦於分佈式訓練支持和更好的 pip 安裝體驗。」

除了本地 Windows 體驗,在今年的 Build 2020 大會上,微軟還宣佈了一個爲 WSL 提供 GPU 計算支持的計劃,PyTorch 將在其中起到不小的作用。現階段,WSL2 已獲得對 GPU 的初始支持,其中就包含對 PyTorch 的支持,WSL 用戶可以直接運行本地 PyTorch 程序,進行機器學習,不需要傳統的虛擬機或雙引導設置。

性能與分析

[STABLE] 自動混合精度(AMP)訓練

AMP 使用戶可以輕鬆啓用自動混合精度訓練,從而在 Tensor Core GPU 上實現更高的性能並節省多達 50%的內存。使用本地支持的 torch.cuda.amp API,AMP 爲混合精度提供了方便的方法,其中某些運算使用 torch.float32 (float)。其他運算使用 torch.float16(half)。有些運算,如線性層和卷積,在 float16 中要快得多。而另一些運算,比如縮減,通常需要 float32 的動態範圍。混合精度嘗試將每個運算與其相應的數據類型相匹配。

[BETA] FORK/JOIN 並行

新版本增加了對語言級構造的支持,以及對 TorchScript 代碼中粗粒度並行的運行時的支持。這種支持對於一些情況非常有用,比如在集成中並行運行模型,或者並行運行循環網絡的雙向組件,它還允許爲任務級並行釋放並行架構(例如多核 CPU)的計算能力。

TorchScript 程序的並行執行是通過 torch.jit.fork 和 torch.jit.wait 兩個 primitive 實現的。下面的例子展示了 foo 的並行執行:

[BETA] 內存分析器

「torch.autograd.profiler」API 現在包含一個可以讓你檢查 CPU 和 GPU 模型內不同算子的張量內存開銷的內存分析器。

該 API 的用法如下所示:

分佈式訓練 & RPC

[BETA] 用於 RPC 的 TENSORPIPE 後端

PyTorch 1.6 爲 RPC 模塊引入了一個新的後端,它利用了 TensorPipe 庫(一個針對機器學習的 tensor-aware 點對點通信 primitive,旨在補充 PyTorch 中分佈式訓練的現有 primitive)。TensorPipe 的成對和異步特性使其能夠應用於數據並行之外的新的網絡範式:客戶端 - 服務器方法以及和模型和 pipeline 並行訓練。

[BETA] DDP+RPC

PyTorch Distributed 支持兩種強大的範式:用於對模型進行完全同步數據並行訓練的 DDP 和支持分佈式模型並行的 RPC 框架。在此之前,這兩個特性是獨立工作的,用戶不能混用它們來嘗試混合並行範式。

從 PyTorch 1.6 開始,該框架允許 DDP 和 RPC 無縫協作,這樣用戶就可以結合這兩種技術來實現數據並行和模型並行。

[BETA] RPC - 異步用戶函數

RPC 異步用戶函數( Asynchronous User Function)支持執行用戶定義函數時在服務器端生成和恢復的能力。在此特性之前,當被調用方處理請求時,一個 RPC 線程將一直等待,直到用戶函數返回。

前端 API 更新

[BETA] 複數

Pythorch1.6 版本提供了對複雜張量的 beta 級支持。包括 torch.complex64 和 torch.complex128 dtypes。

複數在數學和工程中經常出現,特別是在信號處理中,復值神經網絡是一個活躍的研究領域。復張量的 beta 版將支持通用的 PyTorch 和復張量功能,以及 Torchaudio、ESPne 等所需的功能。

更新的域庫

TORCHVISION 0.7

torchvision 0.7 引入了兩個新的預訓練語義分割模型,即 FCN ResNet50 和 DeepLabV3 ResNet50,它們都在 COCO 上進行了訓練,並且使用的內存佔用空間小於 ResNet101。此外還引入了 AMP(自動混合精度),該功能可爲不同的 GPU 運算自動選擇浮點精度,從而在保持精度的同時提高性能。

TORCHAUDIO 0.6

torchaudio 現在正式支持 Windows,微軟負責 Windows 版本。此版本還引入了一個新模塊(包含 wav2letter)、若干新功能(contrast, cvm, dcshift, overdrive, vad, phaser, flanger, biquad)、新數據集(GTZAN,CMU)和一個新的可選 sox 後端,支持 TorchScript。

相關文章