我们很高兴地宣布 PyTorch 1.11 已发布(发行说明)。自 1.10 版以来,此版本包含 434 位贡献者提交的 3300 多个 commit。除了 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 领域库已将其数据集迁移到使用 DataPipes。在 TorchText 中,该库提供的流行数据集是使用 DataPipes 实现的,并且其 SST-2 二进制文本分类教程的一部分演示了如何使用 DataPipes 预处理模型数据。在 TorchVision(在 nightly release 中可用)和 TorchRec 中也有其他使用 DataPipes 的数据集原型实现。
TorchData 的文档现已上线。它包含一个教程,介绍了如何使用 DataPipes,如何将其与 DataLoader 配合使用,以及如何实现自定义 DataPipes。有关 DataLoader 的常见问题解答和未来计划,请参阅我们的项目 README 文件。
介绍 functorch
我们很高兴宣布 functorch 的首个 Beta 版发布。functorch 深受 Google JAX 的启发,是一个为 PyTorch 添加可组合函数变换的库。它旨在提供可组合的 vmap(向量化)和自动微分变换,这些变换可与 PyTorch 模块和 PyTorch 自动梯度配合使用,并具有良好的即时模式性能。
可组合函数变换可以帮助解决 PyTorch 中一些目前难以高效处理的用例:
- 计算每个样本的梯度(或每个样本的其他量)
- 在一台机器上运行模型集成
- 在 MAML 内部循环中高效地批量处理任务
- 高效计算 Jacobians 和 Hessians,以及批量计算
组合 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 问题。要获取 PyTorch 的最新消息,请在Twitter、Medium、YouTube和LinkedIn上关注我们。
干杯!
PyTorch 团队