內容導讀
近日,PyTorch 團隊在官方部落格宣佈 Pytorch 1.13 發佈。本文將詳細圍繞新版本的 4 大亮點展開介紹。
據官方介紹,PyTorch 1.13 中包括了 BetterTransformer 的穩定版,且不再支持 CUDA 10.2 及 11.3,並完成了向 CUDA 11.6 及 11.7 的遷移。此外 Beta 版還增加了對 Apple M1 晶片及 functorch 的支持。

functorch 是 PyTorch 中的一個庫
提供可組合的 vmap(向量化)和 autodiff 轉換
PyTorch 1.13 不可錯過的亮點彙總:
1. BetterTransformer 功能集 (feature set) 支持一般的 Transformer 模型在推理過程中,無需修改模型即可進行 fastpath 執行。
此外改進還包括對 Transformer 模型中常用 size 進行加速的 add+matmul 線性代數核心,現已默認啟用嵌套 Tensor。
2. 不再支持舊的 CUDA 版本,引入 Nvidia 推出的最新 CUDA 版本。這使得 PyTorch 和新的 NVIDIA Open GPU 核心模組得以支持 C++17。
3. functorch 從單獨軟體包變為可直接通過 `import functorch` 匯入 PyTorch 使用,無需再單獨安裝。
4. 測試為 M1 晶片 Mac 提供本地構建,並提供更好的 PyTorch API 支持。

Stable Features
1. BetterTransformer API
BetterTransformer 功能集 (feature set) 支持一般的 Transformer 模型在推理過程中,無需修改模型即可進行 fastpath 執行。
作為補充,PyTorch 1.13 中還針對 Transformer 模型中常用的 size,加速了 add+matmul 線性代數核心。
為了提升 NLP 模型性能,PyTorch 1.13 中的 BetterTransformer 默認啟用嵌套 Tensor (Nested Tensor)。在兼容性方面,執行 mask check 確保能提供連續 mask。
Transformer Encoder 中 src_key_padding_mask 的 mask check 可以通過設置 mask_check=False 遮蔽。該設置可以加快處理速度,而非僅提供對齊的 mask。
最後,提供了更好的報錯資訊,簡化錯誤輸入的診斷,同時為 fastpath execution 錯誤提供了更佳的診斷方法。
Better Transformer 直接集成到 PyTorch TorchText 庫中,這使得 TorchText 使用者能夠更輕鬆地利用 BetterTransformer 的速度及效率性能。

Betterformfast 的 fastpath 執行現已穩定可用
並默認啟用嵌套張量表示的稀疏最佳化
2. 引入 CUDA 11.6 和 11.7,不再支持 CUDA 10.2 和 11.3
CUDA 11 是第一個支持 C++17 的 CUDA 版本,不再支持 CUDA 10.2 是推進 PyTorch 支持 C++17 的重要一步,還能通過消除遺留的 CUDA 10.2 特定指令,來改進 PyTorch 程式碼。
CUDA 11.3 的退出和 11.7 的引入,使得 PyTorch 對 NVIDIA Open GPU 核心模組的兼容性更好,另一個重要的亮點是對延遲載入 (lazy loading) 的支持。
CUDA 11.7 自帶 cuDNN 8.5.0,包含大量最佳化,可加速基於 Transformer 的模型,庫的 size 減少 30% ,並對 runtime fusion engine 進行了各種改進。
Beta Features
1. functorch
與 Google JAX 類似,functorch 是 PyTorch 中的一個庫,提供可組合的 vmap(向量化)和 autodiff 轉換。它支持高級的 autodiff 用例(在 PyTorch 中難以表達),包括:
* 模型集成 model ensembling
* 高效計算 Jacobian 和 Hessians
* 計算 per-sample-gradients 或其他 per-sample quantities
PyTorch 1.13 內建 functorch 庫,無需單獨安裝。通過 conda 或 pip 安裝 PyTorch 後,就可以在程序中 `import functorch` 了。
2. 集成英特爾 VTune™ Profiler 及 ITT
PyTorch 使用者如果希望在英特爾平臺上用底層性能指標來分析每個運算元的性能時,可以在英特爾 VTune™ Profiler 中視覺化 PyTorch 腳本執行的運算元級 timeline。
with torch.autograd.profiler.emit_itt():
for i in range(10):
torch.itt.range_push('step_{}'.format(i))
model(input)
torch.itt.range_pop()
3. NNC:增加 BF16 和 Channels last 支持
通過在 NNC 中增加 Channels last 和 BF16 的支持,TorchScript 在 x86 CPU 上的 graph-mode 推理性能得到了顯著提升。
在英特爾 Cooper Lake 處理器上,通過這兩項最佳化,可以使得視覺模型性能達到 2 倍以上的提升。
通過現有的 TorchScript、Channels last 以及 BF16 Autocast API,可以實現性能提升。如下所示,NNC 中的最佳化將遷移到新的 PyTorch DL Compiler TorchInductor 中:
import torch
import torchvision.models as models
model = models.resnet50(pretrained=True)
# Convert the model to channels-last
model = model.to(memory_format=torch.channels_last)
model.eval()
data = torch.rand(1, 3, 224, 224)
# Convert the data to channels-lastdata = data.to(memory_format=torch.channels_last)
# Enable autocast to run with BF16
with torch.cpu.amp.autocast(), torch.no_grad():
# Trace the model
model = torch.jit.trace(model, torch.rand(1, 3, 224, 224))
model = torch.jit.freeze(model)
# Run the traced model
model(data)
4. 增加對 M1 晶片蘋果設備的支持
自 1.12 版本以來,PyTorch 一直致力於為蘋果 M1 晶片提供原生構建。PyTorch 1.13 進一步改進了相關 API。
PyTorch 1.13 在 M1 macOS 12.6 實例上進行了除 torch.distribution 之外的所有子模組測試。這些改進後的測試,可以修復 cpp 擴展以及某些輸入的 convolution correctnes 等功能。
注意:該功能要求 M1 晶片的 macOS 12 或更高版本,並使用原生 Python (arm64) 。
Prototype Features
1. 針對 AWS Graviton 的 ACL 後端支持
PyTorch 1.13 通過 Arm Compute Library (ACL)在 aarch64 CPU 上實現了 CV 和 NLP 推理的實質性提升,這使得 ACL 後端得以支持 PyTorch 及 torch-xla 模組。亮點包括:
* 啟用 mkldnn+acl 作為 aarch64 torch wheel 的默認後端
* 為 arch64 BF16 設備啟用 mkldnn matmul operator
* 將 TensorFlow xla+acl 功能引入 torch-xla。
2. CUDA Sanitizer
啟用後,Sanitizer 將開始分析因使用者的 PyTorch 程式碼而調用的底層 CUDA operation,以檢測資料爭用報錯 (data race error)。
注:這些報錯是由源自不同 CUDA Stream 的不同步資料訪問而導致的。
與 Thread Sanitizer 類似,定位到的報錯會與錯誤訪問的堆疊 trace 一起列印出來。
機器學習應用中損壞的資料很容易被忽略,報錯有時候也並不顯現,因此用於檢測並定位錯誤的 CUDA Sanitizer 就格外重要了。
3. 部分支持 Python 3.11
使用者可通過 pip 下載支持 Python 3.11 的 Linux 二進位制檔案。不過這個功能只是一個 preview 版,Distributed、Profiler、FX 和 JIT 等功能並未完全支持。
從 0 到 1,學習 PyTorch 官方教程
OpenBayes.com 現已上線多個中文 PyTorch 官方教程,包括但不限於 NLP,CV,DL 等多個實例,您可以訪問控制檯,在公開資源中搜尋查看。
運行 PyTorch 中文教程,點選文末閱讀原文,或訪問以下連結:
https://openbayes.com/console/public/tutorials
