Facebookがオープンソースとして公開するディープラーニングフレームワークのPyTorchが、バージョン1.4のリリースを発表した。Python 2をサポートする最終バージョンになる予定の今回のバージョンでは、分散トレーニングとモバイル推論が改善され、Javaサポートが導入されている。
今回のリリースは、2019年12月に開催されたConference on Neural Information Processing Systems(NeurIPS)での発表とプレゼンテーションを受けたものだ。このリリースには、大規模モデルをトレーニングするために、複数のGPUを使用したモデル並列(model-parallel)トレーニングをサポートする分散フレームワークが含まれている。また、PyTorch Mobileが改良されてビルドスクリプトのカスタマイズが可能になり、モデルに必要なストレージを大幅に削減できるようになった。さらに、PyTorch Mobile用のAndroidインターフェースの上に、TorchScriptモデルを使用して推論を行うための試験的なJavaバインディングが実装されている。PyTorchはPythonとC++もサポートする。今回のリリースは、Python 2とC++ 11をサポートする最終版になる予定である。リリースノートによると、
今回のリリースには、JITやONNX、分散、パフォーマンス、フロントエンドといった既存領域の大幅な改善から、モバイルや量子化(quantization)など試験的分野での改善まで、幅広い領域にわたる1,500以上のコミットと多大な労力が注がれています。
ディープラーニングには近年、特に自然言語処理(NLP)の分野において、数億のパラメータを持つRoBERTaのような、大規模かつ複雑なモデルが作成される傾向がある。これらのモデルはひとつのGPUのメモリに収めるには大きすぎるが、モデル並列と呼ばれるテクニックを使うことで、モデルのパラメータをサブセットに分割し、それぞれを異なるGPUで処理することが可能になる。従来バージョンのPyTorchは単一マシンでのモデル並列はサポートしていたが、トレーニングに使用するGPUをすべて同じマシンにホストしなければならなかった。これに対してPyTorch 1.4では、分散リモートプロシージャ呼び出し(RPC)システムが導入されたことで、複数マシンにわたるモデル並列トレーニングがサポートされるようになった。
モデルをトレーニングした後は、それをデプロイして、推論や予測に用いる必要がある。多くのアプリケーションが計算能力やメモリ、ストレージリソースに制限のあるモバイルデバイスを対象としているため、大規模なモデルはそのままではデプロイできないことが多い。PyTorch 1.3で導入されたPyTorch MobileとTorchScriptは、さまざまなプラットフォームで同じAPIをサポートして、Caffe2のようなモバイルフレームワークにモデルをエクスポートする必要性を排除することによって、エンドツーエンドの開発サイクルタイムを短縮をしようとしている。1.4のリリースによって、開発者は、自身のモデルに必要なPyTorchオペレータのみを含むように、ビルドパッケージをカスタマイズできるようになった。パッケージをカスタマイズすることによって"ビルド済のPyTorchモバイルライブラリよりも40~50パーセント小さく"することが可能だ、とPyTorchチームはレポートしている。JavaバインディングはLinux上でのみ使用可能である。
競合するディープラーニングフレームワークのTensorFlowが、商用アプリケーション分野で最も多い選択肢であると位置付けられているのに対して、PyTorchは研究コミュニティでリードを得ている。12月に開催された2019 NeurIPSカンファレンスでは、発表された論文で引用されたフレームワークの70パーセントをPyTorchが占めていた。最近では、Preferred Networks, Inc(PFS)と研究コンソーシアムのOpenAIが、PyTorchへの移行を発表している。"PyTorchにスイッチしたことによって、研究アイデアからモデル作成までのイテレーション時間が週単位から日単位に短縮されました"、OpenAIでは述べている。
業務に関しては、1.0がリリースされたタイミングで、R&D、プロダクションともにTensorFlowからPyTorchに変更しました ... PyTorchによって生産性も幸福度も目覚ましく、かつ大幅に改善されています。