我们推出了 TorchRec 的 beta 版本以及当前 PyTorch 领域库的众多改进,与 PyTorch 1.11 版本一同发布。这些更新展示了我们致力于开发跨所有领域的通用和可扩展的 API,以使我们的社区更容易在 PyTorch 上构建生态系统项目。亮点包括:
- TorchRec,一个用于推荐系统的 PyTorch 领域库,现已提供 beta 版本。在 GitHub 上查看。
- TorchAudio - 添加了基于 Enformer 和 RNN-T 的模型和配方,以支持流式 ASR 模型的完整开发生命周期。请在此处查看发布说明。
- TorchText - 添加了对 RoBERTa 和 XLM-R 模型的 beta 支持,字节级 BPE 分词器和由 TorchData 支持的文本数据集。请在此处查看发布说明。
- TorchVision - 添加了 4 个新的模型系列和 14 个新的分类数据集,例如 CLEVR、GTSRB、FER2013。请参阅发布说明。
TorchRec 0.1
几周前我们宣布了 TorchRec,今天我们很高兴发布其 beta 版本。回顾一下,TorchRec 是一个用于推荐系统的 PyTorch 领域库。这个新库提供了常见的稀疏性和并行性原语,使研究人员能够构建最先进的个性化模型并将它们部署到生产环境中。TorchRec 被用于训练一个 1250 亿参数的模型,并于 2022 年 1 月投入生产。
尤其是库包括:
- 嵌入包和锯齿形张量等建模原语,这些原语可以轻松编写大型、高性能的多设备/多节点模型,使用混合数据并行性和模型并行性。
- 优化了 RecSys 内核,由 FBGEMM 提供支持,包括对稀疏和量化操作的支持。
- 一种可以采用多种不同策略(包括数据并行、表并行、行并行、表行并行和列并行)对嵌入表进行分区的分片器。
- 一种可以自动生成针对模型优化的分片计划的规划器。
- 通过流水线重叠数据加载设备传输(复制到 GPU)、设备间通信(输入分布式)和计算(正向、反向)以提高性能。
- 支持 GPU 推理。
- 常见的推荐系统模块,如模型和公共数据集(Criteo & Movielens)。
请在此处查看 TorchRec 公告帖子,视频教程在此处,安装说明在此处,通过此教程体验该功能,并参考此处参考文档。
TorchAudio 0.11
TorchAudio:音频和语音处理的构建模块
我们发表了一篇论文,TorchAudio:音频和语音处理的构建模块,描述了 TorchAudio 库的概述。如果您在研究中发现 TorchAudio 很有用,请帮助我们通过引用我们的论文与社区分享。
(Beta) RNN-T & (原型) Emformer 模型和配方
Emformer 是一种高效的基于记忆变换器的流式声学模型,在低延迟、资源受限的场景中,如设备端应用中,已经展示了最先进的流式语音识别(ASR)性能(参考文献:https://arxiv.org/abs/2010.10759)。
TorchAudio v0.11 版本包含以下测试功能:
- Emformer 的实现(文档)
- 基于 Emformer 的转录网络的循环神经网络变换器(RNN-T)流式 ASR 模型(文档)
- 支持 TorchScript 的 RNN-T 束搜索解码器(文档)
- LibriSpeech Emformer RNN-T 训练配方(GitHub)以及相应的预训练流式 ASR 推理管道(文档)
此外,还有来自夜间构建或主分支的可用原型功能。
- 基于 MuST-C 和 TED-LIUM3 数据集训练的培训食谱。(GitHub)
- 与食谱对应的预训练管道。(文档)
- 演示如何使用 RNN-T Emformer 模型进行在线语音识别的教程。(文档)
这些功能共同覆盖了流式 ASR 模型的全生命周期,从定义到训练和推理,并使用户能够轻松开发自己的基于 Emformer 和 RNN-T 的模型。
特别感谢杨阳、贾伊·马哈德卡和吉尔·凯伦对他们的代码贡献和指导。
(Beta) HuBERT 预训练模型
HuBERT 模型的掩码预测训练需要掩码 logits、未掩码 logits 和特征范数作为输出。logits 用于交叉熵损失,特征范数用于惩罚损失。此次发布添加了 HuBERTPretrainModel 和相应的工厂函数(hubert_pretrain_base、hubert_pretrain_large 和 hubert_pretrain_xlarge),以支持从头开始训练。
(原型) CTC 光束搜索解码器
在最近版本中,TorchAudio 增加了对基于 CTC 损失的 ASR 模型微调的支持。新增的推理时间 CTC 波束搜索解码器使得可以使用 TorchAudio 工具运行端到端的 ASR 评估。
TorchAudio 中的 CTC 解码器支持可定制的带词典约束的波束搜索解码,同时也提供了可选的 KenLM 语言模型支持。
更多详情,请查看 API 教程。此原型功能可通过夜间构建获得。
(原型)流式 API
TorchAudio 最初是简单的音频 I/O API,用于补充 PyTorch。随着最近添加了 ASR 模型和训练食谱,该项目收到了支持高级应用开发的需求。
流式 API 使得在线推理中开发和测试模型变得简单。它底层使用 ffmpeg,并能够从在线服务和硬件设备读取媒体,以增量方式解码媒体,并应用过滤器进行预处理。
请查看 API 教程和文档。还有流式 ASR 教程和设备流式 ASR 教程。此功能从夜间版本中可用。请参考 pytorch.org 了解如何安装夜间构建。
TorchText 0.12
(Beta) RoBERTa 和 XLM-R 模型
TorchText 已添加对预训练的 RoBERTa 和 XLM-R 模型的支持。这将允许用户使用 TorchText 训练基于标准 NLP 任务的端到端 Transformer 编码器模型。
更具体地说:
- 这些模型是 torchscriptable 的,因此可以用于生产用例。
- 模型 API 允许用户轻松地将定制的特定任务头部与预训练的编码器附加在一起。
- 该 API 还配备了数据预处理转换,以匹配预训练权重和模型配置。
我们添加了一个教程,以演示使用预训练的 XLM-R 基础架构进行 SST-2 二分类文本任务的示例。
如需有关模型 API 和使用示例的更多详细信息,请参阅文档。
(Beta) 字节级 BPE 分词器
TorchText 已添加对字节级 BPE 分词器的支持,该分词器用于 GPT-2。此分词器也用于对之前描述的预训练 RoBERTa 模型的输入进行分词。除了 RoBERTa 词汇表外,用户还可以加载自己的自定义 BPE 词汇表以使用该分词器。此外,分词器完全支持 torchscript,因此可用于生产用例。有关模型 API 和使用示例的详细信息,请参阅文档。
(Beta) 基于 TorchData 的文本数据集
TorchText 通过将旧式可迭代数据集迁移到 TorchData 的 DataPipes 而现代化了其数据集。TorchData 是一个库,它提供模块化/可组合的原语,使用户能够在高效的数据管道中加载数据和转换数据。
这些 DataPipes 与 PyTorch DataLoader 无缝兼容,将启用自动分片等新功能。用户现在可以轻松地使用用户定义的函数和转换以函数式编程风格进行数据操作和预处理。由 DataPipes 支持的数据集还支持标准流程控制,如批处理、收集、打乱和分桶。
总体而言,DataPipes 以 Pythonic 和灵活的方式为模型训练提供了全面的数据预处理和张量化需求体验。我们添加了一个教程,以展示使用现代化数据集进行二进制文本分类的数据处理管道。
您可以在官方文档中了解更多关于 TorchData DataPipe API 的信息。
TorchVision 0.12
新模型
最新版本中发布了四个新的模型系列,同时还包括了其变体的预训练权重。
#1 目标检测
FCOS 是一个流行的、全卷积的、无锚框的目标检测模型。在本版本中,我们包括了一个社区贡献的模型实现以及预训练权重。该模型在 COCO train2017 上进行了训练,可以使用以下方式使用:
import torch
from torchvision import models
x = [torch.rand(3, 224, 224)]
fcos = models.detection.fcos_resnet50_fpn(pretrained=True).eval()
predictions = fcos(x)
预训练模型在 COCO val2017 数据集上的 AP 值为 39.2(更多详情请见#4961)。
感谢 Hu Ye 和 Zhiqiang Wang 对模型实现和初始训练的贡献。这是很长时间以来的第一个社区贡献模型,鉴于其成功,我们决定利用这个过程的学习经验,创建新的模型贡献指南。
#2 光流支持及 RAFT 模型
TorchVision 现在支持光流!光流模型试图预测视频中的运动:给定两个连续帧,模型预测第一帧中的每个像素在第二帧中的最终位置。请查看我们关于光流的新教程!
我们实现了一个与 torchscript 兼容的 RAFT 模型,并带有预训练权重(包括正常版本和“小型”版本),同时增加了对光流模型的训练和评估支持。我们的训练脚本支持跨进程和节点的分布式训练,比原始实现快得多。我们还增加了 5 个新的光流数据集:飞椅、飞行物、Sintel、Kitti 和 HD1K。
#3. 图像分类
视觉 Transformer(ViT)和 ConvNeXt 是两种流行的架构,可以用作图像分类器或作为下游视觉任务的骨干网络。在本版本中,我们包括了它们分类变体的 8 个预训练权重。这些模型在 ImageNet 上进行了训练,可以使用如下方式:
import torch
from torchvision import models
x = torch.rand(1, 3, 224, 224)
vit = models.vit_b_16(pretrained=True).eval()
convnext = models.convnext_tiny(pretrained=True).eval()
predictions1 = vit(x)
predictions2 = convnext(x)
以下是在 ImageNet 验证集上获得的预训练模型的准确率:
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 |
以上模型已使用我们新训练方案的调整版本进行训练,这使得我们能够提供比原始论文中更高的准确率模型。
#4. GPU 视频解码
在本版本中,我们在视频读取 API 中添加了对 GPU 视频解码的支持。要使用硬件加速解码,我们只需将 cuda 设备传递给视频读取 API,如下所示:
import torchvision
reader = torchvision.io.VideoReader(file_name, device="cuda:0")
for frame in reader:
print(frame)
我们还支持在读取视频前跳转到任意帧或关键帧,如下所示:
reader.seek(seek_time)
新数据集
我们已实现 14 个新的分类数据集:CLEVR、GTSRB、FER2013、SUN397、Country211、Flowers102、fvgc_aircraft、OxfordIIITPet、DTD、Food 101、Rendered SST2、Stanford cars、PCAM 和 EuroSAT。
作为我们支持光流的工作的一部分(详情见上文),我们还添加了 5 个新的光流数据集:Flying Chairs、Flying Things、Sintel、Kitti 和 HD1K。
其他更新
- 新的文档布局:每个函数/类现在都有单独的页面进行文档说明,这有助于在模块页面中节省空间,并便于发现提议的 API。例如,您可以比较我们之前的文档与新的文档。如果您有任何反馈,请告诉我们!
- 新的模型贡献指南已发布,这是在 FCOS 模型成功由社区贡献之后。这些指南旨在为任何希望提出、实现和训练新模型的人提供一个模型贡献过程的概述。
- 即将推出的原型 API - 我们目前正在开发一个原型 API,该 API 在所有模型构建方法中增加了多权重支持。这将使我们能够提供多个预训练权重,以及与它们的元数据和推理转换相关联。该 API 仍在审查中,因此尚未包含在发布中,但您可以在我们的博客文章中了解更多信息,并在专门的 GitHub 问题中提供您的反馈。
- 我们对弃用策略的变更 - 之前,torchvision 几乎从不移除弃用的 API。为了与 PyTorch 核心保持一致性和连贯性,我们正在更新我们的弃用策略。我们现在遵循 2 个版本的弃用周期:弃用的 API 将在 2 个版本中引发警告,并在之后被移除。为了反映这些变化并使过渡更加平稳,我们决定:
- 移除所有在 v0.8 或之前被弃用的 API,该版本发布于 1.5 年前。
- 更新其他所有弃用 API 的移除时间表至 v0.14,以反映从现在开始实施的新的 2 个周期政策。
Captum 0.5
Captum 是一个用于模型可解释性的 PyTorch 库。对于这次发布,我们扩展了 Captum,增加了有影响力的实例,并支持基于相似性的影响以及新型算法 TracIn 及其变体。TracIn 变体通过随机投影为全连接层提供更快的影响分数近似。
更具体地说,Captum 中的新“影响”子部分包括:
- SimilarityInfluence 通过使用默认(余弦或欧几里得)或自定义用户定义的度量来计算测试示例和训练示例之间的相似度分数,针对给定的模型层。
- TracInCP 通过测试示例和训练示例的损失梯度相对于模型参数的点积相似度,近似每个训练示例对给定测试示例的有影响力分数。注意,如果我们使用训练示例作为测试示例,则计算自影响。以下描述的方法及其变体也返回 top-k 支持者和反对者,分别是 top-k 最大的正负有影响力示例。
- TracInCPFast 是 TracInCP 的近似,它避免了计算与大型参数矩阵的梯度。它根据训练和测试示例中最后一层全连接层激活与该层损失梯度的点积来近似影响分数。
- TracInCPFastRandProj 使用如 annoy 这样的最近邻近似库来计算训练和测试量之间的点积。为了减少层激活和相应梯度的维度,此方法还允许使用随机投影矩阵将这些向量投影到低维空间。
更多关于影响实例实现的信息可以在我们的 GitHub 页面和教程中找到。
感谢阅读,如果您对这些更新感兴趣并想加入 PyTorch 社区,我们鼓励您加入讨论论坛和 GitHub 问题。要获取 PyTorch 的最新消息,请关注我们的 Twitter、Medium、YouTube 和 LinkedIn。
喝彩!
PyTorch 团队