现在,您可以在Python API中干净地复制 Tensor 对象上的所有属性,而不仅仅是简单的 Tensor 属性。在 torch.linspace 和 torch.logspace 中,Steps 参数不再是可选的。在 PyTorch 1.10.2 中该参数默认为 100。现在,它不再是一种选择。PyTorch 还删除了错误公开的 torch.hub.import_module 函数。不推荐在具有不同维数的张量上调用 xT。现在,它只接受 0 或 2 维的张量。
C++前端标头现在减少为仅包含使用的 aten 运算符的子集。现在,如果用户包含来自 C++ 前端的标头,则可能不会传递包含 aten 运算符。但是,用户可以直接在他们的文件中添加#include <ATen/ATen.h> 以保持包含每个aten 运算符的旧行为。PyTorch 1.11 还删除了 c10::List 和 c10::Dict 移动构造函数的自定义实现。语义已从“make the moved-from List/Dict empty”变为“keep the moved-from List/Dict unchanged”。
对于CUDA,THCeilDiv 函数和相应的 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 标准的初步支持。它实现了 Python Array API 定义的 90% 以上的运算符,包括用于改进 DLPack 支持的 torch.from_dlpack 操作。他们还将 torch.testing 从原型转移到了测试版。
对于Autograd,PyTorch 1.11 有一个新的 torch.utils.checkpoint 实现,它不使用可重入 autograd。转发模式 AD 现在支持大多数操作,并包括 ctx.save_for_forward 函数到 autograd.Function。autograd.forward_ad.unpack_dual 现在将返回一个命名元组而不是普通元组。
线性代数运算支持包括对 torch.linalg.{eig, inverse, houseer_product, qr} 和 torch.*_solve 的正向 AD 支持。他们还为 torch.linalg.lstsq 添加了前向和后向 AD 支持,并为 linalg.pinv 添加了更广泛的输入。
对于ONNX,Pytorch 1.11 支持 opset 版本 15,将 nn.Module 调用导出为 ONNX 本地函数,导出 tanhshrink、hardshrink、softshrink、__xor__、isfinite log10 和对角线等新操作。它还支持使用 Apex O2 导出。
对于 Infra (Releng),Pytorch 1.11 增加了对 ROCm 4.3.1、ROCm 4.5.2、CUDA 11.5、CUDA 启用 Bazel 构建、Python 3.10 的支持。
Pytorch 1.11 现在引入了 FlexiBLAS 构建支持、用于 cpp 扩展构建的 IS_LINUX 和 IS_MACOS 全局变量、用于 iOS CMake 构建的 ARC 以及对 IBM z14/15 SIMD 的支持。
新的更新还包括一个实验标志,允许用户指定首选的线性代数库。添加了 linalg.matrix_exp、linalg.cross 和 linalg.diagonal(torch.diagonal 的别名)等操作。
对于 CUDA,新的更新引入了 Jiterator,使用户能够在运行时编译很少使用的 CUDA 内核。cuSPARSE 描述符和更新的 CSR addmm、addmv_out、nvidia-smi 内存和作为本机 Python API 的利用率也已添加。
对于 Vulkan,Pytorch 1.11 增加了对几个 Torch 运算符的支持,例如 torch.cat、torch.nn “.ConvTranspose2d 、torch.permute 、张量索引(at::slice)和torch.clone。新的 Pytorch 迭代还包括基于跟踪的选择性构建功能,通过包含模型使用的运算符来减少移动模型的二进制大小。
点击这里(https://github.com/pytorch/pytorch/releases/tag/v1.11.0)阅读更多。
TorchData
Pytorch 还发布了TorchData,这是一个通用模块化数据加载原语库,用于轻松构建灵活且高性能的数据管道。
该产品通过称为“DataPipes”的 Iterable 样式和 Map 样式的构建块实现了可组合的数据加载,这些构建块与 PyTorch 的DataLoader开箱即用。
用户可以连接多个DataPipes,形成一个数据管道,执行所有数据转换。
TorchData 已经为文件打开、文本解析、样本转换、缓存、混洗和批处理等核心功能实现了 50 多个 DataPipes。想要连接到云提供商(例如 Google Drive 或 AWS S3)的用户可以使用 fsspec 和 iopath DataPipes 来实现。每个 IterDataPipe 和 MapDataPipe 在文档中都有详细的解释和使用示例。
在此版本中,一些 PyTorch 域库已将其数据集迁移到 DataPipes。TorchText 的流行数据集是使用 DataPipes 实现的,其 SST-2 二进制文本分类教程的一部分展示了如何使用 DataPipes 为模型预处理数据。
functorch
Functorch受到Google JAX的启发,旨在提供可组合的 vmap(矢量化)和 autodiff 转换,这些转换可以很好地与 PyTorch 模块和 PyTorch autograd 配合使用。
该库可以帮助用户计算每个样本的梯度,在单台机器上运行模型集合,在 MAML 的内循环中将任务批处理在一起,以及计算 Jacobians 和 Hessians 以及批处理。