はじめに
計算性能は必須
もし、まともにディープラーニングをやりたいと思うのであれば、コンピュータの性能を無視することはできません。もともとニューラルネットワークは計算量の問題があって今まで冷や飯を食ってきた技術です。
計算性能の向上がニューラルネットを大きく支えていると言っても過言ではないのです。
どのフレームワークを使っても、大抵はMnistを使った画像認識のタスクがチュートリアルにあるでしょう。これは次元のベクトルを入力データとして受け取ります。
これだけでも中々膨大な計算量になりそうなのが何となく分かるでしょうか。
入力が次元で、出力が
次元なので、単層のパーセプトロンだとしても
個の重みパラメータと、
個のバイアスパラメータが必要になってきます。
当然層が増えれば増えるほどパラメータも増えていき、通常何万〜何十万というパラメータの最適化を行わなければなりません。
やはりコンピュータの性能は無視できません。
CPUとGPU
CPU
CPU(Central Processing Unit)は与えられた処理を1つ1つこなします。
非常に頭が良いので、コンピュータの中心的存在です。ブラウザを開きながらも、アプリケーションを動作させ、メールを送信しながら音楽を聴くなんてことも平気でできてしまいます。
CPUは与えられた処理を1つ1つしかこなせませんが、それでも人間にはわからない圧倒的なスピードで処理を行い、あたかも同時に行われているかのように見せることができます。
しかし、ディープラーニングで必要なのはあくまで計算力です。CPUはもはや器用貧乏に見えてしまいます(コンピュータにCPUは必要ですが、計算を丸投げするには向いていません)。
GPU
一方GPU(graphics processing units)というのは元々画像処理のためのハードです。
ハイビジョン化が進む中でピクセルが増えるだけでなく、画像としての質、データ量自体が膨大にふくれあがってきました。性能の良くないコンピュータでは、きっと高画質のゲームを楽しむことはできないでしょう。GPUと言えば一般向けにはゲームを楽しむためのハードウェアと言ったところでした。
高画質の動画を適切に処理するために、並列計算に特化したアーキテクチャは、次第に科学技術計算の分野で着目されるようになり、一般的な計算に対しても応用されるようになりました。
GPGPU
3DCGを扱うゲームの画像処理技術を始め、CADやCAEを用いたシミュレーション技術などにも応用されるようになり、そして一般的な科学技術計算でも扱われるようになりました。このような利用の仕方をGPGPU(General-purpose computing on graphics processing units)と言います。
信号処理や制御工学、最適化問題などあらゆる場面で並列計算は活躍できます。機械学習やディープラーニングも例外ではありません。
画像処理ユニットと言っても、それはコンピュータから見れば結局はバイナリの集合体であり、それが実は画像で無くても何でも扱えるということです。
ベンチマーク
様々な環境での実験
上記の記事の結果を述べれば、
1.CPUのみを使う場合は、CPUの性能差で速度が(数倍ほど)変わる。
2.しかし最高性能を誇るCPUでも、並のGPUにすら歯が立たない。(8倍)
3.どのメーカーのパソコンでどのOSを使おうともCPUに比べGPUは速い。(数十倍)
要するにGPUすごいということです。
ディープラーニングではハイパーパラメータの調整が非常に難しいため、何度も何度も同じデータに対して学習を行い、どのハイパーパラメータがいいのかを検証せねばなりません。
研究、実験のテンポを大きく左右する重要なところです。
ニューラルネットの構造を変えた実験
同じニューラルネットの構造を計算するならば、当然CPU<GPUであり、更に個々の性能差が出るのは当たり前の話です。ここではニューラルネットの構造をいろいろ変えた場合にGPUはの性能がどうなるのかを検証しています。
GPUの性能を測る指標はいろいろあります。
コア数、クロック、メモリ量、メモリクロック、バンド幅などです。GPUで計算を行う時、計算速度を決定するのは、この中で最も足を引っ張るものです(ボトルネックと言う)。
どれが足を引っ張ることになるのかは、具体的な計算(すなわちニューラルネットの構造)によって変わります。それを検証しているのが上記の記事というわけです。
具体的にどんなニューラルネットを扱いたいか決まっているのならば、そのあたりをこだわってみるのも良いかもしれません。
GPUの情報
ディープラーニングのGPU
GPUを出しているメーカーは1つではありませんが、基本的にディープラーニングをやるならば「NVIDIA」のを選ぶことになります。
理由は、現在のフレームワークのほとんどがNVINIAが出しているソフトウェアである「CUDAとCuDNN」に依存しているためです。これ以外は認識してくれません。
NVIDIA製で一般向けのシリーズは「GeForce」と呼ばれるシリーズで、
「GeForce GTX 1080」
などと表記されます。この場合においては、
「GeForce」の「GTX」の「10」の「80」という区切りになっています。
大雑把に言えば、最後の二桁の数字が性能を表しています。従って
「GeForce GTX 1050」と「GeForce GTX 980」ですと、後者の方が性能が高いです。
決して「1050」と「980」ではなく「10の50」と「9の80」という見方になります。
TensorFlowの提示条件
TensorFlowは性能の良くないGPUは使ってくれません。認識はしても「ヘボいので使いません」って言われます。ここには注意をしてください。
もしもGPUにお金を掛ける気がなく、手元のでとりあえず試してみたいというのであれば、Chainerなどの他のフレームワークを使ったほうが良いかもしれません。TensorFlowは計算資源バカバカ使うので、ハード面を整えられない場合は対して恩恵ないかと思います。
ただし、TensorFlowはCUDAやCuDNNを入れておきさえすれば、あとはプログラム上で何か特殊な操作をする必要はなく、勝手にGPUを認識して計算を実行してくれます。
CPUの環境からGPUをの環境へ移る場合でも、プログラムは変更がいらないのです。当然GPUを複数挿していっても同じことで、とりあえず金さえ掛ければ強化していくことができます。
Chainerの場合は、numpyの配列をcupyに変更する必要があります。
しかし、かなりモジュール化が進んでおり、numpyで渡した後でも一行でGPU用に変更することができるのでそれ程手間ではありません。
ただし、マルチGPUを扱う場合は、どうやらどのGPUの値を渡すのかをプログラム上で書かなければならないようです。上手く書けばニューラルネットの構造に適した最適な処理を選べる反面、手間は増えてしまうでしょう。
本題とはズレますが、マルチ化するのかどうかもフレームワーク選択の指針になると言えます。
2017年GPUの早見表(デスクトップ向け)
価格と性能のバランスを考えて、「◎、○、△、×」で評価しています。
3〜4万円を出せば「GeForce GTX1060 6GB」が買えます。
おそらくコレが手の届きやすく、かつ性能の良い絶妙なラインかなと思います。
また「GeForce GTX1080」(約80000円)は現状「GeForce GTX」シリーズ最速(約80000円)になっています。
新しく「Titan」シリーズの「Titan X」が出ていますが、これはバカ高い(180000円)ので余程のこだわりがない限りはやめておきましょう。しかも性能をしっかり出すためには水冷が必要で、自分で準備するには手間が多すぎます。(専門業者を見れば、必ずTitanXは水冷になっています)
こだわりがなければ、予算に応じて
「GeForce GTX 10○○」シリーズから選べばいいと思います。
玄人志向 ビデオカードGEFORCE GTX 1060搭載 GF-GTX1060-6GB/OC/DF
- 出版社/メーカー: 玄人志向
- 発売日: 2016/07/19
- メディア: Personal Computers
- この商品を含むブログを見る
玄人志向 ビデオカードGEFORCE GTX 1070搭載 GF-GTX1070-E8GB/OC2/DF
- 出版社/メーカー: 玄人志向
- 発売日: 2016/08/19
- メディア: Personal Computers
- この商品を含むブログを見る
紹介
最新ハード、量子コンピュータとは?
ディープラーニングのフレームワーク
ディープラーニング初心者へ