今天,我们宣布 PyTorch 1.4 的可用性,以及 PyTorch 领域库的更新。这些发布基于 NeurIPS 2019 的公告,我们在那里分享了 PyTorch Elastic 的可用性,这是一个新的图像和视频分类框架,以及 Preferred Networks 加入 PyTorch 社区。对于参加了 NeurIPS 研讨会的人来说,内容可以在这里找到。
PyTorch 1.4
PyTorch 1.4 版本增加了新功能,包括对 PyTorch Mobile 进行细粒度构建级别定制的功能,以及包括对模型并行训练和 Java 语言绑定支持的新实验特性。
PyTorch Mobile - 构建级别定制
在 PyTorch Mobile 1.3 版本开源之后,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 框架,以支持分布式模型并行训练。它允许远程运行函数并引用远程对象,而无需复制真实数据,并提供自动微分和优化器 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 生产环境中
- ResNet、MobileNet、ShuffleNet、GoogleNet 和 InceptionV3 现在都有量化版本,并附带预训练模型,还包括量化感知训练的脚本。
- 与微软团队合作,我们为所有模型添加了 ONNX 支持,包括 Mask R-CNN。
在此处了解 torchvision 0.5 的更多信息。
torchaudio 0.4
torchaudio 0.4 的改进主要集中在增强现有转换、数据集和后端支持。亮点包括:
- SoX 现在为可选,新的可扩展后端调度机制暴露 SoundFile 作为 SoX 的替代方案。
- 数据集的接口已统一。这使得可以添加两个大型数据集:LibriSpeech 和 Common Voice。
- 现在提供了新的过滤器,如二阶滤波器,数据增强如时间和频率掩码,变换如 MFCC、增益和抖动,以及新的特征计算如 delta 等。
- 变换现在支持批量操作,并且是可缓存的。
- 可用于实验的交互式语音识别演示,带有语音活动检测功能。
在此处了解更多关于 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 团队