PyTorch 1.9新特性解析

PyTorch 1.9版本在分布式训练和科学计算领域提供了显著的支持增强。这个版本包含了自1.8版本以来的超过3400次提交,由398位贡献者共同完成。以下是一些重要的改进点:

科学计算支持的增强

PyTorch1.9版本中,torch.linalg模块正朝着稳定版本迈进。该模块涵盖了常见的线性代数操作,包括矩阵属性、分解、求解器、逆矩阵、矩阵乘积、张量操作和实验性功能。模块扩展了PyTorch对深度学习科学计算的支持,实现了NumPy线性代数模块中的每一个函数(现在支持加速器和自动梯度)。对于NumPy的老用户来说,这是一个好消息!

自动梯度(Autograd)的改进

自动梯度功能在1.9版本中已经稳定,它支持超过98%的PyTorch操作,可以计算复杂的梯度并优化具有复变量的真实值损失函数。这使得所有现有的优化器都能够与复参数一起工作,这与TensorFlow对复数微分的约定相匹配。

TorchElastic和PyTorch RPC的增强

TorchElastic已经被添加到PyTorch核心库中,用于优雅地处理扩展事件。PyTorch RPC现在支持大规模分布式训练,并支持GPU。

性能优化和模型部署的新API

PyTorch 1.9引入了新的API,用于优化性能和模型推理部署的打包。

PyTorch Profiler对分布式训练和GPU利用率的支持

PyTorchProfiler现在支持分布式训练、GPU利用率和SM效率。

向后不兼容的变更

在向后兼容性方面,对Python API进行了一些更改。例如,torch.divide()函数用于两个张量的除法,并且包含一个rounding_mode函数,当设置为‘floor’时,除以零时返回的非有限值与其他舍入模式相同,这意味着它总是返回NaN值,但是非零数除以零应该返回+/-无穷大。这个行为已经被更新,以在处理除以零时包含+/-无穷大。

torch.tensor([-1.0, 0.0, 1.0]) / torch.tensor([0.0], rounding_mode='floor') # 结果为 tensor([-inf, nan, inf])

复杂自动梯度

这个功能在1.9版本中已经稳定,它支持超过98%的PyTorch操作,改进了对复数操作的测试。复杂自动梯度是指使用PyTorch对具有复数域和/或值域的任何函数f(z)进行微分时,梯度是在假设该函数是更大的实值损失函数g(input)=L的一部分的情况下计算的。

调试功能

PyTorch1.9包括一个torch.use_deterministic_algorithms选项。这个选项在调试和编写可复现程序时非常有用。为了允许操作以确定性方式运行,将其设置为true,或者如果它们以非确定性方式运行,则抛出运行时错误。

# 设置确定性算法选项为True torch.use_deterministic_algorithms(True) # 执行操作,确保结果的一致性 torch.bmm(a, b).eq(torch.bmm(a, b)).all().item() # 结果为True

nn模块的改进

nn.module现在允许对任何参数或缓冲区进行参数化,并限制参数所在的空间,而无需特殊的优化方法。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485