Python 张量与动态神经网络 PyTorch 1.0 发布了.
此版本的主要亮点包括 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 后端添加 操作.
在 NCCL 后端添加 支持.
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)
来自: 开源中国社区
来源: http://www.open-open.com/news/view/39eb4005