Coda

論文メモ Pytorch: An Imperative Style, High-Performane Deep Learning Library

July 11, 2020

Pytorchの使い勝手と実行速度について解説した論文である。 ここでの使い勝手は、命令型かつPythonらしいコードでPytorchのAPIを呼びだせることを意味する。 Pytorchは、4つの設計原則として、PythonらしいAPI、機械学習の複雑な処理をPytorch内に隠蔽する、使い勝手のために過度にパフォーマンスを犠牲にしない、完璧な解決策よりも実装の単純さを重視する、をかかげる。

使い勝手の要点として、命令型かつPythonicなコードでネットワークを実装でき、numpyなど他のライブラリのデータ形式と相互変換可能なAPIがあり、自動微分があることをあげている。 一方、処理速度については、C++による内部実装、GPU上での計算の高速化、multiprocessingパッケージの再実装、GCの最適化がある。 CUDAストリームによって、CPUとGPUの計算は非同期に協調する。 また、cudaFreeによるメモリ解放時のブロックを避けるために、独自のメモリーアロケータでメモリを確保する仕組みがある。 また、Pythonのmultiprocessingパッケージと完全な互換性のある再実装もある。 これは、テンソルを共有メモリに格納することで、標準のmultiprocessingで起きるプロセス間でのデータの受け渡しにかかるオーバーヘッドを抑える。 テンソルへの参照カウントは、Pytorch側で管理され、テンソルへの参照が0になった時点で即座にメモリが解放される。