PyTorch 1.0.0 リリースノート (新規機能) (翻訳)
翻訳 : (株)クラスキャット セールスインフォメーション
日時 : 12/08/2018
* 本ページは github PyTorch の releases の PyTorch 1.0.0 リリースノートに相当する、
“JIT Compiler, Faster Distributed, C++ Frontend” の Highlights を翻訳したものです:
JIT コンパイラ, より高速な分散, C++ フロントエンド
ハイライト
JIT
JIT は PyTorch の研究とプロダクションの間のギャップを橋渡しするためのコンパイラ・ツールのセットです。それは Python インタープリタへの依存性なく実行可能なモデルの作成を可能にし、より積極的に最適化可能です。プログラム・アノテーションを使用して既存のモデルは Torch Script に変換できます、これは PyTorch が直接実行可能な Python のサブセットです。モデル・コードは依然として正当な Python コードで標準的な Python ツールチェーンでデバッグ可能です。PyTorch 1.0 は 2 つの方法を提供します、torch.jit.trace または torch.jit.script を使用して、そこで貴方は既存のコードを JIT と互換にすることができます。ひとたびアノテートされれば、Torch Script コードは積極的に最適化されてそれは後の使用のために新しい 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
サンプルとして、C++ からエクスポートされたモデルをロードする、seq2seq モデルを配備する チュートリアルを見てください、あるいは ドキュメント をブラウズしましょう。
真新しい (= Brand New) 分散パッケージ
torch.distributed パッケージと torch.nn.parallel.DistributedDataParallel モジュールは真新しい再設計された分散ライブラリにより支えられます。新しいライブラリの主要はハイライトは :
- 新しい torch.distributed はパフォーマンス主導で総てのバックエンド: Gloo, NCCL と MPI のために完全に非同期に動作します。
- ethernet ベースのホストのような特により遅いネットワークを持つホストのための本質的な分散データ並列パフォーマンス改良。
- torch.distributed パッケージの総ての分散 collective 演算に対する非同期サポートを追加します。
- Gloo バックエンドで次の CPU ops を追加します : send, recv, reduce, all_gather, gather, scatter
- NCCL バックエンドで barrier op を追加します。
- NCCL バックエンドのための new_group サポートを追加します。
C++ フロントエンド [API Unstable]
C++ フロントエンドは PyTorch バックエンドへの純粋な C++ インターフェイスで、定着している Python フロントエンドの API とアーキテクチャをフォローしています。それは高パフォーマンスにおける研究、低遅延そしてベアメタルな C++ アプリケーションを可能にすることが意図されています。それは Python フロントエンドの torch.nn, torch.optim, torch.data と他のコンポーネントへの等価物を提供します。ここに 2 つの言語のフロントエンドの最小限の並べた比較があります :
Python | C++ |
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(); |
私達は PyTorch 1.0 の一部として C++ フロントエンドを “API Unstable” とマークしてリリースしています。これは、貴方の研究アプリケーションのために使用する準備はできていますが、依然として (次の 2, 3 のリリースに渡り安定するであろう) 幾つかのオープンな構築箇所を持つことを意味しています。API の幾つかのパートはこの時期に breaking changes を経験するかもしれません。PyTorch C++ API の大部分と C++ フロントエンドについての詳細なドキュメントは https://pytorch.org/cppdocs を見てください。
Torch Hub
Torch Hub は、研究再現性を容易にするために設計された事前訓練されたモデル・レポジトリです。
Torch Hub は事前訓練モデル (モデル定義と事前訓練された重み) を単純な hubconf.py を使用して github レポジトリに公開することをサポートします ; サンプルとして、pytorch/vision の resnet モデルのための hubconf を見てください。ひとたび公開されれば、ユーザは torch.hub.load API を使用して事前訓練されたモデルをロードできます。
より詳細については、torch.hubドキュメントを見てください。Expect a more-detailed blog post introducing Torch Hub in the near future!
以上