編輯:陳萍
PyTorch 1.12 正式發佈,還沒有更新的小夥伴可以更新了。
距離PyTorch 1.11推出沒幾個月,PyTorch 1.12 就來了!此版本由 1.11 版本以來的 3124 多次 commits 組成,由 433 位貢獻者完成。1.12 版本進行了重大改進,並修復了很多 Bug。
隨著新版本的發佈,大家討論最多的可能就是 PyTorch 1.12 支持蘋果 M1 晶片。

其實早在今年 5 月,PyTorch 官方就已經宣佈正式支持在 M1 版本的 Mac 上進行 GPU 加速的 PyTorch 機器學習模型訓練。此前,Mac 上的 PyTorch 訓練僅能利用 CPU,但隨著 PyTorch 1.12 版本的發佈,開發和研究人員可以利用蘋果 GPU 大幅度加快模型訓練。
在 Mac 上引入加速 PyTorch 訓練
PyTorch GPU 訓練加速是使用蘋果 Metal Performance Shaders (MPS) 作為後端來實現的。MPS 後端擴展了 PyTorch 框架,提供了在 Mac 上設置和運行操作的腳本和功能。MPS 使用針對每個 Metal GPU 系列的獨特特性進行微調的核心能力來最佳化計算性能。新設備將機器學習計算圖和原語對映到 MPS Graph 框架和 MPS 提供的調整核心上。
每臺搭載蘋果自研晶片的 Mac 都有著統一的記憶體架構,讓 GPU 可以直接訪問完整的記憶體儲存。PyTorch 官方表示,這使得 Mac 成為機器學習的絕佳平臺,讓使用者能夠在本地訓練更大的網路或批大小。這降低了與基於雲算力的開發相關的成本或對額外的本地 GPU 算力需求。統一記憶體架構還減少了資料檢索延遲,提高了端到端性能。
可以看到,與 CPU 基線相比,GPU 加速實現了成倍的訓練性能提升:

有了 GPU 的加持,訓練和評估速度超過 CPU
上圖是蘋果於 2022 年 4 月使用配備 Apple M1 Ultra(20 核 CPU、64 核 GPU)128GB 記憶體,2TB SSD 的 Mac Studio 系統進行測試的結果。測試模型為 ResNet50(batch size = 128)、HuggingFace BERT(batch size = 64)和 VGG16(batch size = 64)。性能測試是使用特定的計算機系統進行的,反映了 Mac Studio 的大致性能。
PyTorch 1.12 其他新特性
前端 API:TorchArrow
PyTorch 官方已經發布了一個新的 Beta 版本供使用者試用:TorchArrow。這是一個機器學習預處理庫,可進行批量資料處理。它具有高性能,兼具 Pandas 風格,還具有易於使用的 API,以加快使用者預處理工作流程和開發。
(Beta)PyTorch 中的 Complex32 和 Complex Convolutions
目前,PyTorch 原生支持複數、複數 autograd、複數模組和大量的複數運算(線性代數和快速傅立葉變換)。在包括 torchaudio 和 ESPNet 在內的許多庫中,都已經使用了複數,並且 PyTorch 1.12 通過複數卷積和實驗性 complex32 資料類型進一步擴展了複數功能,該資料類型支持半精度 FFT 操作。由於 CUDA 11.3 包中存在 bug,如果使用者想要使用複數,官方建議使用 CUDA 11.6 包。
(Beta)Forward-mode 自動微分
Forward-mode AD 允許在前向傳遞中計算方向導數(或等效地雅可比向量積)。PyTorch 1.12 顯著提高了 forward-mode AD 的覆蓋範圍。
BetterTransformer
PyTorch 現在支持多個 CPU 和 GPU fastpath 實現(BetterTransformer),也就是 Transformer 編碼器模組,包括 TransformerEncoder、TransformerEncoderLayer 和 MultiHeadAttention (MHA) 的實現。在新的版本中,BetterTransformer 在許多常見場景中速度快 2 倍,這還要取決於模型和輸入特徵。新版本 API 支持與先前的 PyTorch Transformer API 兼容,如果現有模型滿足 fastpath 執行要求,它們將加速現有模型,以及讀取使用先前版本 PyTorch 訓練的模型。

此外,新版本還有一些更新:
模組:模組計算的一個新 beta 特性是功能性 API。這個新的 functional_call() API 讓使用者可以完全控制模組計算中使用的參數;
TorchData:DataPipe 改進了與 DataLoader 的兼容性。PyTorch 現在支持基於 AWSSDK 的 DataPipes。DataLoader2 已被引入作為管理 DataPipes 與其他 API 和後端之間互動的一種方式;
nvFuser: nvFuser 是新的、更快的默認 fuser,用於編譯到 CUDA 設備;
矩陣乘法精度:默認情況下,float32 資料類型上的矩陣乘法現在將在全精度模式下工作,這種模式速度較慢,但會產生更一致的結果;
Bfloat16:為不太精確的資料類型提供了更快的計算時間,因此在 1.12 中對 Bfloat16 資料類型進行了新的改進;
FSDP API:作為原型在 1.11 版中發佈,FSDP API 在 1.12 版的發佈中達到了測試版,並添加了一些改進。
更多內容請查看:https://pytorch.org/blog/pytorch-1.12-released/
