GPUでDeep Learningの学習がどれだけ速くなるか
先週、オーダーしていた新しいPCが届きました。グラフィックカードにGEFORCE RTX 3090を搭載、メモリ64Gバイト、CPUは8コア2.5GHzという自分史上最高スペックのマシンです。週末にTensorflow等のDeep Learning用ソフトウェアのセットアップを行い、GPUによる高速化効果を確認しました。
比較に用いたGPU無しの環境はふだん使っているノートパソコンですが、AMD RYZEN(8コア、1.7GHz)、メモリ32Gバイトとそれなりに強力な(と思う)マシンです。
下の表に時間計測の結果をまとめましたが、当然ながらGPUの効果(どれだけ速くなるか)はタスクの内容(ネットワークの層の数、ニューロンの数)によってだいぶ異なっていました。
学習タスク | GPU無し | GPUあり | GPUの効果 | CUDA使用率 |
---|---|---|---|---|
A.画像分類 | 59秒 | 32秒 | 1.8倍 | 63% |
B.3DデータのVAE | 4時間17分36秒 | 1分11秒 | 217.7倍 | 100% |
Aの画像分類のタスクは教科書に載っているもので写真に写っている鳥や馬、自動車など10種類の動物や乗り物を識別するというものです。
隠れ層の数は2、学習するパラメータ数は646,260、32x32 のRGB画像5万枚を学習に使っていて機械学習のタスクとしては軽いほうだと思います。GPU有りと無しの環境とで処理時間は1.8倍程度にしか上がっていません。CPUのクロック差で速くなっている分もあると考えるとGPUの効果はかなり限定的といえます。
一方のBはロボットの3Dモデル生成のために私が作成中の変分オートエンコーダー(VAE)と呼ばれるタイプのネットワークの学習です。隠れ層、畳込み層の数は9、学習するパラメータ数は7,395,841、64x64x64の3Dモデル1280個を学習に使っています。こちらはGPU有無の差が200倍以上になっています。タスクの規模が比較的大きくて、かつ計算処理の中で並列に実行できる割合が高ければCUDAコア数の分だけ並列に(つまり高速に)実行できるということなんでしょう。ちなみにRTX 3090は10496個のCUDAコアを持っていますが、学習タスクを走らせているあいだはほぼ100%使われていました。