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 模塊採用了從新設計的全新分佈式庫,亮點包括:優化
C++ 前端設計
C++ 前端是 PyTorch 後端的純 C++ 接口,它遵循已創建的 Python 前端的 API 和體系結構,旨在實現高性能、低延遲和裸機 C++ 應用的研究。它提供了 torch.nn、torch.optim、torch.data 和 Python 前端的其它組件的等價物。下邊是兩種語言前端的簡單比較:調試
PythonC++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()
#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 階段。