PyTorch 1.12發布,正式支持蘋果M1芯片GPU加速,修復眾多Bug
?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/。