集成3400 条commit!PyTorch 1.10 发布,能帮你选batch size的框架

人工智能
本次更新包含了自1.9版本以来的426名贡献者的3400多条commit共同组成,更新内容主要在于改善PyTorch的训练、性能以及开发人员可用性。

 [[431318]]

10月21日晚上,PyTorch 1.10终于发布!

本次更新包含了自1.9版本以来的426名贡献者的3400多条commit共同组成,更新内容主要在于改善PyTorch的训练、性能以及开发人员可用性。

  1. 集成了 CUDA Graphs API以减少调用CUDA时CPU开销;
  2. FX、torch.special和nn.ModuleParametrization等几个前端API已从测试版(beta)变为稳定版(stable);
  3. 除GPU外,JIT Compiler中对自动融合(automatic fusion)的支持目前也支持CPU了;
  4. Android NNAPI支持在测试版中已经可以用了。

前端API

FX 更加稳定。FX是一个Pythonic 的平台,能够用于转换和降低 PyTorch程序。它可以促进函数和nn.Module实例中的Python到Python转换。FX 工具包目的是支持Python语言中的一个子集以实现方便的转换即可,而非整个Python语言。随着1.10的发布,FX正在趋于稳定。

集成3400 条commit!PyTorch 1.10 发布,能帮你选batch size的框架

加入一个类似于 SciPy 的特殊模块 torch.special,目前可以稳定地使用。该模块包含30个操作,包括gamma、Bessel 和Gauss 误差函数。

集成3400 条commit!PyTorch 1.10 发布,能帮你选batch size的框架

nn.Module参数化允许用户在不修改 nn.Module本身的情况下参数化任何参数(parametrize any parameter)。这个版本还增加了权重归一化 (weight_norm)、正交参数化(矩阵约束和部分剪枝),用户在创建自己的参数化时更加灵活。

集成3400 条commit!PyTorch 1.10 发布,能帮你选batch size的框架

在测试版中,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上的性能显著提升,并且所需内存也更少了。

集成3400 条commit!PyTorch 1.10 发布,能帮你选batch size的框架

分布式训练

在1.10版本中,在torch.distributed 包中的功能很多从测试版转为稳定版。

  1. Remote 模块允许用户远程操作和使用本地模块一样,其中 RPC 对用户是透明的;
  2. DDP通信 hook允许用户覆盖DDP如何在进程中同步梯度;
  3. 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 版本主要包含以下功能:

  1. 增强型内存视图:这有助于用户更好地了解内存使用,主要通过在程序运行的各个点显示活动内存分配来帮助开发人员避免内存错误;
  2. 增强型内核视图:附加列显示网格和块大小以及每个线程共享内存使用和寄存器的情况,这些工具可以给开发者推荐batch size的变化、TensorCore、内存缩减技术等;
  3. 分布式训练:Gloo现在支持分布式训练工作;
  4. TensorCore:该工具显示Tensor Core(TC)的使用,并为数据科学家和框架开发人员提供建议;
  5. NVTX:对NVTX markers的支持是从旧版autograd profiler移植过来的;
  6. 支持移动设备分析:PyTorch profiler现在与TorchScript 、移动后端能够更好的集成,支持移动工作负载的跟踪收集。

移动端 PyTorch

去年PyTorch 就发布了对Android神经网络API(NNAPI)的原型支持,NNAPI的作用主要是允许Android应用程序使用手机芯片中最高效的部分来运行神经网络,支持的设备主要包括GPU(图形处理单元)和NPU(专用神经处理单元)。

集成3400 条commit!PyTorch 1.10 发布,能帮你选batch size的框架

在新版本中,PyTorch 增加了更多的算子(op)覆盖率,包括在加载时支持更灵活的shape,以及在主机上运行模型进行测试的能力。

此外,迁移学习也已添加到对象检测示例中。

 

责任编辑:张燕妮 来源: 新智元
相关推荐

2009-07-24 16:42:46

iBatis框架做ba

2009-07-22 16:43:22

iBATIS框架iBATIS优化

2018-10-22 09:23:00

FacebookAI框架人工智能

2013-07-04 09:33:26

BGP选路

2017-09-26 10:09:55

EpochBatch Size神经网络

2022-08-02 20:47:38

Spring框架应用程序

2017-10-25 16:30:47

深度学习分布式训练

2012-07-27 10:01:30

前端框架前端工具

2022-12-12 09:42:04

PHPGo框架

2020-05-22 10:02:43

Python语言编程

2022-03-24 09:34:06

Bootstrap

2013-10-17 13:56:21

飞鱼星无线云飞鱼星路由器飞鱼星

2021-12-19 22:51:24

PyTorchTensorFlow框架

2019-04-16 14:46:15

IntentSize数据

2019-05-13 14:00:13

CSS框架前端

2020-11-02 18:38:17

Batch Norma深度学习

2021-03-09 11:23:50

PyTorch 1.8Python函数转换

2021-11-05 12:59:51

深度学习PytorchTenso

2021-07-15 09:10:07

Terminal 1.操作系统微软

2021-07-05 10:25:07

人工智能AI
点赞
收藏

51CTO技术栈公众号