はじめに
tensorflow-macosのリリースに伴い, macでも深層学習を始めるハードルがとても下がったと思います. ただ実際のところどの程度パフォーマンスはどうなのか? はたまたeGPUを使った場合どうなるのか? すでにmacで深層学習をやっている方はPlaidMLと比較してどうなのか?など, 不明なところが多いかと思います.
基本ROM専な私ですが, なかなかベンチマーク結果が出てこないこともあり, 今回初投稿しました.
@tomoyaeibuさんがm1 macでtensorflow-macosを実行した記事を上げているので,
勝手ながらそれと同様の条件で比較できるように, パフォーマンスを測定しました.
https://qiita.com/tomoyaeibu/items/46f2f3384a370df71d5e
私はeGPU利用の結果を中心に投稿したいと思います.
tensorflow-macos, PlaidML, eGPUについて
tensorflow-macos, PlaidML
いずれもMacでGPUを使った深層学習を行えるフレームワーク.
いずれもいろんな方が記事にしているので, ググってみてください.
eGPUについて
簡単に言うと外付けGPU. ノートPCのような拡張不可能な端末において, (お金があれば)容易にGPUをアップグレードすることができる. macOS High Sierra 10.13.4以降で使えるようになりました. 詳しくはググってみてください. m1 macには残念ながら現在のところ未対応らしいです.
今回, thunderbolt2なmacでeGPUを利用するため, purge-wrangler.shを使いました.
環境
ハードウェア
- MacBook Pro (Retina, 13-inch, Late2013)
- プロセッサ 2.4GHz デュアルコア Intel Core i5
- メモリ 8GB 1600MHz DDR3
- Razer Core X (eGPU)
- Radeon RX580 (8GB)
- Thunderbolt3-2変換ケーブル利用
ソフトウェア
- Mac OS Big Sur 11.1
- tensorflow-macos 0.1-alpha1
- PlaidML 0.7.0
- purge-wrangler.sh (Thunderbolt2なMacでeGPUを使えるようにするため)
実験設定
実験コード
https://qiita.com/tomoyaeibu/items/46f2f3384a370df71d5e
こちらの記事のLeNetライクなConvolution層によるmnistの分類コードを使いました.
PlaidMLはkerasでコードを記述可能であるため, ほぼ同様のコードを使い計測しております.
(バッチサイズのデフォルト値が異なるので, tensorflow-macosのデフォルト値にそろえて測定しております.) よって実行結果は, アルゴリズムに差はなく, 各フレームワークの実行効率の良さや, ハードウェアの性能にほぼ依存するかと思います.
評価方法
3回実行し実行時間の平均値で評価します.
実行結果
MacBook Pro Late 2013 with Radeon RX580 eGPU(tensorflow-macos) | MacBook Pro Late 2013 with Radeon RX580 eGPU(PlaidML) | |
---|---|---|
5epochにかかった時間 | 771.53s | 1251.12s |
tensorflow-macosとPlaidMLを比較した場合, 今回の環境下においてtensorflow-macosが1.62倍高速に動作することがわかりました.
また, (フェアな比較ではないですが) @tomoyaeibuさんのm1 mac book airの結果と比較しても, 3.40倍高速に動作することがわかります.
m1チップのGPUも高速ですが, やはりRadeon等のGPUのほうが強力で, eGPU環境下でも十分高速に動作することがわかりました.
最後に
今回, Intel MacによるeGPUを使った深層学習のパフォーマンス計測を実施しました.
ある特定のニューラルネットワークの学習にtensorflow-macosとPlaidMLを利用し, tensorflow-macosが高速に動作することがわかりました.
また, m1チップとeGPU(Radeon RX580)とを比較し, eGPUで十分高速に深層学習できることがわかりました. ただこの比較は, コスパを考えた場合フェアな比較ではないと思っており, 参考程度の情報と考えております.
他のニューラルネットワークの構造(VGGやResNet)に対しても同様の結果が得られるか不明なため, また気が向いた際に追加で調査したいと思います.
今回, eGPUのデータ転送にThunderbolt2を利用しております. これがボトルネックになっているかどうかが気になっております.