跳转到主要内容
博客

PyTorch 1.4 发布,领域库更新

作者: 2020年1月15日2024年11月16日暂无评论

今天,我们宣布 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:https://github.com/pytorch/java-demo,并在此处查看完整的 Javadocs API 文档:https://pytorch.ac.cn/javadoc/1.4.0/

有关 1.4 完整发布说明,请参阅此处

领域库

torchvision、torchtext 和 torchaudio 等 PyTorch 领域库通过常见的数据集、模型和转换来补充 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 的信息:https://github.com/pytorch/vision/releases

torchaudio 0.4

torchaudio 0.4 的改进侧重于增强当前可用的转换、数据集和后端支持。亮点包括:

  • SoX 现在是可选的,一个新的可扩展后端调度机制将 SoundFile 作为 SoX 的替代方案。
  • 数据集的接口已统一。这使得能够添加两个大型数据集:LibriSpeech 和 Common Voice。
  • 现在可以使用新的滤波器,如 biquad;数据增强,如时间和频率掩码;转换,如 MFCC、增益和抖动;以及新的特征计算,如 deltas。
  • 转换现在支持批处理并且可 JIT 编译。
  • 提供了一个带有语音活动检测的交互式语音识别演示用于实验。

在此处了解更多关于 torchaudio 0.4 的信息:https://github.com/pytorch/audio/releases

torchtext 0.5

torchtext 0.5 主要侧重于改进数据集加载器 API,包括与核心 PyTorch API 的兼容性,但也增加了对无监督文本分词的支持。亮点包括:

  • 增加了 SentencePiece 绑定用于无监督文本分词。
  • 增加了一个新的无监督学习数据集 – enwik9。
  • 修订了 PennTreebank、WikiText103、WikiText2、IMDb,使其与 torch.utils.data 兼容。这些数据集位于实验文件夹中,我们欢迎您的反馈。

在此处了解更多关于 torchtext 0.5 的信息:https://github.com/pytorch/text/releases

我们感谢整个 PyTorch 团队和社区为这项工作做出的所有贡献。

干杯!

PyTorch 团队