内容导读
北京工夫 3 月 4 日,PyTorch 官网博客公布 1.8
版本。据官网介绍,新版本次要包含编译器和分布式训练更新,同时新增了局部挪动端教程。
整体来看,本次版本更新涵盖 1.7 版本公布以来,共计 3,000 屡次 commit,包含编译、代码优化、科学计算前端 API 以及通过 pytorch.org 提供的二进制文件反对 AMD ROCm。
同时 PyTorch 1.8 还为管道和模型并行的大规模训练,进行了性能改良和梯度压缩。
其中一些重点更新包含:
- 通过
torch.fx
,可进行 python 之间的函数转换; - 减少 / 调整 API,以反对 FFT(
torch.fft
)、线性代数函数(torch.linalg
),反对简单张量主动求导(autograd),并晋升了计算 hessian 和 jacobian 的性能体现; - 对分布式训练进行了重大更新和改良,包含:改良 NCCL 可靠性,反对管道并行,RPC 剖析,反对增加梯度压缩的通信 hooks。
在 PyTorch 1.8 中,官网对一些 PyTorch 库也进行了重大更新,包含 TorchCSPRNG、TorchVision、TorchText 和 TorchAudio。
新增及更新 API
新增及更新 API 包含:与 NumPy 兼容的额定 API,及在推理和训练时方面,进步代码性能的额定 API。
以下为 PyTorch 1.8 次要更新性能的简介。
[稳定版] Torch.fft
将反对高性能 NumPy 中的 FFT
PyTorch 1.8 中公布了 torch.fft
模块。该模块在实现 NumPy np.ft
性能的同时,还反对硬件加速和 autograd。
[测试版] torch.linalg
将反对 NumPy 中的线性代数函
torch.linalg
以 NumPy np.linalg
为原型,为常见的线性代数运算提供与 NumPy 相似的反对,包含 Cholesky 合成、行列式、特征值等。
[测试版] 利用 FX 进行 Pthon 代码转换
FX 使得开发者能够通过 transform(input_module : nn.Module)
-> nn.Module
进行 Python 代码转换,输出 Module
实例,失去转换后的 Module
实例。
分布式训练
为了进步 NCCL 稳定性,PyTorch 1.8 将反对稳固的异步谬误 / 超时解决;反对 RPC 剖析。此外,还减少了对管道并行的反对,并能够通过 DDP 中的通信钩子进行梯度压缩。
详情如下:
[测试版] 管道并行
提供一个易于应用的 PyTorch API,可将管道并行作为训练循环的一部分。
[测试版] DDP 通信钩子
DDP 通信钩子 (communication hook) 是一个通用接口,通过在 DistributedDataParallel 中笼罩 vanilla allreduce 来管制 worker 之间的梯度通信。
PyTorch 1.8 新增局部内置的通信钩子,如 PowerSGD,用户能够按需调用。此外,通信钩子接口还反对用户自定义通信策略。
分布式训练的附加原型性能
除了在稳定版和测试版中新增的分布式训练性能外,Nightly 版本中也相应减少了局部性能。
具体如下:
**[Prototype] ZeroRedundancyOptimizer
[Prototype] 过程组 NCCL 发送 / 接管
[Prototype] RPC 中用 TensorPipe 反对 CUDA
[Prototype] 近程模块 **
PyTorch 挪动端
PyTorch 1.8 中为新用户提供了多个挪动端教程,旨在帮忙新用户更迅速地将 PyTorch 模型部署在挪动端。
同时为老用户提供开发工具,让其更得心应手地用 PyTorch 进行挪动端开发。
PyTorch 挪动端新增教程包含:
- iOS 端用 DeepLabV3 进行图像宰割
- Android 端用 DeepLabV3 进行图像宰割
iOS 端用 DeepLabV3 进行图像宰割
新增 demo APP 还包含图像宰割、指标检测、机器翻译、智能问答等(iOS & Android)。
除了在 CPU 上对 MobileNetV3 等模型进行性能晋升外,官网还对 Android GPU 后盾原型进行了革新,以笼罩更多机型、进行更疾速的推理。
另外,PyTorch 1.8 还推出了 PyTorch Mobile Lite 解释器性能,容许用户缩小运行时二进制文件的大小。
[Prototype] PyTorch Mobile Lite Interpreter
PyTorch Lite Interpreter 是 PyTorch runtime 的精简版,可在空间受限的设施中执行 PyTorch 程序,并缩小二进制文件对存储空间的占用。
与以后版本中的设施运行时相比,这一性能可缩小 70% 的二进制文件大小。
性能优化
PyTorch 1.8 中新增对 benchmark utils 的反对,使用户可能更轻松地监控模型性能。另外还新凋谢了一个主动量化 API。
[测试版] Benchmark utils
Benchmark utils 容许用户进行准确的性能测量,并提供组合工具,帮忙制订基准和进行前期解决。
代码示例:
from torch.utils.benchmark import Timer
results = []
for num_threads in [1, 2, 4]:
timer = Timer(stmt="torch.add(x, y, out=out)",
setup="""
n = 1024
x = torch.ones((n, n))
y = torch.ones((n, 1))
out = torch.empty((n, n))
""",
num_threads=num_threads,
)
results.append(timer.blocked_autorange(min_run_time=5))
print(f"{num_threads} thread{'s'if num_threads > 1 else' ':<4}"
f"{results[-1].median * 1e6:>4.0f} us" +
(f"({results[0].median / results[-1].median:.1f}x)" if num_threads > 1 else '')
)
1 thread 376 us
2 threads 189 us (2.0x)
4 threads 99 us (3.8x)
[Prototype] FX Graph Mode Quantization
FX Graph Mode Quantization 是 PyTorch 中新增的主动量化 API。它通过减少函数反对和自动化量化过程,改良 Eager Mode Quantization。
硬件反对
[测试版]强化 PyTorch Dispatcher 的能力,改善 C++ 中后端开发体验
PyTorch 1.8 反对用户在 pytorch/pytorch
repo 之外创立新的树外 (out-of-tree) 设施,并与本地 PyTorch 设施放弃同步。
[测试版] AMD GPU 二进制文件现已推出
PyTorch 1.8 新增对 ROCm wheel 的反对,用户只需依据规范 PyTorch 装置选择器,装置选项抉择 ROCm,而后执行命令,即可轻松上手应用 AMD GPU。
教程及文档详情,请拜访以下链接查看:
https://pytorch.org/blog/pyto…