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