PyTorch 1.11 發(fā)布,帶來 TorchData 和 functorch 兩個新庫
現(xiàn)在,您可以在Python API中干凈地復(fù)制 Tensor 對象上的所有屬性,而不僅僅是簡單的 Tensor 屬性。在 torch.linspace 和 torch.logspace 中,Steps 參數(shù)不再是可選的。在 PyTorch 1.10.2 中該參數(shù)默認為 100?,F(xiàn)在,它不再是一種選擇。PyTorch 還刪除了錯誤公開的 torch.hub.import_module 函數(shù)。不推薦在具有不同維數(shù)的張量上調(diào)用 xT?,F(xiàn)在,它只接受 0 或 2 維的張量。
C++前端標頭現(xiàn)在減少為僅包含使用的 aten 運算符的子集?,F(xiàn)在,如果用戶包含來自 C++ 前端的標頭,則可能不會傳遞包含 aten 運算符。但是,用戶可以直接在他們的文件中添加#include <ATen/ATen.h> 以保持包含每個aten 運算符的舊行為。PyTorch 1.11 還刪除了 c10::List 和 c10::Dict 移動構(gòu)造函數(shù)的自定義實現(xiàn)。語義已從“make the moved-from List/Dict empty”變?yōu)椤発eep the moved-from List/Dict unchanged”。
對于CUDA,THCeilDiv 函數(shù)和相應(yīng)的 THC/THCDeviceUtils.cuh 頭文件、THCudaCheck 和 THCudaMalloc()、THCudaFree()、THCThrustAllocator.cuh 已被刪除。
新特性
對于 Python API,PyTorch 1.11 添加了 set_deterministic_debug_mode 和 get_deterministic_debug_mode,n 維 Hermitian FFT:torch.fft.ifftn 和 torch.fft.hfftn,Wishart 分布到 torch.distributions。PyTorch 為 torch 和 torch.linalg 模塊添加了對 Python Array API 標準的初步支持。它實現(xiàn)了 Python Array API 定義的 90% 以上的運算符,包括用于改進 DLPack 支持的 torch.from_dlpack 操作。他們還將 torch.testing 從原型轉(zhuǎn)移到了測試版。
對于Autograd,PyTorch 1.11 有一個新的 torch.utils.checkpoint 實現(xiàn),它不使用可重入 autograd。轉(zhuǎn)發(fā)模式 AD 現(xiàn)在支持大多數(shù)操作,并包括 ctx.save_for_forward 函數(shù)到 autograd.Function。autograd.forward_ad.unpack_dual 現(xiàn)在將返回一個命名元組而不是普通元組。
線性代數(shù)運算支持包括對 torch.linalg.{eig, inverse, houseer_product, qr} 和 torch.*_solve 的正向 AD 支持。他們還為 torch.linalg.lstsq 添加了前向和后向 AD 支持,并為 linalg.pinv 添加了更廣泛的輸入。
對于ONNX,Pytorch 1.11 支持 opset 版本 15,將 nn.Module 調(diào)用導(dǎo)出為 ONNX 本地函數(shù),導(dǎo)出 tanhshrink、hardshrink、softshrink、__xor__、isfinite log10 和對角線等新操作。它還支持使用 Apex O2 導(dǎo)出。
對于 Infra (Releng),Pytorch 1.11 增加了對 ROCm 4.3.1、ROCm 4.5.2、CUDA 11.5、CUDA 啟用 Bazel 構(gòu)建、Python 3.10 的支持。
Pytorch 1.11 現(xiàn)在引入了 FlexiBLAS 構(gòu)建支持、用于 cpp 擴展構(gòu)建的 IS_LINUX 和 IS_MACOS 全局變量、用于 iOS CMake 構(gòu)建的 ARC 以及對 IBM z14/15 SIMD 的支持。
新的更新還包括一個實驗標志,允許用戶指定首選的線性代數(shù)庫。添加了 linalg.matrix_exp、linalg.cross 和 linalg.diagonal(torch.diagonal 的別名)等操作。
對于 CUDA,新的更新引入了 Jiterator,使用戶能夠在運行時編譯很少使用的 CUDA 內(nèi)核。cuSPARSE 描述符和更新的 CSR addmm、addmv_out、nvidia-smi 內(nèi)存和作為本機 Python API 的利用率也已添加。
對于 Vulkan,Pytorch 1.11 增加了對幾個 Torch 運算符的支持,例如 torch.cat、torch.nn “.ConvTranspose2d 、torch.permute 、張量索引(at::slice)和torch.clone。新的 Pytorch 迭代還包括基于跟蹤的選擇性構(gòu)建功能,通過包含模型使用的運算符來減少移動模型的二進制大小。
點擊這里(https://github.com/pytorch/pytorch/releases/tag/v1.11.0)閱讀更多。
TorchData
Pytorch 還發(fā)布了TorchData,這是一個通用模塊化數(shù)據(jù)加載原語庫,用于輕松構(gòu)建靈活且高性能的數(shù)據(jù)管道。
該產(chǎn)品通過稱為“DataPipes”的 Iterable 樣式和 Map 樣式的構(gòu)建塊實現(xiàn)了可組合的數(shù)據(jù)加載,這些構(gòu)建塊與 PyTorch 的DataLoader開箱即用。
用戶可以連接多個DataPipes,形成一個數(shù)據(jù)管道,執(zhí)行所有數(shù)據(jù)轉(zhuǎn)換。
TorchData 已經(jīng)為文件打開、文本解析、樣本轉(zhuǎn)換、緩存、混洗和批處理等核心功能實現(xiàn)了 50 多個 DataPipes。想要連接到云提供商(例如 Google Drive 或 AWS S3)的用戶可以使用 fsspec 和 iopath DataPipes 來實現(xiàn)。每個 IterDataPipe 和 MapDataPipe 在文檔中都有詳細的解釋和使用示例。
在此版本中,一些 PyTorch 域庫已將其數(shù)據(jù)集遷移到 DataPipes。TorchText 的流行數(shù)據(jù)集是使用 DataPipes 實現(xiàn)的,其 SST-2 二進制文本分類教程的一部分展示了如何使用 DataPipes 為模型預(yù)處理數(shù)據(jù)。
functorch
Functorch受到Google JAX的啟發(fā),旨在提供可組合的 vmap(矢量化)和 autodiff 轉(zhuǎn)換,這些轉(zhuǎn)換可以很好地與 PyTorch 模塊和 PyTorch autograd 配合使用。
該庫可以幫助用戶計算每個樣本的梯度,在單臺機器上運行模型集合,在 MAML 的內(nèi)循環(huán)中將任務(wù)批處理在一起,以及計算 Jacobians 和 Hessians 以及批處理。