PyTorch vs. TensorFlow、ディープラーニングフレームワークはどっちを使うべきか問題【2019-2020年】:AI・機械学習のツール&ライブラリ(2/2 ページ)
2大フレームワークであるTensorFlow/PyTorch(一部でKeras/Chainerも)に対して検索トレンドや研究論文数などでの比較を行い、「現状はどういう状況で、今後はどうなりそうか」について、筆者独自の考察を加え、他の記事における考察を引用する。
論文数
ただし、TensorFlowの論文数が「大きく減ったわけではない」という点に留意する必要がある。図6-1/2/3は、各フレームワークの論文数を比較したもの。点線がTensorFlowで、実線がPyTorchである。カンファレンスによって論文数がまちまちであるため、
- 図6-1: コンピュータービジョン系の代表として「CVPR」
- 図6-2: 自然言語処理(NLP)系の代表として「ACL」
- 図6-3: 機械学習(ML)全般系の代表として「ICLR」
という3つのグラフに分けて掲載した(※各代表は、前述のWebアプリにおけるデフォルト表示を基準に選んだ)。
図6-1のコンピュータービジョン「CVPR」については、2018年〜2019年でTensorFlowは+8微増(120→128)している。一方のPyTorchは+201急増(82→283)した。
図6-2の自然言語処理「ACL」については、2018年〜2019年でTensorFlowは+1微増(35→36)している。一方のPyTorchは+84急増(30→114)した。
図6-3の機械学習「ICLR」については、2018年〜2019年でTensorFlowは−5微減(57→52)している。一方のPyTorchは+48急増(24→72)した。
TensorFlowを使用する論文の数は、いずれも微増〜微減となっており、人気はほぼ維持している状況と考えてよいだろう。
一方で、PyTorchの成長は誰の目から見ても明らかである。
フレームワーク使用率
ただし、カンファレンスに提出される論文数は年々増えているようなので、論文数を維持するだけでは、使用率は減ってしまうことになる。図7のグラフは、全論文の中で各フレームワークの使用率をグラフ化したものである。図6-1/2/3で用いた「CVPR」「ACL」「ICLR」を載せている。
これを見ると、いずれのカンファレンスにおける論文でも、TensorFlowの使用比率(各色の点線のグラフ)は2018年〜2019年で下がっている。やはり「研究分野においては、TensorFlowは成長できておらず、結果的にシェアは下降傾向にある」と言えるだろう。
研究トレンドに関する考察
以上の結果から、研究者はTensorFlowを徐々に手放しつつある。その一方で、より多くの研究者がPyTorchを採用するようになっている。「現在は産業界で広く活用されているTensorFlowが、研究者の波に押されてPyTorchに切り替わっていくのか」、それとも「産業界では(研究分野と異なり)TensorFlowの活用を今後も長く維持するのか」に注目が集まっている状況である。
Horace氏の記事では、
産業界では、TensorFlowが現在選択されているプラットフォームだが、それは長く持たないだろう
と結論付けられている。その理由として、
- TensorFlow 2.0登場が遅すぎた可能性
- TensorFlowにおけるAPIの変遷問題
- PyTorchを利用する研究者の、産業界への就職
などが挙げられていた。逆にTensorFlowの優位点としては、
- 運用環境
について言及されている。
それぞれについてもう少し深く見ていこう。
TensorFlow 2.0登場が遅すぎた可能性
これは、「2018年に勢力図は塗り変わっており、今さら研究者の関心を取り戻せるのか?」という疑問である。
前述の通り、確かにTensorFlow 2.0で、PyTorchの利点を組み込み、具体的には使いやすくて簡単なAPIのKeras統合して一本化し、Eager実行(=Define-by-Run)モードのデフォルト化、さらにPythonらしい書き方ができるAutoGraph機能追加(=従来のTensorFlowではテンソルとセッションという独特の概念を用いる必要があった)などの機能追加と機能改善を行った(詳細はこちらの記事を参照)。しかしながら、あえて既に使っているPyTorchを捨ててまで、TensorFlowに戻るほどではない状況である。
TensorFlowにおけるAPIの変遷問題
Horace氏は「研究者がPyTorchを好むのは、PyTorchのAPI設計がより優れていること(上記の利点)と、TensorFlowが何度もAPIを切り替えて障害を起こしてきたこと(下記の変遷問題)からだ」と主張している。
TensorFlowを実務で使ってきた人は、実際にAPIの変遷に苦しめられた人が少なくないだろう。TensorFlowでは、さまざまなAPIが搭載され、すぐに廃止された。最もプリミティブなAPIの上に、使い勝手のよい高水準のAPIが用意されている。その高水準APIは、「tf.contrib.learn」「tf.layers」「tf.slim」「tf.estimator」「tf.keras」とさまざまなものが追加されては廃止されてきた経緯がある。これによって、エンジニアは大混乱した。その反省もあって、TensorFlow 2.0で「tf.keras」に一本化され(※tf.estimatorの機能も残っている)、「このAPIをバージョン2.xでは貫く」と明言されている。
しかし、いったん嫌って離れていった研究者が、きびすを返してすぐに好意的になってくれるとは思えない。確かに「TensorFlow 2.0登場は遅すぎた」と言えるかもしれないのだ。
PyTorchを利用する研究者の、産業界への就職
2019年〜2020年でどう変化するかは未知数ではあるものの、勢いから考えると、研究者の間でPyTorchが支配的な地位を維持する可能性はかなり高いだろう。そうなると、「今の学生たちは、産業界に就職した後も慣性としてPyTorchを使い続ける可能性がある」というのがHorace氏の主張である。
この考えは確かにその通りではあるが、IT分野での先例を考えると、たとえ大学でJavaやRubyを習って使っていたとしても、実際の業務で使うかは別だったと思う。そう想像通りには、PyTorchに切り替わっていかない気が筆者はしている。
運用環境の優位性
産業界にとって、「いかに素早く結果が出せるか」「安定して使い続けられるか」は重要である。
Horace氏いわく、「研究者は自分自身のマシンや研究用のサーバークラスタ環境で実験を実行するが、産業界のエンジニアはクラウドやモバイル上などで運用する。TensorFlowは、そういった要件を満たすように構築されており、既にソリューションが用意されている」ということだ。実際に、
- モバイル端末向けの「TensorFlow Lite」
- Web向けの「TensorFlow.js」
- モデル運用サーバーの「TensorFlow Serving」
といった運用環境が使用可能で(※一方、2019年10月10日のPyTorch Developer Conference 2019に合わせてリリースされたPyTorch 1.3で「PyTorch Mobile」が発表されるなど、PyTorchも運用環境面を強化してきている)、TensorFlowエコシステムに入れば、さまざまな効率化が図れるようになっている。別の視点で見ると、「結局はGCP(Google Cloud Platform)を売りたいんでしょ」と勘ぐられて、その営業色が嫌がられている雰囲気はある。
なお、「PyTorchは運用環境面で弱く、その結果、現在は多くの企業がTensorFlowを製品で利用している」とのことなので、運用面においてはしばらくTensorFlowが優位なようである。
パフォーマンスの比較
TensorFlowは「Eager実行モードにおいてパフォーマンス/メモリ問題に苦しんでいる」というHorace氏の言及もあるが、Lysandre Debut氏の「Benchmarking Transformers: PyTorch and TensorFlowというブログ(Medium)記事によると、PyTorchとTensorFlowの「推論時のパフォーマンス」については大差がなさそうである。
具体的にはTensorFlow 2.0とPyTorch 1.3を使った、CPU/GPUでの推論について比較したところ、
一般にTensorFlowは、PyTorchに比べてCPUで少し遅くなるが、GPUでは少し速くなる
という結果を得ている(図8)。
図8 フレームワークのパフォーマンス比較(「Benchmarking Transformers: PyTorch and TensorFlow - HuggingFace - Medium」から引用)
この表を見ると、GPUの方がCPUよりも20倍近く高速に推論処理が行われることが分かる。一方でTensorFlowとPyTorchでは誤差ぐらいの差しかない。つまり、パフォーマンスで見る限り、TensorFlow/PyTorchのどちらを使っても大差はないのである。
※ちなみに「学習時のパフォーマンス」については、今回示せるデータがない。一般的に「TensorFlowの方がやや速い」と言われることが多いものの、ケースバイケースである。学習時についても、それほど大差はないだろう(と筆者は考えている)。
強いて違いを挙げるなら、Lysandre氏いわく「PyTorchモデルは、TensorFlowモデルよりも早くメモリを使い果たす傾向がある」とのことである。
以上、TensorFlowとPyTorchのトレンド比較を、検索エンジンと研究論文という観点で見て、(後半は、ネタ元の記事における主張を多く引用したが)さまざまな考察を加えてきた。
「勢い」だけで言うならば、圧倒的にPyTorchの時代になりつつある。ただし、産業界での実利用数や運用面で見ると、TensorFlowに一日の長がある。
機能面やパフォーマンスでは拮抗(きっこう)しつつあり、どれを使っても同じと言える時代になってきている。TensorFlowが踏ん張れるのか、PyTorchが勢いで圧倒するのか、判断が難しい状況である。
筆者自身は、PyTorchの流行は継続するものの、今後2年ぐらいはTensorFlowも産業界での人気を維持し続けると見ている。特に日本においては、本文で述べたように学習する機会がまだまだ少なく、PyTorchに手を出しやすい状況ではないと思うからである。
しかしながら3〜5年後はどうかというと、本@IT Deep Insiderでも、今後はPyTorchの記事を増やしたいと思ってしまうし、PyTorchが優勢な気がしないでもない。
皆さんは今後、どちらのフレームワークを使うべきだと考えるだろうか? ぜひTwitterやはてなブックマークなどでご意見を読ませてほしい。
最後に、本文中で引用した「The State of Machine Learning Frameworks in 2019」には、本稿で詳細をカバーしきれなかった「PyTorchのTorchScript機能」や「TensorFlowのEager実行モード」といった新機能によって、「両フレームワーク間の差異がどれほど小さくなってきているか」が説明されているなど、他にも読者に知ってもらいたい情報が記載されている。ブラウザー機能などで日本語翻訳してでも読む価値があるのでぜひご一読いただきたい。TensorFlow 2.0の新機能については、手前味噌ながら「新機能の概要」を一読することをお勧めする。Please follow on Twitter @DeepInsiderJP.
Copyright© Digital Advantage Corp. All Rights Reserved.