機械学習・ディープラーニング GPUとCPUの速度の違いはどのくらいなのか? Windows、Ubuntu双方で検証



機械学習、ディープラーニングで学習および推論を行う時、特に学習にかかる時間はとても長いです。
1週間PCを回しっぱなしなんて事も。。。。

そこで学習速度の向上のためにGPUを導入します。

GPUは、超大量のコア数(計算する人の人数とでも思ってください)があるのが特徴。
一つ一つの計算能力ではCPU(いわゆる普通のコンピュータの頭脳です)に劣るのですが、CPUではせいぜい10〜20コアくらいのところ数千というコア数で計算できます。
そのため同じ計算を一斉に行う機械学習の様な処理ではCPUよりもはるかに速い計算処理を行う事が可能です。

では実際にどのくらい速いのでしょうか?

今回機械学習・ディープラーニングの標準GPUと言えるNvidiaのGPUを取り上げ、Windows、Ubuntu 双方について検証します。
(ちなみにMACはNvidiaのGPUの搭載が大人の事情で現在できませんので検証できません、、、)


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環境構築業務を行っております。
導入でお困りの方、どうぞご相談ください。