PyTorch 作为 Facebook 开发和维护的一个开源框架,近来的发展势头相当强劲。自 2017 年初首发以来,PyTorch 灵活、动态的编程环境及对用户友好的界面使其非常适用于快速实验,因此在社区内迅速发展壮大。
2018 年 12 月,PyTorch 1.0 正式版发布,解决了包括可重用、性能、编程语言和可扩展性等在内的一系列问题。
今日,PyTorch 发布最新版本,做了一系列更新,包括正式支持 Transformer、TensorBoard 等。
正式支持 Transformer 与 TensorBoard
基于论文《Attention is All You Need》,PyTorch 1.2 版本加入了标准的 nn.Transformer 模块。nn.Transformer 模块完全依赖注意机制描述输入和输出之间的全局依赖关系。nn.Transformer 模块的组件是单独设计的,以便于被分开使用。例如,没有更大的 nn.Transformer 的情况下,nn.TransformerEncoder 可被自身使用。新的 API 包括:
现在,简单的输入 from torch.untils.tensorboard import SummaryWriter 就能启动 TensorBoard,它已经不再是实验版了,这就表示 PyTorch 终于正式支持 TensorBoard 啦。
一旦我们安装了 TensorBoard,PyTorch 的这项新 API 就会将模型和指标记录到 TensorBoard UI 的目录中,并进行可视化。它对所有基于 PyTorch、Caffe 2 的模型和张量都支持数量、图像、直方图、图和嵌入可视化。
其它重要更新
新的 TorchScript API
PyTorch 1.2 版本为 nn.Modules 转换成 ScriptModules 提供了新的、易用的 API。简单用例如下:
torch.jit.script() 将尝试以递归形式编译指定的 nn.Module,其中包括调用自 forward() 的任何子模块或方法。相关变更情况以及如何迁移详见《migration guide》。
提升 TorchScript Python 语言覆盖范围
在 PyTorch 1.2 版本中,TorchScript 显著提升了自身对 Python 语言结构和 Python 标准库的支持。亮点包括如下:
提前返回、终止和继续;
基于迭代器的结构,如 for..in 回路、zip() 和 enumerate();
NamedTuples;
支持 math 和 string 库
支持大多数 Python 内部函数
扩展 Onnx 导出
通过与微软合作,PyTorch 1.2 版本全面支持导出 ONNX Opset 版本 7 (V1.2)、版本 8(v1.3)、版本 9(v1.4) 以及版本 10 (v1.5)。PyTorch 1.2 还增强了常量折叠通道(constant folding pass),以支持 ONNX 最新可用版本 Opset 10。此外,用户现在可以注册自己的符号(symbolic)以导出自定义操作,同时可以在导出时指定输入的动态维度。重大改进之处如下:
支持多个 Opsets 版本,包括 Opset 10 版本中导出 dropout、slice、flip 和 interpolate;
改进 ScriptModule,包括支持多输出、张量 factory 以及作为输入和输出的元组;
支持 10 多个额外的 PyTorch 操作符,包括导出自定义操作符。
参考链接:https://github.com/pytorch/pytorch/releases