PyTorch : 概要 (README.md) (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
更新日時 : 04/19/2018
作成日時 : 04/13/2017
* 本ページは、github 上の PyTorch の README.md を動作確認・翻訳した上で適宜、補足説明したものです:
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
PyTorch は2つの高位な特徴を提供する python パッケージです :
- 強力な GPU 加速を持つ (NumPy のような) テンソル計算
- テープ・ベースの autograd システム上に構築された深層ニューラルネットワーク
必要な時には PyTorch を拡張するために NumPy, SciPy そして Cython のような 好みの python パッケージを再利用することができます。
PyTorch についてより詳しく
細かいレベルでは、PyTorch は次のコンポーネントから成るライブラリです :
torch | 強力な GPU サポートを持つ、NumPy のようなテンソル・ライブラリ |
torch.autograd | torch における全ての微分可能なテンソル演算をサポートする、テープ・ベースの自動微分ライブラリ |
torch.nn | 最大限の柔軟性のために設計された autogad と深く統合されたニューラルネットワーク・ライブラリ |
torch.multiprocessing | python multiprocessing ですが、プロセスに渡る torch テンソルの magical メモリ共有を伴っています。データ・ローディングと hogwild (= ひどく興奮した、抑えのきかない) 訓練のために有用です。 |
torch.utils | DataLoader, Trainer そしてその他の便利なユティリティ関数 |
torch.legacy(.nn/.optim) | 後方互換的な理由で torch から移植されたレガシー・コード |
通常は PyTorch を次のいずれかとして使用します :
- GPU のパワーを利用するために NumPy の置き換えとして
- 最大限の柔軟性と速度を提供する深層学習研究プラットフォーム
更に詳細に述べます :
GPU-ready な、テンソル・ライブラリ
NumPy を使用していれば、貴方はテンソル (a.k.a ndarray) を使用しています。
PyTorch は CPU または GPU 上の存在できるテンソルを提供して大量の計算を加速します。
加速してスライシング、インデクシング、数学演算、線形代数、reductions のような科学計算のニーズを加速して適合する多岐に渡るテンソル・ルーチンを提供します。そしてそれらは高速です!
動的なニューラルネットワーク : テープ・ベースの Autograd
PyTorch はニューラルネットワークを構築するユニークな方法を持ちます : テープレコーダを使用して再生します。
TensorFlow, Theano, Caffe そして CNTK のような殆どのフレームワークは世界の静的なビューを持ちます。ニューラルネットワークを構築して同じ構造を何度も何度も再利用しなければなりません。ネットワークの挙動方法を変更することはスクラッチから始めなければならないことを意味します。
PyTorch では、Reverse-モード自動微分と呼ばれるテクニックを使用し、これはネットワークが挙動する方法を遅延またはオーバーヘッドなしで任意に変更することを可能にします。インスピレーションは torch-autograd, autograd, Chainer, etc のような現在または過去のワークに加えて、このトピックの幾つかの研究ペーパーに由来しています。
この技術が PyTorch にユニークなものではないにしても、現在まで最も高速な実装の一つです。貴方の熱狂的な研究のためにベストな速度や柔軟性を得られます。
まずは Python (Python first)
PyTorch は monolothic C++ フレームワークへの Python バインディングではありません。それは Python に深く統合されて構築されています。NumPy / SciPy / scikit-learn etc を使用するように自然に使用できます。好みのライブラリを使用して Python 自身で貴方の新しいニューラルネットワーク層を書くことができますし、Cython と Numba のようなパッケージも使用できます。目標は適切な場合に車輪を再発明することではありません。
命令型の経験 (Imperative experiences)
PyTorch は直感的で、直線的な考えで容易に利用できます。コードの一行を実行する時に、それは実行されています。世界の非同期なビューは存在しません。デバッガーに立ち寄る時、あるいはエラーメッセージとスタックトレースを受け取った時、それらを理解することは簡単です。スタックトレースはコードが定義された場所を正確に指し示します。良くないスタックトレースや非同期であいまいな実行エンジンのためにコードをデバッグするのに時間を決して浪費しないで欲しいのです。
高速そして Lean
PyTorch はフレームワークとして最小限のオーバーヘッドだけを持ちます。速度を最大化するために Intel MKL と NVIDIA (CuDNN, NCCL) のような加速ライブラリを統合します。コアにおいては、そのCPU と GPU テンソルとニューラルネットワーク・バックエンド (TH, THC, THNN, THCUNN) は C99 API で独立したライブラリとして書かれています。それらは成熟していて何年もテストされてきています。
こうして、PyTorch は非常に高速です — 小さくても巨大ニューラルネットワークでも。
PyTorch のメモリ使用は Torch や代替の幾つかと比較して非常に効率的です。深層学習モデルが最大限にメモリ効率が良くなることを確かなものにするために GPU に対してカスタム・メモリ allocator を書きました。これは以前よりもより大きい深層学習モデルの訓練を可能にします。
苦痛のない拡張
新しいニューラルネットワーク・モデルを書いたり PyTorch の Tensor API とのインターフェイスは率直で最小限の抽象化により設計されています。
新しいニューラルネットワーク層を torch API を使用してあるいは SciPy のような NumPy ベースの好みのライブラリ を使用して Python で書くことができます。
C/C++ で層を書くことを望むのであれば、効率的で最小限のボイラープレートによる cffi ベースの拡張 API を提供します。書く必要があるラッパーコードはありません。チュートリアルのここ か サンプルのここ を見ることができます。
インストール
(省略、原文を参照してください。)
以前のバージョン
以前の PyTorch バージョンのインストール手順とバイナリは 私達の website で見つかるかもしれません。
Getting Started
始めるには3つの指針があります :
- チュートリアル: get you started with understanding and using PyTorch
- サンプル: easy to understand pytorch code across all domains
- API リファレンス: http://pytorch.org/docs/
コミュニケーション
- フォーラム: 実装、研究 etc. を議論します。http://discuss.pytorch.org
- GitHub issues: バグレポート、機能リクエスト、インストール issue、RFCs, thoughts, etc.
- Slack: 一般的名チャット、オンライン・ディスカッション、コラボレーション etc. https://pytorch.slack.com/ . Our slack channel is invite-only to promote a healthy balance between power-users and beginners. If you need a slack invite, ping us at soumith@pytorch.org
- ニュースレター: no-noise, one-way email newsletter with important announcements about pytorch. You can sign-up here: http://eepurl.com/cbG0rv
リリースと貢献
PyTorch は 90 日リリース・サイクル (major releases) を持ちます。現在のステートは Beta で、明白なバグがないことを期待しています。Please let us know if you encounter a bug by filing an issue.
We appreciate all contributions. If you are planning to contribute back bug-fixes, please do so without any further discussion.
If you plan to contribute new features, utility functions or extensions to the core, please first open an issue and discuss the feature with us. Sending a PR without discussion might end up resulting in a rejected PR, because we might be taking the core in a different direction than you might be aware of.
以上