PyTorch 1.5.0 リリースノート

PyTorch 1.5.0 リリースノート (翻訳)

翻訳 : (株)クラスキャット セールスインフォメーション
日時 : 04/25/2020

* 本ページは github PyTorch の releases の PyTorch 1.5.0 リリースノートに相当する、
“Stable C++ Frontend, Distributed RPC framework, and more. New experimental higher-level autograd API, Channels Last memory format, and more.”
の Highlights と New Features を翻訳したものです:

 

ステーブル C++ フロントエンド、分散 RPC フレームワーク, and more

ハイライト

このリリースは幾つかの大きな新しい API 追加と改良を含みます。これらは、ヘッセとヤコビ (行列) の容易な計算を可能にする autograd のための新しい API、C++ フロントエンドへの重要な更新、より高パフォーマンスなコンピュータビジョン・モデルのための ‘channels last’ メモリ形式、モデル並列訓練のために使用される分散 RPC フレームワークのステーブルリリース、そして PyBind によりインスパイアされたカスタム C++ クラスの作成を可能にする新しい API を含みます。追加で torch_xla が今では利用可能で PyTorch 1.5 リリースとともにテストされ、成熟した Cloud TPU 体験を提供します。

 

C++ フロントエンド API [Now Stable]

C++ フロントエンド API が今では Python と同等で全体の特徴は「ステーブル」に移行しました。(以前は試験的とタグ付けされていました)。大きなハイライトの幾つかは以下を含みます :

  • C++ torch::nn モジュール/functional は適切なドキュメントとともに、今では Python API と ~100% 同等です。今はユーザは彼らのモデルを Python API から C++ API に容易に変換できて、モデル・オーサリング体験を遥かにスムースにします。
  • C++ optimizers は今では Python API と同一の動作をします。過去、C++ の optimizers は Python 同値のものから逸脱していました : C++ optimizers は (Python では可能であるところ) 入力としてパラメータ・グループを取れませんでした。またステップ関数の実装は正確に同じではありませんでした。1.5 リリースで、C++ optimizers は Python 同値のものと常に同じ動作をします。
  • 新しい C++ tensor 多次元インデキシング API、これは Python API に類似して見えて動作します。以前の回避方法は narrow / select / index_select / masked_select の組み合わせを利用することでした、これは Python API のエレガントな tensor[:, 0, …, mask] シンタクスに比較して優雅さを欠き誤りがちです。1.5 リリースでは同じ結果を獲得するために tensor.index({Slice(), 0, “…”, mask}) が利用できます。

 

コンピュータビジョン・モデルのための channels last メモリ形式 [試験的]

channels last メモリ形式は NCHW セマンティック次元の順序を保全する一方で、メモリの NCHW tensor を順序付ける代替方法です。channels last tensor はチャネルが最も深い (= densest) 次元になるような方法でメモリで順序付けられます (aka 画像を pixel-per-pixel でストアする)。

channels last メモリ形式はパフォーマンス効率的な畳込みアルゴリズムとハードウェア (NVidia の Tensor Cores, FBGEMM, QNNPACK) を利用する機能を解禁します。追加で、それっは演算子を通して自動的に伝播するように設計されました、これはメモリレイアウトの容易な切り替えを可能にします。

 

カスタム C++ クラス [試験的]

このリリースはカスタム C++ クラスを TorchScript と Python に同時にバインドするための新しい API を追加します。この API は pybind11 とシンタクス的に殆ど同一です。それはユーザに彼らの C++ クラスとそのメソッドを TorchScript type システムとランタイムシステムに公開することを可能にします、その結果任意の C++ オブジェクトを TorchScript と Python からインスタンス化して操作できます。C++ バインディングのサンプルは :

template <class T>
struct MyStackClass : torch::CustomClassHolder {
  std::vector<T> stack_;
  MyStackClass(std::vector<T> init) : stack_(std::move(init)) {}

  void push(T x) {
    stack_.push_back(x);
  }
  T pop() {
    auto val = stack_.back();
    stack_.pop_back();
    return val;
  }
};

static auto testStack =
  torch::class_<MyStackClass<std::string>>("myclasses", "MyStackClass")
      .def(torch::init<std::vector<std::string>>())
      .def("push", &MyStackClass<std::string>::push)
      .def("pop", &MyStackClass<std::string>::pop)
      .def("size", [](const c10::intrusive_ptr<MyStackClass>& self) {
        return self->stack_.size();
      });

これは貴方が Python と TorchScript で使用できるクラスをそのように公開します :

@torch.jit.script
def do_stacks(s : torch.classes.myclasses.MyStackClass):
    s2 = torch.classes.myclasses.MyStackClass(["hi", "mom"])
    print(s2.pop()) # "mom"
    s2.push("foobar")
    return s2 # ["hi", "foobar"]

ここ でそれをチュートリアルで試すことができます。

 

分散 RPC フレームワーク API [Now Stable]

torch.distributed.rpc パッケージは DistributedDataParallel に適合しない広い範囲の分散訓練パラダイムをサポートすることを目指しています。サンプルはパラメータサーバ訓練、分散モデル並列と分散パイプライン並列を含みます。torch.distributed.rpc パッケージの特徴は API の 4 つの主要なセットに分類できます。

  • RPC API は与えられた引数で、指定された宛先 (= destination) ワーカー上で関数を実行することを可能にして戻り値を取得するか戻り値への分散参照を作成します。
  • RRef (Remote REFerence) は他のワーカー上のオブジェクトへの参照としてサーブします。RRef を保持するワーカーはオブジェクトのコピーを明示的にリクエストできて、そしてそれはまた参照カウントを気にすることなく他のワーカーと軽量 RRef を共有できます。これはマルチワーカーが同じリモートオブジェクトの異なるバージョンに繰り返しアクセスする必要があるとき特に有用です。
  • 分散 Autograd では、アプリケーションは RPC を使用するマルチワーカー上にモデルが分割されていてさえも自動的に勾配を計算できます。これは、forward パスで RPC 境界でローカル autograd グラフを一緒に縫い、そしてbackward パスでローカル autograd を透過的に起動するために参加者に手を伸ばすことにより達成されます。
  • 分散 Optimizer はモデルパラメータを更新するために分散 Autograd により計算された勾配を利用します。そのコンストラクタはローカル optimizer (e.g, SGD, Adagrad, etc.) とパラメータ RRef のリストを取り、そしてその step() 関数は総ての個別の RRef オーナーワーカー上でパラメータを更新するためにローカル optimizer を自動的に使用します。

ここ で更に学習してください。

 

torch_xla 1.5 が今では利用可能

torch_xlaCloud TPU と Cloud TPU Pod 上で PyTorch 深層学習フレームワークをアクセラレートする XLA 線形代数コンパイラ を使用する Python パッケージです。torch_xla はユーザにユーザ体験への変更を最小限にしながら Cloud TPU 上 GPU 上で行える総てのことを行なう機能を与えることを目的としています。torch_xla のこのリリースは、開発者のために摩擦を減じてそしてCloud TPU ハードウェアを使用するモデルの訓練のためにステーブルで成熟した PyTorch/XLA スタックを提供するために PyTorch 1.5 で調整されてテストされています。Google Colab で 8-core Cloud TPU デバイス上貴方のブラウザで 無料でそれを試す ことができて Google Cloud では遥かに巨大なスケールでそれを利用できます。

ここ で full torch_xla リリースノートをそして ここ で full docs を見てください。

 

新しい高位 autograd API [試験的]

PyTorch 1.5 は torch.autograd.functional.* サブモジュールに jacobian, hessian, jvp, vjp, hvp と vhp を含む新しい関数をもたらします。この特徴は現在の API 上に構築されてユーザにこれらの関数を容易に遂行することを可能にします。

ここ の full docs を見てください。

 

Python 2 はもはやサポートされません

PyTorch 1.5.0 に対して私達はもはや Python 2、特にバージョン 2.7 をサポートしません。Python に対する今後のサポートは Python 3 に制限されます、特に Python 3.5, 3.6, 3.7 と 3.8 (PyTorch 1.4.0 で最初に有効にされました) です。

 

以上