PyTorch 1.12發(fā)布,正式支持蘋果M1芯片GPU加速,修復眾多Bug
?PyTorch 1.12 正式發(fā)布,還沒有更新的小伙伴可以更新了。
距離 PyTorch 1.11 推出沒幾個月,PyTorch 1.12 就來了!此版本由 1.11 版本以來的 3124 多次 commits 組成,由 433 位貢獻者完成。1.12 版本進行了重大改進,并修復了很多 Bug。
隨著新版本的發(fā)布,大家討論最多的可能就是 PyTorch 1.12 支持蘋果 M1 芯片。?
其實早在今年 5 月,PyTorch 官方就已經(jīng)宣布正式支持在 M1 版本的 Mac 上進行 GPU 加速的 PyTorch 機器學習模型訓練。此前,Mac 上的 PyTorch 訓練僅能利用 CPU,但隨著 PyTorch 1.12 版本的發(fā)布,開發(fā)和研究人員可以利用蘋果 GPU 大幅度加快模型訓練。
在 Mac 上引入加速 PyTorch 訓練?
PyTorch GPU 訓練加速是使用蘋果 Metal Performance Shaders (MPS) 作為后端來實現(xiàn)的。MPS 后端擴展了 PyTorch 框架,提供了在 Mac 上設置和運行操作的腳本和功能。MPS 使用針對每個 Metal GPU 系列的獨特特性進行微調(diào)的內(nèi)核能力來優(yōu)化計算性能。新設備將機器學習計算圖和原語映射到 MPS Graph 框架和 MPS 提供的調(diào)整內(nèi)核上。
每臺搭載蘋果自研芯片的 Mac 都有著統(tǒng)一的內(nèi)存架構,讓 GPU 可以直接訪問完整的內(nèi)存存儲。PyTorch 官方表示,這使得 Mac 成為機器學習的絕佳平臺,讓用戶能夠在本地訓練更大的網(wǎng)絡或批大小。這降低了與基于云算力的開發(fā)相關的成本或?qū)︻~外的本地 GPU 算力需求。統(tǒng)一內(nèi)存架構還減少了數(shù)據(jù)檢索延遲,提高了端到端性能。
可以看到,與 CPU 基線相比,GPU 加速實現(xiàn)了成倍的訓練性能提升:
有了 GPU 的加持,訓練和評估速度超過 CPU
上圖是蘋果于 2022 年 4 月使用配備 Apple M1 Ultra(20 核 CPU、64 核 GPU)128GB 內(nèi)存,2TB SSD 的 Mac Studio 系統(tǒng)進行測試的結果。測試模型為 ResNet50(batch size = 128)、HuggingFace BERT(batch size = 64)和 VGG16(batch size = 64)。性能測試是使用特定的計算機系統(tǒng)進行的,反映了 Mac Studio 的大致性能。
PyTorch 1.12 其他新特性
前端 API:TorchArrow
PyTorch 官方已經(jīng)發(fā)布了一個新的 Beta 版本供用戶試用:TorchArrow。這是一個機器學習預處理庫,可進行批量數(shù)據(jù)處理。它具有高性能,兼具 Pandas 風格,還具有易于使用的 API,以加快用戶預處理工作流程和開發(fā)。
(Beta)PyTorch 中的 Complex32 和 Complex Convolutions
目前,PyTorch 原生支持復數(shù)、復數(shù) autograd、復數(shù)模塊和大量的復數(shù)運算(線性代數(shù)和快速傅里葉變換)。在包括 torchaudio 和 ESPNet 在內(nèi)的許多庫中,都已經(jīng)使用了復數(shù),并且 PyTorch 1.12 通過復數(shù)卷積和實驗性 complex32 數(shù)據(jù)類型進一步擴展了復數(shù)功能,該數(shù)據(jù)類型支持半精度 FFT 操作。由于 CUDA 11.3 包中存在 bug,如果用戶想要使用復數(shù),官方建議使用 CUDA 11.6 包。
(Beta)Forward-mode 自動微分
Forward-mode AD 允許在前向傳遞中計算方向?qū)?shù)(或等效地雅可比向量積)。PyTorch 1.12 顯著提高了 forward-mode AD 的覆蓋范圍。
BetterTransformer
PyTorch 現(xiàn)在支持多個 CPU 和 GPU fastpath 實現(xiàn)(BetterTransformer),也就是 Transformer 編碼器模塊,包括 TransformerEncoder、TransformerEncoderLayer 和 MultiHeadAttention (MHA) 的實現(xiàn)。在新的版本中,BetterTransformer 在許多常見場景中速度快 2 倍,這還要取決于模型和輸入特征。新版本 API 支持與先前的 PyTorch Transformer API 兼容,如果現(xiàn)有模型滿足 fastpath 執(zhí)行要求,它們將加速現(xiàn)有模型,以及讀取使用先前版本 PyTorch 訓練的模型。 此外,新版本還有一些更新:
- 模塊:模塊計算的一個新 beta 特性是功能性 API。這個新的 functional_call() API 讓用戶可以完全控制模塊計算中使用的參數(shù)。
- TorchData:DataPipe 改進了與 DataLoader 的兼容性。PyTorch 現(xiàn)在支持基于 AWSSDK 的 DataPipes。DataLoader2 已被引入作為管理 DataPipes 與其他 API 和后端之間交互的一種方式。
- nvFuser: nvFuser 是新的、更快的默認 fuser,用于編譯到 CUDA 設備。
- 矩陣乘法精度:默認情況下,float32 數(shù)據(jù)類型上的矩陣乘法現(xiàn)在將在全精度模式下工作,這種模式速度較慢,但會產(chǎn)生更一致的結果。
- Bfloat16:為不太精確的數(shù)據(jù)類型提供了更快的計算時間,因此在 1.12 中對 Bfloat16 數(shù)據(jù)類型進行了新的改進。
- FSDP API:作為原型在 1.11 版中發(fā)布,F(xiàn)SDP API 在 1.12 版的發(fā)布中達到了測試版,并添加了一些改進。
更多內(nèi)容請查看:https://pytorch.org/blog/pytorch-1.12-released/。