来源:GitHub
编辑:LRS
【新智元导读】历时四个多月,PyTorch 1.10终于发布了正式版,这次的更新内容性能更强,对安卓的支持更多,对开发人员也更友好了!
10月21日晚上,PyTorch 1.10终于发布!
本次更新包含了自1.9版本以来的426名贡献者的3400多条commit共同组成,更新内容主要在于改善PyTorch的训练、性能以及开发人员可用性。
集成了 CUDA Graphs API以减少调用CUDA时CPU开销;
FX、torch.special和nn.ModuleParametrization等几个前端API已从测试版(beta)变为稳定版(stable);
除GPU外,JIT Compiler中对自动融合(automatic fusion)的支持目前也支持CPU了;
Android NNAPI支持在测试版中已经可以用了。
FX 更加稳定。FX是一个Pythonic 的平台,能够用于转换和降低 PyTorch程序。它可以促进函数和nn.Module实例中的Python到Python转换。FX 工具包目的是支持Python语言中的一个子集以实现方便的转换即可,而非整个Python语言。随着1.10的发布,FX正在趋于稳定。
加入一个类似于 SciPy 的特殊模块 torch.special,目前可以稳定地使用。该模块包含30个操作,包括gamma、Bessel 和Gauss 误差函数。
nn.Module参数化允许用户在不修改 nn.Module本身的情况下参数化任何参数(parametrize any parameter)。这个版本还增加了权重归一化 (weight_norm)、正交参数化(矩阵约束和部分剪枝),用户在创建自己的参数化时更加灵活。
在测试版中,PyTorch集成了CUDA Graphs API以减少调用CUDA时CPU开销;CUDA Graphs大大降低了CPU绑定cuda(CPU-bound cuda)工作负载的CPU开销,从而通过提高GPU利用率来提高性能。对于分布式工作负载,CUDA Graphs还可以减少抖动,并且由于并行工作负载必须等待最慢的worker ,因此减少抖动可以提高整体并行效率。
这次集成允许由CUDA graph捕获的网络部件之间的无缝互操作和由于图形限制而无法捕获的网络部分。
PyTorch对复数tensor的共轭(torch.conj())现在消耗的时间已经是常数时间O(1) 的操作了,并且返回的是输入Tensor的一个共轭比特的view,通过调用torch.is_conj()可以验证。这已经利用了矩阵乘法,点乘等的各种其他PyTorch操作来融合共轭,这个操作促使CPU和CUDA上的性能显著提升,并且所需内存也更少了。
在1.10版本中,在torch.distributed 包中的功能很多从测试版转为稳定版。
Remote 模块允许用户远程操作和使用本地模块一样,其中 RPC 对用户是透明的;
DDP通信 hook允许用户覆盖DDP如何在进程中同步梯度;
ZeroredUndanyOptimizer可与DistributedDataParallel 一起使用,以减小每个过程优化器状态的size。通过这种稳定版本,它现在还可以处理不均匀的输入到不同的数据并行woker。
TorchScript严格要求源代码具有类型注释才能成功编译。
长期以来,用户只能通过反复试验来添加缺失或不正确的类型注释,也就是通过逐个修复Torch.Jit.Script生成的类型检查错误来解决bug,这种方式十分费时、效率也很低。
现在,PyTorch 1.10利用MonkeyType等现有工具为torch.jit.script启用了配置文件定向输入,这使得该过程变得更容易、更快和更高效。
PyTorch 1.10为CPU添加了一个基于LLVM的JIT编译器,可以将Torch库调用序列融合在一起以提高性能。虽然此前的版本在GPU上拥有此功能,但1.10版本是第一次将编译引入CPU。
PyTorch Profiler,它的目标是找到代码中时间或内存成本最高的执行步骤,并可视化 GPU 和 CPU 之间的工作负载分布,目前1.10 版本主要包含以下功能:
增强型内存视图:这有助于用户更好地了解内存使用,主要通过在程序运行的各个点显示活动内存分配来帮助开发人员避免内存错误;
增强型内核视图:附加列显示网格和块大小以及每个线程共享内存使用和寄存器的情况,这些工具可以给开发者推荐batch size的变化、TensorCore、内存缩减技术等;
分布式训练:Gloo现在支持分布式训练工作;
TensorCore:该工具显示Tensor Core(TC)的使用,并为数据科学家和框架开发人员提供建议;
NVTX:对NVTX markers的支持是从旧版autograd profiler移植过来的;
支持移动设备分析:PyTorch profiler现在与TorchScript 、移动后端能够更好的集成,支持移动工作负载的跟踪收集。
去年PyTorch 就发布了对Android神经网络API(NNAPI)的原型支持,NNAPI的作用主要是允许Android应用程序使用手机芯片中最高效的部分来运行神经网络,支持的设备主要包括GPU(图形处理单元)和NPU(专用神经处理单元)。
在新版本中,PyTorch 增加了更多的算子(op)覆盖率,包括在加载时支持更灵活的shape,以及在主机上运行模型进行测试的能力。
参考资料:
https://github.com/pytorch/pytorch/releases/tag/v1.10.0
https://pytorch.org/blog/pytorch-1.10-released/