PyTorch 1.0發布,JIT、全新的分布式庫、C++前端

jopen 6年前發布 | 9K 次閱讀 Pytorch

Python 張量與動態神經網絡 PyTorch 1.0 發布了。

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 階段。

此外還有一系列更新信息,詳情查看發布公告

下載地址:

來自: 開源中國社區

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!