我们很高兴地宣布 PyTorch 1.11 (发行说明) 发布。此版本包含了自 1.10 以来的 3,300 多个提交,由 434 位贡献者完成。除了 1.11,我们还将发布 TorchData 和 functorch 的 Beta 版本。
总结
- TorchData 是一个新的库,提供通用的模块化数据加载原语,用于轻松构建灵活且高性能的数据管道。在 GitHub 上查看。
- functorch,一个为 PyTorch 添加可组合函数转换的库,现已推出 Beta 版。在 GitHub 上查看。
- 分布式数据并行 (DDP) 静态图优化已稳定可用。
介绍 TorchData
我们很高兴推出 TorchData 的 Beta 版本。这是一个提供通用模块化数据加载原语的库,用于轻松构建灵活且高性能的数据管道。根据社区反馈,我们发现现有的 DataLoader 将过多的功能捆绑在一起,并且难以扩展。此外,不同的用例通常需要一遍又一遍地重写相同的数据加载工具。我们的目标是,通过名为“DataPipes”的可迭代风格和映射风格构建块实现可组合的数据加载,这些构建块可以与 PyTorch 的 DataLoader 完美配合。
一个 DataPipe
接受一个对 Python 数据结构的访问函数,IterDataPipe
为 __iter__
,MapDataPipe
为 __getitem__
,并返回一个应用了轻微转换的新访问函数。您可以将多个 DataPipe 链接起来,形成一个执行所有必要数据转换的数据管道。
我们已经实现了 50 多个 DataPipe,提供不同的核心功能,例如打开文件、解析文本、转换样本、缓存、混洗和批处理。对于有兴趣连接到云服务提供商(如 Google Drive 或 AWS S3)的用户,fsspec 和 iopath DataPipe 将允许您这样做。文档提供了每个 IterDataPipe 和 MapDataPipe 的详细解释和使用示例。
在此版本中,一些 PyTorch 领域库已将其数据集迁移到使用 DataPipe。在 TorchText 中,该库提供的流行数据集 是使用 DataPipe 实现的,并且 其 SST-2 二进制文本分类教程的一个部分 演示了如何使用 DataPipe 为您的模型预处理数据。在 TorchVision(可在每夜版本中获得) 和 TorchRec 中也有使用 DataPipe 的数据集的其他原型实现。
TorchData 的文档 现已上线。它包含一个教程,涵盖如何使用 DataPipe、如何将它们与 DataLoader 配合使用以及如何实现自定义 DataPipe。有关 DataLoader 的常见问题和未来计划在 我们项目的 README 文件 中进行了描述。
介绍 functorch
我们很高兴地宣布 functorch 的首个 Beta 版本。受 Google JAX 的启发,functorch 是一个为 PyTorch 添加可组合函数转换的库。它旨在提供可组合的 vmap(向量化)和自动微分转换,这些转换可与 PyTorch 模块和 PyTorch 自动微分配合使用,并具有良好的即时模式性能。
可组合函数转换可以帮助解决 PyTorch 中目前难以实现的许多用例:
- 计算每个样本的梯度(或每个样本的其他量)
- 在一台机器上运行模型集成
- 在 MAML 的内循环中高效地批量处理任务
- 高效地计算雅可比矩阵和 Hessian 矩阵以及批量计算
组合 vmap(向量化)、vjp(反向模式 AD)和 jvp(正向模式 AD)转换使我们能够毫不费力地表达上述内容,而无需为每个任务设计一个单独的库。
分布式训练
(稳定)DDP 静态图
DDP 静态图假设您的模型在每次迭代中都使用相同的使用/未使用参数集,因此它可以确定性地知道状态,例如哪些钩子将触发,钩子将触发多少次以及第一次迭代后梯度计算的就绪顺序。静态图在第一次迭代中缓存这些状态,因此它可以支持 DDP 在以前版本中无法支持的功能,例如,支持对相同参数进行多个激活检查点,无论是否存在未使用参数。静态图功能还在存在未使用参数时应用性能优化,例如,它避免了每次迭代遍历图以搜索未使用参数,并启用了动态分桶顺序。DDP 静态图中的这些优化为某些推荐模型带来了 10% 的 QPS 增益。
要启用静态图,只需在 DDP API 中像这样设置 static_graph=True 即可
ddp_model = DistributedDataParallel(model, static_graph=True)
感谢阅读,如果您对这些更新感兴趣并希望加入 PyTorch 社区,我们鼓励您加入 讨论论坛 并 提交 GitHub issue。要获取 PyTorch 的最新消息,请在 Twitter、Medium、YouTube 和 LinkedIn 上关注我们。
干杯!
PyTorch 团队