ディープラーニングに関するGPU

ディープラーニング

ディープマインドの囲碁ソフトAlphaG0や、プリファード・ネットワークス社の線画に色を付ける自動着色システムPaintsChainerなどでも使われています。近年、巨大で複雑なディープラーニングを使って、様々な問題の解決ができるようになってきました。ディープラーニングの計算は非常に計算が重く、普通のCPUだけで計算するととても時間がかかります。そんな中、現在のディープラーニングの計算の高速化にはGPU(Graphics Processing Unit)が使われています。

何故GPUが使われるのか

特徴の違い

CPUは高性能のコアが少数(通常4コア~64コア程度)載っているのに対して、GPUは比較的低性能のコアが大量(600~5000コア程度)載っているデバイスです。ディープラーニングでは、行列計算を多用します。そして、このような計算において、GPUは無類の強さを誇ります。GPUはCPUのような柔軟な計算(条件分岐がたくさんあるような計算や、並列化ができない計算)は不得意ですが、そのかわりに単純な計算を並列で計算することが得意です。この特徴がディープラーニングと相性がよく、なおかつ高性能なのに比較的安価であることも「深層学習するならGPU」という追い風になりました。

GPUの種類

NVIDIAとAMD

現在は、GPUのメーカとして有名なのは2社、NVIDIAとAMDです。NVIDIA製のGPUには、Geforce、Quadro、Teslaの3つのブランドがあります。そして、AMDは、Radeon Pro、Redeon Instinctがあります。一般の人が購入する機会があるのは、GeforceかRadeonでしょう。これらはゲーマや科学計算用マシンを安価に組みたい人に人気です。どちらかというと、AMDのグラフィックボードよりはNVIDIAのグラフィックボードの方が深層学習の分野では活躍しています。主要なディープラーニングフレームワークが対応するまでは、AMD製グラフィックボードでの深層学習は初心者には難しいかもしれません。AMDも深層学習・機械学習の分野への対応を進めているので、今後の動向に注目です。

CUDAとOpenCL

GPUを使った計算を行うために、CUDAやOpenCLのようなGPU開発・実行環境が使われます。大雑把に言うと、CUDAはNVIDIAのGPUで使われるもので、OpenCLは様々なデバイスに対応しています。これらの言語はC言語の拡張ですが、Pythonからディープラーニングを開発する人はあまり直接触ることはないはずなので心配しないでください。実は、TensoftlowやPytorch、Chainerなどの有名なディープラーニングフレームワークは内部でCUDAやOpenCLを使っています。ユーザーが直接CUDAなどを書かなくてもいいように、フレームワークが機能を提供してくれています。そして、ディープラーニングフレームワークのOpenCL対応が遅れているのに対して、CUDAは広く使われています。だから現状では、深層学習用のGPUと言ったらほぼNVIDIA製品となっているんですね。さらに、CUDAやOpenCLで高速なプログラムを書くには、GPUの特性をしっかりとしっていないといけません。その点、Pythonのフレームワークならば、そのあたりをあまり気にすることなく、高速なプログラムが書けて便利です。

最新NVIDIA GPU

最新NVIDIA GPUは、リアルタイムレイトレーシングとAI強化グラフィックスなどの新機能を備え、GTX1080tiよりも数段高性能であることを謳っています。また、ディープラーニングのベンチマークではないですが、ゲーマー向けの情報サイトにRX2080tiの特徴や比較についてまとめられた記事などもあります。さらに、RTXシリーズやGTX10X0シリーズなどもディープラーニング界隈も移行していくことになるでしょう。

まとめ

学習や趣味ように安く深層学習用計算機をローカルに作りたいなら、GTX1060は価格に対するパフォーマンスがとてもいいです。趣味のグラフィックカードに7万円も出したくないという方は多いと思いますが、GTX1060は3万円程度から手に入れることができます。元々お手頃価格でしたが、現在はRTX20シリーズが出たことでさらに安くなっている製品もあり、品切れになるまでですがいい選択肢になります。メモリが6GBと少なめではありますが、研究用途やKaggleで上位を狙いたいというわけではなく、個人の学習用途や趣味で使うのに向いています。これから、深層学習を始めようという方は、まずはGTX1060を使ってみてはいかがでしょうか。性能に不満を感じた頃には、上位カードがもっとやすくなっているかもしれませんよ。