PyTorch1.11发布:TorchData和functorch可用了!

机器学习算法工程师

共 2848字,需浏览 6分钟

 · 2022-03-15

点蓝色字关注“机器学习算法工程师

设为星标,干货直达!


近日, PyTorch 1.11发布。此版本由 434 位贡献者自 1.10 以来的 3,300 多个提交组成。除了 1.11,我们还发布了 TorchData 和 functorch 的 beta 版本。



其中


  • TorchData 是一个用于通用模块化数据加载原语的新库,用于轻松构建灵活和高性能的数据管道。https://github.com/pytorch/data

  • functorch 是一个向 PyTorch 添加可组合函数转换的库,类比谷歌的JAX,现已推出 beta 版。https://github.com/pytorch/functorch

  • 分布式数据并行 (DDP) 静态图优化在 stable 中可用。



TorchData

TorchData发布 Beta 版本。这是一个通用模块化数据加载原语库,用于轻松构建灵活且高性能的数据管道。根据社区反馈,我们发现现有的 DataLoader 将太多的功能捆绑在一起,难以扩展。此外,不同的用例通常必须一遍又一遍地重写相同的数据加载实用程序。这里的目标是通过称为“DataPipes”的 Iterable 样式和 Map 样式的构建块启用可组合的数据加载,这些构建块与 PyTorch 的 DataLoader 开箱即用。


DataPipe 在 Python 数据结构上接受一些访问函数,__iter__ 用于 IterDataPipe, __getitem__ 用于 MapDataPipe,并返回一个新的访问函数,并应用了轻微的转换。您可以将多个 DataPipes 链接在一起以形成执行所有必要数据转换的数据管道。


我们已经实现了 50 多个提供不同核心功能的 DataPipes,例如打开文件、解析文本、转换样本、缓存、混洗和批处理。对于有兴趣连接到云提供商(例如 Google Drive 或 AWS S3)的用户,fsspec 和 iopath DataPipes 将允许您这样做。该文档提供了每个 IterDataPipe 和 MapDataPipe 的详细解释和使用示例。


在此版本中,一些 PyTorch 域库已迁移其数据集以使用 DataPipes。在 TorchText 中,库提供的流行数据集是使用 DataPipes 实现的,其 SST-2 二进制文本分类教程的一部分演示了如何使用 DataPipes 为模型预处理数据。TorchVision(在夜间版本中提供)和 TorchRec 中还有其他使用 DataPipes 的数据集原型实现。您可以在此处找到更具体的示例。


TorchData 的文档现已上线。它包含一个教程,介绍如何使用 DataPipes、将它们与 DataLoader 一起使用以及实现自定义的。我们项目的 README 文件中描述了与 DataLoader 相关的常见问题解答和未来计划。


functorch

functorch 发布第一个 beta 版本。受到 Google JAX 的极大启发,functorch 是一个向 PyTorch 添加可组合函数转换的库。它旨在提供可组合的 vmap(矢量化)和 autodiff 转换,可与 PyTorch 模块和 PyTorch autograd 一起使用,并具有良好的渴望模式性能。


可组合的函数转换可以帮助解决当今在 PyTorch 中难以实现的许多用例:

  • 计算每样本梯度(或其他每样本数量)

  • 在单台机器上运行模型集合

  • 在 MAML 的内循环中有效地将任务批处理在一起

  • 有效地计算雅可比矩阵和黑森矩阵以及批量矩阵


组合 vmap(矢量化)、vjp(反向模式 AD)和 jvp(正向模式 AD)转换使我们能够轻松地表达上述内容,而无需为每个转换设计单独的库。有关更多详细信息,请参阅我们的文档、教程和安装说明。


分布式训练:DDP静态图

DDP 静态图假设您的模型在每次迭代中都使用相同的一组已使用/未使用的参数,因此它可以确定性地了解状态,例如哪些钩子将触发、钩子将触发多少次以及第一次迭代后的梯度计算就绪顺序。静态图在第一次迭代中缓存这些状态,因此它可以支持 DDP 在以前的版本中无法支持的功能,例如,支持在相同参数上的多个激活检查点,无论是否有未使用的参数。当存在未使用的参数时,静态图功能也会应用性能优化,例如,它避免遍历图以在每次迭代中搜索未使用的参数,并启用动态分桶顺序。DDP 静态图中的这些优化为一些推荐模型带来了 10% 的 QPS 增益。


要启用静态图,只需在 DDP API 中设置 static_graph=True ,如下所示:

ddp_model = DistributedDataParallel(model, static_graph=True)

更多内容参见文档(https://pytorch.org/docs/master/generated/torch.nn.parallel.DistributedDataParallel.html)和教程(https://pytorch.org/tutorials/intermediate/ddp_tutorial.html)。



这次跟随PyTorch1.11的发布,torchvision也发布了0.12版本:https://github.com/pytorch/vision/releases/tag/v0.12.0。新支持更多模型:

  • 分类模型:Vision Transformer (ViT) and ConvNeXt.

  • 检测模型:FCOS

  • 光流模型:RAFT

Model

Acc@1

Acc@5

vit_b_16

81.072

95.318

vit_b_32

75.912

92.466

vit_l_16

79.662

94.638

vit_l_32

76.972

93.07

convnext_tiny

82.52

96.146

convnext_small

83.616

96.65

convnext_base

84.062

96.87

convnext_large

84.414

96.976


推荐阅读

深入理解生成模型VAE

DropBlock的原理和实现

SOTA模型Swin Transformer是如何炼成的!

有码有颜!你要的生成模型VQ-VAE来了!

集成YYDS!让你的模型更快更准!

辅助模块加速收敛,精度大幅提升!移动端实时的NanoDet-Plus来了!

SimMIM:一种更简单的MIM方法

SSD的torchvision版本实现详解


机器学习算法工程师


                                    一个用心的公众号


浏览 100
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报