今天,我们宣布 PyTorch 1.4 发布,同时 PyTorch 领域库也进行了更新。这些发布建立在 NeurIPS 2019 的公告基础上,当时我们宣布了 PyTorch Elastic 的可用性、一种用于图像和视频的新分类框架,以及 Preferred Networks 加入 PyTorch 社区。对于参加 NeurIPS 研讨会的人,内容可以在此处找到。
PyTorch 1.4
PyTorch 1.4 版本增加了新功能,包括为 PyTorch Mobile 进行细粒度构建级别定制的能力,以及新的实验性功能,包括对模型并行训练和 Java 语言绑定的支持。
PyTorch Mobile – 构建级别定制
继 1.3 版本中 PyTorch Mobile 开源之后,PyTorch 1.4 增加了额外的移动支持,包括在细粒度级别自定义构建脚本的能力。这使得移动开发者可以通过仅包含其模型使用的操作符来优化库大小,从而显着减少其设备上的占用空间。初步结果显示,例如,定制的 MobileNetV2 比预构建的 PyTorch 移动库小 40% 到 50%。您可以在此处了解更多关于如何创建自己的自定义构建的信息,并且一如既往,请在 PyTorch 论坛上与社区互动,提供您的任何反馈。
选择性编译 MobileNetV2 所需操作符的示例代码片段
# Dump list of operators used by MobileNetV2:
import torch, yaml
model = torch.jit.load('MobileNetV2.pt')
ops = torch.jit.export_opnames(model)
with open('MobileNetV2.yaml', 'w') as output:
yaml.dump(ops, output)
# Build PyTorch Android library customized for MobileNetV2:
SELECTED_OP_LIST=MobileNetV2.yaml scripts/build_pytorch_android.sh arm64-v8a
# Build PyTorch iOS library customized for MobileNetV2:
SELECTED_OP_LIST=MobileNetV2.yaml BUILD_PYTORCH_MOBILE=1 IOS_ARCH=arm64 scripts/build_ios.sh
分布式模型并行训练(实验性)
随着 RoBERTa 等模型的规模持续增加到数十亿参数,模型并行训练变得越来越重要,以帮助研究人员突破极限。此版本提供了分布式 RPC 框架来支持分布式模型并行训练。它允许远程运行函数和引用远程对象而不复制实际数据,并提供 autograd 和优化器 API,以透明地在 RPC 边界上运行反向传播和更新参数。
要了解有关此功能的 API 和设计的更多信息,请参阅以下链接
有关完整教程,请参阅以下链接
一如既往,您可以在论坛上与社区成员联系并进行更多讨论。
Java 绑定(实验性)
除了支持 Python 和 C++,此版本还增加了对 Java 绑定的实验性支持。基于 PyTorch Mobile 中为 Android 开发的接口,新的绑定允许您从任何 Java 程序调用 TorchScript 模型。请注意,此版本中 Java 绑定仅适用于 Linux,且仅用于推理。我们预计在后续版本中会扩展支持。请参阅下面的代码片段,了解如何在 Java 中使用 PyTorch
Module mod = Module.load("demo-model.pt1");
Tensor data =
Tensor.fromBlob(
new int[] {1, 2, 3, 4, 5, 6}, // data
new long[] {2, 3} // shape
);
IValue result = mod.forward(IValue.from(data), IValue.from(3.0));
Tensor output = result.toTensor();
System.out.println("shape: " + Arrays.toString(output.shape()));
System.out.println("data: " + Arrays.toString(output.getDataAsFloatArray()));
在此处了解更多关于如何在 Java 中使用 PyTorch 的信息:此处,并在此处查看完整的 Javadocs API 文档:此处。
有关完整的 1.4 版本说明,请参阅此处。
领域库
PyTorch 领域库,如 torchvision、torchtext 和 torchaudio,通过常见数据集、模型和转换来补充 PyTorch。我们很高兴在 PyTorch 1.4 核心版本发布的同时,分享所有三个领域库的新版本。
torchvision 0.5
torchvision 0.5 的改进主要集中在增加对生产部署的支持,包括量化、TorchScript 和 ONNX。其中一些亮点包括
- torchvision 中的所有模型现在都支持 TorchScript,使其更容易部署到非 Python 生产环境中
- ResNets、MobileNet、ShuffleNet、GoogleNet 和 InceptionV3 现在具有量化版本和预训练模型,并且还包括量化感知训练的脚本。
- 与微软团队合作,我们增加了对包括 Mask R-CNN 在内的所有模型的 ONNX 支持。
在此处了解更多关于 torchvision 0.5 的信息:此处。
torchaudio 0.4
torchaudio 0.4 的改进主要集中在增强目前可用的转换、数据集和后端支持。亮点包括
- SoX 现在是可选的,并且一个新的可扩展后端调度机制将 SoundFile 公开为 SoX 的替代方案。
- 数据集接口已统一。这使得能够添加两个大型数据集:LibriSpeech 和 Common Voice。
- 现在可以使用新的滤波器,如双二阶滤波器,数据增强,如时间遮蔽和频率遮蔽,转换,如 MFCC、增益和抖动,以及新的特征计算,如增量。
- 变换现在支持批量处理并可进行 Jit 编译。
- 提供了一个带有语音活动检测的交互式语音识别演示,可供实验。
在此处了解更多关于 torchaudio 0.4 的信息:此处。
torchtext 0.5
torchtext 0.5 主要关注数据集加载器 API 的改进,包括与核心 PyTorch API 的兼容性,但也增加了对无监督文本分词的支持。亮点包括
- 增加了 SentencePiece 绑定,用于无监督文本分词。
- 增加了一个新的无监督学习数据集——enwik9。
- 对 PennTreebank、WikiText103、WikiText2、IMDb 进行了修订,使其与 torch.utils.data 兼容。这些数据集在一个实验性文件夹中,我们欢迎您的反馈。
在此处了解更多关于 torchtext 0.5 的信息:此处。
我们感谢整个 PyTorch 团队和社区为这项工作做出的所有贡献。
干杯!
PyTorch 团队