2022年1月時点、深層学習(ディープラーニング)のフレームワークは
- TensorFlow
- PyTorch
の2強時代になっています。
本記事は、
- これからPythonを使って、「ディープラーニング」の学習をしたい
- どちらかのフレームワークを使ってきたが、もう一方のフレームワークの方がいいのでは?
と思っている方を対象に、
- 世界での、各フレームワークの使用状況
- 各フレームワークの特徴
を把握した上で、どちらの使用がオススメなのか、ご紹介します。
こんにちは、Zero-Cheeseです。
私自身、ディープラーニングに日々携わっており、「TensorFlow、Pytoch」両方のライブラリを使用しています。
使用している経験も踏まえつつ、記事にしました。
各ライブラリの「世間での使用状況」比較
「TensorFlor, PyTorch」の使用状況
各フレームワークが、使用されている状況を、2つのデータより見てみます。
結論:
- 研究者は、PyTorch
- ビジネスまで拡大すると、TensorFlowが優勢と推定
論文引用数
研究論文における、フレームワークの使用割合を示したものになります。
引用元:「Paper with Code: Trends」
PyTorchが圧勝で、約80%以上のシェアになっています。
Kaggle での使用状況
「Kaggle」は世界最大の、機械学習を競い合うプラットフォームです。
こちらの参加者は、研究者だけでなく、ビジネス(実務)に携わっている者も参加しています。
よってビジネス(実務)的に、どのフレームワークが使われているのか、探るヒントになると思っています。
Kaggleの最新レポート(2021年版)によれば、下記の通りです。
機械学習のフレームワークの使用率になります。
2021 Kaggle Machine Learning & Data Science Survey より引用
結果:
- TensorFlow:52.6%
- PyTorch:33.7%
実務者を含めると、TensorFlowが多いと推察されます。
(脱線) データサイエンティストの給料
Kaggleのレポートに興味深いデータがあったので、ご紹介します。
各国別の給料(ドル -中央値-)になります。
アメリカ、凄いです。
日本の2.5倍、年収が多い・・・・
各フレームワークの「性能」比較
結論:
- 処理速度は、同等
「TensorFlow, PyTorch」パフォーマンス比較
代表的な、「ディープラーニング」のモデルに関して、各フレームワークの性能比較結果になります。
この結果より
- TensorFlowとPyTorchは、ほぼ同等
- (Kerasは、TensorFlowのラッパーという事もあってか、処理速度が遅い傾向)
という結果が得られています。
各フレームワークの特徴
TensorFlowの特徴
Googleが開発し、オープンソースで公開されている、機械学習フレームワークです。
Ver.1とVer.2で大きく特徴が変わっています。
Ver.1の特徴
「Define-and-Run」方式と呼ばれる、「計算グラフを先に宣言してから、データを与えて学習する」方式が採用されていました。
計算グラフを事前に定義してコンパイルしているので、動作速度が速いという、メリットがあります。
一方、デメリットとしては、
- コードの書き方に、クセがある
- 計算グラフを柔軟に変更できない
- エラー発生時、デバッグが大変!!
- GPU版の環境構築が、かなり大変
といった特徴があります。
この中でも一番大変だったのは、GPU版の環境構築でした!!
GPUのライブラリ、CUDA、cuDNN、TensorFlowのバージョンのいずれかがズレると、途端にエラーが発生しました。
詳細は、最後の雑談で。
Ver. 2の特徴
大きな特徴は、Eager Modeと呼ばれている、「Define-by-Run」方式が標準となりました。
つまり、通常のコードと同じように
- コード中に 「c = a + b」 と記述すると、この計算グラフの定義と実行が、同時に実施され、結果を得られる
仕様に変更になりました。
その結果、シンプルで分かりやすくなりました。
またその他の特徴として、
- ver.1では、同じような関数が、違うメソッド名で乱立していましたが、整理されました。
- Numpyと似たような操作が可能になった。
- Kerasがライブラリとして取り込まれた。
が挙げられます。
デメリットとしては、以下になります。
- Ver.1を学習した者にとっては、学習コストが更に増加
- Ver.1より遅い。(下記表を参照。 Ver違いによる、処理時間の比較をしたものです。)
遅くなってる・・・
PyTorchの特徴
Meta(旧Facebook)の人工知能研究グループAI Research lab(FAIR)により開発が始まった、オープンソースで公開されている、機械学習フレームワークです。
「Define by Run」方式を採用しています。
つまり、重複した記載となってしまいますが、Pythonの通常のコードと同じように
- コード中に 「c = a + b」 と記述すると、この計算グラフの定義と実行が、同時に実施され、結果を得られる
仕様となります。
他の特徴は、以下になります。
- Pythonに慣れた方なら、違和感なく始められる。
- Numpyみたいに記載できる。(TensorFlow Ver2は同じく記載できます。)
- CPU、GPU、どちらで処理するかを、臨機応変にコードに記載できる。(TensorFlow ver.2は、同じく簡単になりました。)
- ほとんどの研究者はPyTorchを使用しているため、最新の情報が入手しやすい。
「Preferrd Networks(日本の会社)」が開発した、「Chainer」というフレームワークもありました。
このChainerこそ、「define-by-run」方式を先駆けで採用したフレームワークでした。
PyTorchの開発にも、大きな影響を与えています。
現在は開発は修了しており、「Preferrd Networks」自身も、PyTorchに移行しています。
「TensorFlow, Pytorch」どちらを選択するべきか?
これらの結果より、TensorFlow, PyTorch 、甲乙つけがたい状況です。
よって、つまらない結論で恐縮ですが
- 職場で採用している、フレームワークを使ってみる
- 周囲で使用している、フレームワークを使ってみる
- 試してみて、自分に合うフレームワークを使ってみる
でいいと思います。
ただ、最先端をウォッチングしたい方は、
- PyTorch
がオススメです。
既に記した通り、研究者はPyTorchを好んでおり、研究結果をGItHubに公開する事がよくあります。
PyTorchのインストール方法を、下記記事にてご紹介しています。
雑談
ここからは、「TensorFlow ver.1」と格闘して、最終的に「PyTorch」に乗り換えた、筆者の経験談になります。
私は昔は、TensorFlow(ver.1)を使用していました。
理由は、最先端を走っているGoogleが開発したフレームワークだったからです。
きっと、流行るだろう!!
時期的には、TensorFlowのVer.1が、世の中に出現した頃の話になります。
当時は、TensorFlowのGPU版とCPU版が、別ライブラリとなっており、対応OSもUbuntu、(Mac版は、まだ無かったと記憶)という状態でした。
しかも、ソースファイルをDLしてきて、コンパイルして環境構築していた時代になります。
環境構築が、本当に大変でした。
エラーだらけ!!
ちなみに、GPUは奮発して「GTX1080」を購入。
(当時は、「高っ!!」と思ってました。昨今のGPUを見てると、金銭感覚がマヒしてきております・・)
自作PCで、ディープラーニングをやり初めました。
環境構築には、下記を全部併せる必要があります
- OSのバージョン
- TensorFlowのバージョン
- CUDAのバージョン
- cuDNNのバージョン
- GPUドライバのバージョン
問題は、これら全部合っているはずなのに、エラーが発生する!!
インストールしては消しての繰り返しを、何回、やった事か・・ ホント・・・・・・
またドライバとか、TensorFlowのバージョンが変わるたびに、これらの作業が全て必要になりました。地獄・・・
そんなある日、「PyTorch」に浮気してみました。
本当に、「簡単!」と思ったのを覚えています。
PyTorchには、
- CPU版、GPU版の違いはない
- CUDA、cuDNN等の機能も入っている!!
- 準備するのはGPUのドライバ位
なによりも、コードが本当に書きやすい!!
当時のTensorFLowは、
- デバッグが本当に大変で、
- どこでミスをしているのか、全然わからず・・・
- 大量の時間と、大量のストレスが発生していました。
それがPyTorchを使ってみると、Numpyみたいに直感的に使えるわ、何よりデバッグがいい!!
後発なのに、研究者の方に急速に広がった理由を、痛感しました。
(筆者は、Chainerを使った事がなく、PyTorchはその影響を受けて開発したので、Chainerもそうだったかもしれません。)
それ移行、PyTorchに完全に乗り換えてしまいました。
TensorFlowもVer.2になり、この雑談で記載した弱点は、解消されています。
2022年1月時点、私の使用状況ですが、
TensorFlowは、Ver.2になって使いやすくなりましたが、過去の記憶が強く、必要がないと使用しない状況になっています。
まるで、トラウマ(笑)
雑談まで含めて、最後まで読んで頂いた方々、本当にありがとうございました。
もし、「ディープラーニングのメカニズムが知りたい」という方は、下記記事が参考になります。
また、「ディープラーニング用に自作PCを組みたい」という方は、こちらが参考になります。