PyTorch 1.0发布,JIT、全新的分布式库、C++前端

 此版本的主要亮点包括 JIT 编译、全新并且更快的分布式库与 C++ 前端等。

JIT 编译器

JIT(Just-In-Time)是一组编译工具,用于弥合 PyTorch 研究与生产之间的差距。

它允许创建可以在不依赖 Python 解释器的情况下运行的模型,并且可以更积极地进行优化。使用程序注解可以将现有模型转换为 PyTorch 可以直接运行的 Python 子集 Torch Script。模型代码仍然是有效的 Python 代码,可以使用标准的 Python 工具链进行调试。

PyTorch 1.0 提供了 torch.jit.trace 和 torch.jit.script 两种方式使现有代码与 JIT 兼容。一经注解,Torch Script 代码便可以被积极地优化,并且可以被序列化以在新的 C++ API 中使用,并且 C++ API 不依赖于 Python。

# Write in Python, run anywhere!
@torch.jit.script
def RNN (x, h, W_h, U_h, b_h):
y = []
for t in range (x.size (0)):
h = torch.tanh (x[t] @ W_h + h @ U_h + b_h)
y += [h]
return torch.stack (y), h
全新并且更快的分布式库

torch.distributed 软件包和 torch.nn.parallel.DistributedDataParallel 模块采用了重新设计的全新分布式库,亮点包括:

新的 torch.distributed 是性能驱动的,并且对所有后端完全异步操作,包括:Gloo、NCCL 和 MPI。

显着的分布式数据并行性能改进,尤其适用于网络较慢的主机,如基于以太网的主机。

为 torch.distributed 包中的所有分布式集合操作添加异步支持。

在 Gloo 后端添加了一些 CPU 操作:send、recv、reduce、all_gather、gather 与 scatter。

在 NCCL 后端添加 barrier 操作。

在 NCCL 后端添加 new_group 支持。

C++ 前端

C++ 前端是 PyTorch 后端的纯 C++ 接口,它遵循已建立的 Python 前端的 API 和体系结构,旨在实现高性能、低延迟和裸机 C++ 应用的研究。它提供了 torch.nn、torch.optim、torch.data 和 Python 前端的其它组件的等价物。下边是两种语言前端的简单比较:

python

import torch
model = torch.nn.Linear (5, 1)
optimizer = torch.optim.SGD (model.parameters (), lr=0.1)
prediction = model.forward (torch.randn (3, 5))
loss = torch.nn.functional.mse_loss (prediction, torch.ones (3, 1))
loss.backward ()
optimizer.step ()
C++

#include <torch/torch.h>

torch::nn::Linear model (5, 1);
torch::optim::SGD optimizer (model->parameters (), /*lr=*/0.1);
torch::Tensor prediction = model->forward (torch::randn ({3, 5}));
auto loss = torch::mse_loss (prediction, torch::ones ({3, 1}));
loss.backward ();
optimizer.step ();
注意,目前 C++ API 还处于 unstable 阶段。

此外还有一系列更新信息,详情查看发布公告。

下载地址:

Source code (zip)

Source code (tar.gz)

发表评论

相关文章