機械学習、ディープラーニングで学習および推論を行う時、特に学習にかかる時間はとても長いです。
1週間PCを回しっぱなしなんて事も。。。。
そこで学習速度の向上のためにGPUを導入します。
GPUは、超大量のコア数(計算する人の人数とでも思ってください)があるのが特徴。
一つ一つの計算能力ではCPU(いわゆる普通のコンピュータの頭脳です)に劣るのですが、CPUではせいぜい10〜20コアくらいのところ数千というコア数で計算できます。
そのため同じ計算を一斉に行う機械学習の様な処理ではCPUよりもはるかに速い計算処理を行う事が可能です。
では実際にどのくらい速いのでしょうか?
今回機械学習・ディープラーニングの標準GPUと言えるNvidiaのGPUを取り上げ、Windows、Ubuntu 双方について検証します。
(ちなみにMACはNvidiaのGPUの搭載が大人の事情で現在できませんので検証できません、、、)
使用機種
WindowsとUbuntuのデュアルブート
OS:Windows10
構成
CPU:Intel Core i9-9990K
GPU:Nvidia Geforce RTX2080ti
ドライバー:430.86
CUDA:10.2
CuDNN:7.5
ちなみに上図ではGPUで学習中の使用状況を表示しています。
計算には56%、メモリは10GBほど使用しているのがみて取れます。
まずはKerasを使用し、バックエンドでTensorFlowを動かしています。
この手の検証で使用される代表手法と言えるmnist(画像認識の学習)ファイルを使用して検証してみましょう。
GPUとCPUの学習速度検証
Windows編 mnistをCPUで
1epoch37秒ほどです。
12 epoch学習させていますので7分25秒ほどです。
Windows編 mnistをGPUで
1 epoch3.5秒ほど。
12 epochでも45.5秒です。
約10倍という速度で学習できています。
Windows編 CPUで音楽データを500曲学習
今度は音楽データを学習させました。
音楽データは全て8小節の単音データ。
TensorFlowを使用しています。
結果は上図の通り。
10回の学習x10で100回
平均14秒x10で2分20秒ほどです。
Windows編 GPUで音楽データを500曲学習
こちらも10回の学習x10で100回
平均3.4秒x10で34秒ほどです。
CPUに比べ約4倍の学習速度です。
先ほどのMNISTに比べ学習データが少ないので速度の向上比率も控えめですがさらに学習データが増えるとより学習速度に差が出るのでしょう。
Ubuntuでも検証
Ubuntuでも検証しましょう。
OS:Ubuntu18.04
構成
CPU:Intel Core i9-9990K
GPU:Nvidia Geforce RTX2080ti
は同様ですが、
GPUドライバー:410.56
CUDA:10.1
CuDNN:7.4
となっています。
Windowsと変更があるのはOS対応状況などの関係です。
GPU環境はドライバー、CUDA、CuDNNのバージョンを揃えないとエラーが出て動作しないので慎重に構築しないといけません。(かなり環境構築難しいです、、、汗)
ちなみにUbuntu環境では推論時に高速になるTensorRTも導入してあります。
https://developer.nvidia.com/tensorrt
が今回の検証は学習のみです。
Ubuntu編 mnistをCPUで
1epoch25秒ほどです。
12 epoch学習させていますので5分6秒ほどです。
Ubuntu編 mnistをGPUで
1epoch5秒弱ほどです。
12 epoch学習させていますので50秒ほどです。
CPUに比べ5倍強という速さでした。
Windowに比べ速度向上が少なかったですが、CPUがUbuntuの方がかなり速かった事、GPUはWindowsの方が速かった事が原因です。
GPUはWindowsの方がドライバとCUDAのバージョンが新しかった事が原因でしょうか?
CPUについてはそもそもUbuntuの方が負荷が少ないとかがあるのかもしれませんが、詳細な原因はなんとも断言はできません。。。。
Ubuntu編 CPUで音楽データを500曲学習
Windowsと同じく500曲を学習させています。
10回の学習x10で100回
平均7秒x10で70秒ほどです。
Ubuntu編 GPUで音楽データを500曲学習
同じく500曲をGPUで学習。
平均2秒x10で20秒ほどです。
CPUに比べ約3.5倍の学習速度です。
Windowsに近い検証結果が出ていますが、こちらはどちらも学習速度が速いですね。
特にCPUで顕著ではあります。
ちなみによく質問を受けますが、
GPUは並列処理(たくさんのデータを同時に計算)によって速くなるため、少ないデータの時に導入してもあまり効果が見込めない事多々あります。
これは当然の事なので不思議がらずにご心配なく。
いかがでしたか?
GPU導入による学習速度の向上は効果絶大です。
趣味程度ならまだしもですが、業務での導入であれば必須と言えるのではないでしょうか?
弊社では機械学習。ディープラーニング用のGPU環境構築業務を行っております。
導入でお困りの方、どうぞご相談ください。