PyTorch是一个开源的Python机器学习库。2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch,用于自然语言处理等应用程序。
近日,Facebook发布了PyTorch 1.8新版本,加入了对AMD ROCm的支持,可以不用去配置Docker在原生环境下运行。
其中一些重大更新包括:
- 支持通过 torch.fx进行函数转换;
- 增加和调整 API以支持 FFT( torch.fft )、线性代数函数( torch.linalg )
- 添加了复杂张量自动求导(autograd)的支持,并提升了矩阵计算 hessian 和 jacobian 的能力;
- 对分布式训练进行了重大更新和改进,包括:改进 NCCL 可靠性,支持管道并行,RPC 分析,支持添加梯度压缩的通讯 钩子。
在PyTorch 1.8版本中,官方对一些PyTorch库也进行了相应的更新,主要包括 TorchCSPRNG、TorchVision、TorchText 和 TorchAudio。
PyTorch 1.8版本中的功能分为稳定版 (Stable)、测试版 (Beta) 和原型版 (Prototype)。
新增及更新 API
新增及更新 API 包括:与 NumPy 兼容的额外 API,及在推理和训练时方面,提高代码性能的额外 API。 PyTorch 1.8 主要更新功能简介:
- [稳定版] Torch.fft 支持高性能 NumPy 中的 FFT
实现了 NumPy np.ft 功能的同时,还支持硬件加速和 autograd
- [测试版] torch.linalg 将支持 NumPy 中的线性代数函
为常见的线性代数运算提供与 NumPy 类似的支持,支持 Cholesky 分解、 行列式、特征值等功能。
- [测试版] 利用 FX 进行 Pthon 代码转换。
增强分布式训练
PyTorch 1.8支持稳定的异步错误/超时处理,以提高 NCCL 稳定性;
此外,还增加了对管道并行的支持,可将数据拆解成更小的块以提高并行计算效率。 并可以通过 DDP 中的通讯钩子进行梯度压缩,用于控制如何在workers之间同步梯度。
此外,PyTorch 1.8 还增加了一些 prototype 特性,具体如下:
- ZeroRedundancyOptimizer:有助于减少每个线程的内存占用;
- 进程组 NCCL 发送/接收:允许用户在 Python 层(而非 C++ 层)实现集合操作;
- RPC 中用 TensorPipe 支持 CUDA:为使用 PyTorch RPC 和多 GPU 机器的用户带来速度提升;
- 远程模块:允许用户像操作本地模块那样操作远程 worker 上的模块。
PyTorch 移动端
本次更新发布了图像分割模型DeepLabV3在安卓和IOS,能更好地帮助新用户将 PyTorch 模型部署在移动端。
PyTorch 移动端新增教程包括:
- iOS 端用 DeepLabV3 进行图像分割
- Android 端用 DeepLabV3 进行图像分割
同时为老用户提供开发工具,让其更得心应手地用 PyTorch 进行移动端开发。
性能优化工具
新增测试版benchmark utils ,使用户能够更轻松地监控模型性能。还开放了一个自动量化 API,能改进 Eager Mode Quantization。
- Benchmark utils
Benchmark utils 允许用户进行精确的性能测量,并提供组合工具,帮助制定基准和进行后期处理。
- FX Graph Mode Quantization
新增的自动量化 API,它通过增加函数支持和自动化量化过程,改进 Eager Mode Quantization。
硬件支持
PyTorch 1.8 版本新增了两个 测试版本特性
- 强化 PyTorch Dispatcher 的能力,使其适应 C++ 中后端开发
支持用户在 pytorch/pytorch repo 之外创建新的树外设备,并与本地 PyTorch 设备保持同步。
- AMD GPU 二进制文件现已推出
新增对 ROCm wheel 的支持。
需要注意的是,PyTorch 1.8 仅在 Linux 系统中支持 AMD ROCm。
参考资料:https://www.phoronix.com/scan.php?page=news_item&px=PyTorch-1.8-Released