广受人们欢迎的深度学习框架 PyTorch 刚刚更新了 1.10 正式版,在 CUDA Graphs API 等方面进行了诸多改进。
PyTorch 是一个开源的 Python 机器学习库,基于 Torch,底层由 C++ 实现,主要应用于人工智能领域,如自然语言处理,它最初由 Facebook 的人工智能研究团队开发。由于 PyTorch 定义网络结构简单等特点,自发布以来便受到众多研究人的青睐。经过研究者的不断努力,现在, PyTorch 更新到 PyTorch 1.10 版本。此版本由 1.9 版本以来的 3,400 多次 commits 组成,由 426 位贡献者完成。 此次PyTorch 1.10 的更新侧重于改进 PyTorch 的训练和性能以及开发人员的可用性。亮点包括以下:集成了 CUDA Graphs API 以减少 CUDA 工作负载的 CPU 开销;
FX、torch.special 和 nn.ModuleParametrization 等几个前端 API 已从测试版变为稳定版;
除了 GPU 之外,JIT Compiler 中对自动融合的支持扩展到 CPU;
Android NNAPI 支持现已推出测试版。
(注:从 PyTorch 1.6 版本开始,PyTorch 特性分为 Stable(稳定版)、Beta(测试版)和 Prototype(原型版)。使用 FX 进行 Python 代码转换(稳定版):FX 提供了一个用于转换和降低 PyTorch 程序的 python 化平台,它是一个工具包,在 1.10 版本中,FX 趋于稳定,用户可以使用 torch.fx 实现程序转换。torch.special(稳定版):torch.special 模块,类似于 SciPy 的特殊模块,现在稳定版可用。该模块有 30 种运算,包括 gamma、Bessel 和(高斯)误差函数。nn.Module 参数化(稳定版):允许用户在不修改 nn.Module 本身的情况下参数化任何参数等,在稳定版中可用。此版本增加了权重归一化 (weight_norm)、正交参数化(矩阵约束和部分剪枝),用户在创建自己的参数化时更加灵活。CUDA Graphs API 集成(测试版):PyTorch 现在集成了 CUDA Graphs API 以减少 CUDA 工作负载的 CPU 开销。CUDA Graphs 大大降低了 CPU 绑定 cuda(CPU-bound cuda)工作负载的 CPU 开销,从而通过提高 GPU 利用率来提高性能。对于分布式工作负载,CUDA Graphs 还可以减少抖动,并且由于并行工作负载必须等待最慢的工作负载,因此减少抖动可以提高整体并行效率。在 1.10 版本中,有许多特性在分布式包中从测试版过渡到稳定版,具体包括:Remote Module(稳定版):此功能允许用户远程操作模块,就像使用本地模块一样,其中 RPC 对用户是透明的;
DDP Communication Hook(稳定版):此功能允许用户覆盖 DDP 如何跨进程同步梯度;
ZeroRedundancyOptimizer(稳定版):此功能可与 DistributedDataParallel 结合使用,以减少每个进程优化器状态的大小。
(测试版)TorchScript 严格要求源代码具有类型注释才能成功编译。长期以来,用户只能通过反复试验来添加缺失或不正确的类型注解,效率低下,耗时长。现在,PyTorch 1.10 利用 MonkeyType 等现有工具为 torch.jit.script 启用了配置文件定向输入,这使得该过程变得更容易、更快和更高效。(测试版)CPU 融合:PyTorch 1.10 为 CPU 添加了一个基于 LLVM 的 JIT 编译器,可以将 Torch 库调用序列融合在一起以提高性能。虽然此前的版本在 GPU 上拥有此功能已有一段时间了,但 1.10 版本是第一次将编译引入 CPU。(测试版)PyTorch Profiler 的目标是针对时间或内存成本最高的执行步骤,并可视化 GPU 和 CPU 之间的工作负载分布。PyTorch 1.10 包括以下主要功能:增强型内存视图:这有助于用户更好地了解内存使用;
增强型内核视图:附加列显示网格和块大小以及每个线程共享内存使用和寄存器的情况;
分布式训练:Gloo 现在支持分布式训练工作;
TensorCore:该工具显示 Tensor Core(TC) 的使用,并为数据科学家和框架开发人员提供建议;
NVTX:对 NVTX markers 的支持是从旧版 autograd profiler 移植过来的;
支持移动设备分析:PyTorch profiler 现在与 TorchScript 、移动后端能够更好的集成,支持移动工作负载的跟踪收集。
去年,PyTorch 官方发布了对 Android Neural Networks API (NNAPI) 的原型支持。PyTorch1.10 版本增加了更多的操作,包括在加载时对形状的支持,以及在主机上运行模型进行测试的能力。对于此次 PyTorch 的更新,网友也不仅赞叹:「PyTorch 团队的出色工作,融合和 profiler 工作,非常酷!」关于 PyTorch1.10 版本的更新,更多信息请参考:Github: https://github.com/pytorch/pytorch/releases/tag/v1.10.0https://pytorch.org/blog/pytorch-1.10-released/https://www.marktechpost.com/2021/10/21/pytorch-releases-version-1-10-with-updates-on-cuda-graphs-apis/