論文メモ Pytorch: An Imperative Style, High-Performance Deep Learning Library
July 11, 2020Pytorchの使い勝手と実行速度について解説した論文である。 ここでの使い勝手は、命令型かつPythonらしいコードでPytorchのAPIを呼びだせることを意味する。 Pytorchは、4つの設計原則として、PythonらしいAPI、機械学習の複雑な処理をPytorch内に隠蔽する、使い勝手のために過度にパフォーマンスを犠牲にしない、完璧な解決策よりも実装の単純さを重視する、をかかげる。
使い勝手の要点として、命令型かつPythonicなコードでネットワークを実装でき、numpyなど他のライブラリのデータ形式と相互変換可能なAPIがあり、自動微分があることをあげている。
一方、処理速度については、C++による内部実装、GPU上での計算の高速化、multiprocessingパッケージの再実装、GCの最適化がある。
CUDAストリームによって、CPUとGPUの計算は非同期に協調する。
また、cudaFree
によるメモリ解放時のブロックを避けるために、独自のメモリーアロケータでメモリを確保する仕組みがある。
また、Pythonのmultiprocessingパッケージと完全な互換性のある再実装もある。
これは、テンソルを共有メモリに格納することで、標準のmultiprocessing
で起きるプロセス間でのデータの受け渡しにかかるオーバーヘッドを抑える。
テンソルへの参照カウントは、Pytorch側で管理され、テンソルへの参照が0になった時点で即座にメモリが解放される。
- 論文をこちらからダウンロードできます。