计算机视觉研究院专栏
作者:Edison_G
广受人们欢迎的深度学习框架 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(原型版)。
PyTorch 1.10 最新特性
前端 API
使用 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
(测试版)PyTorch Profiler 的目标是针对时间或内存成本最高的执行步骤,并可视化 GPU 和 CPU 之间的工作负载分布。PyTorch 1.10 包括以下主要功能:
增强型内存视图:这有助于用户更好地了解内存使用;
增强型内核视图:附加列显示网格和块大小以及每个线程共享内存使用和寄存器的情况;
分布式训练:Gloo 现在支持分布式训练工作;
TensorCore:该工具显示 Tensor Core(TC) 的使用,并为数据科学家和框架开发人员提供建议;
NVTX:对 NVTX markers 的支持是从旧版 autograd profiler 移植过来的;
支持移动设备分析:PyTorch profiler 现在与 TorchScript 、移动后端能够更好的集成,支持移动工作负载的跟踪收集。
支持 Android NNAPI
去年,PyTorch 官方发布了对 Android Neural Networks API (NNAPI) 的原型支持。PyTorch1.10 版本增加了更多的操作,包括在加载时对形状的支持,以及在主机上运行模型进行测试的能力。
此外,迁移学习已经添加到对象检测示例中。
对于此次 PyTorch 的更新,网友也不仅赞叹:「PyTorch 团队的出色工作,融合和 profiler 工作,非常酷!」
关于 PyTorch1.10 版本的更新,更多信息请参考:
Github: https://github.com/pytorch/pytorch/releases/tag/v1.10.0
参考链接:
https://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/
© THE END
转载请联系本公众号获得授权
计算机视觉研究院学习群等你加入!
计算机视觉研究院主要涉及深度学习领域,主要致力于人脸检测、人脸识别,多目标检测、目标跟踪、图像分割等研究方向。研究院接下来会不断分享最新的论文算法新框架,我们这次改革不同点就是,我们要着重”研究“。之后我们会针对相应领域分享实践过程,让大家真正体会摆脱理论的真实场景,培养爱动手编程爱动脑思考的习惯!
扫码关注
计算机视觉研究院
公众号ID|ComputerVisionGzq
学习群|扫码在主页获取加入方式
往期推荐
基础干货:高效卷积,降内存提速度保精度(附论文下载)
Micro-YOLO:探索目标检测压缩模型的有效方法(附论文下载)
字节跳动新框架:图片中遮挡关系如何判断?新方法刷新SOTA(附源代码)
Apple团队:轻量级、通用且移动友好的网络框架(附论文下载)
多目标检测:基于YoloV4优化的多目标检测(附论文下载)
Fast YOLO:用于实时嵌入式目标检测(附论文下载)
目标检测干货 | 多级特征重复使用大幅度提升检测精度(文末附论文下载)
多尺度深度特征(下):多尺度特征学习才是目标检测精髓(论文免费下载)
多尺度深度特征(上):多尺度特征学习才是目标检测精髓(干货满满,建议收藏)