"機械学習","信号解析","ディープラーニング"の勉強

読者です 読者をやめる 読者になる 読者になる

"機械学習","信号解析","ディープラーニング"の勉強

"機械学習","信号解析","ディープラーニング"について、それぞれ勉強しながらブログにまとめていきます。テーマは気分によってバラバラかもしれません。

Deep learningに必須なハード:GPU

人工知能 人工知能-ディープラーニング

 はじめに

計算性能は必須

もし、まともにディープラーニングをやりたいと思うのであれば、コンピュータの性能を無視することはできません。もともとニューラルネットワークは計算量の問題があって今まで冷や飯を食ってきた技術です。

 

計算性能の向上がニューラルネットを大きく支えていると言っても過言ではないのです。

 

どのフレームワークを使っても、大抵はMnistを使った画像認識のタスクがチュートリアルにあるでしょう。これは28×28=784次元のベクトルを入力データとして受け取ります。

これだけでも中々膨大な計算量になりそうなのが何となく分かるでしょうか。

入力が784次元で、出力が10次元なので、単層のパーセプトロンだとしても7840個の重みパラメータと、10個のバイアスパラメータが必要になってきます。

 

当然層が増えれば増えるほどパラメータも増えていき、通常何万〜何十万というパラメータの最適化を行わなければなりません。

 

やはりコンピュータの性能は無視できません。

 

CPUとGPU

CPU

「CPU」の画像検索結果「CPU」の画像検索結果

CPU(Central Processing Unit)は与えられた処理を1つ1つこなします。

非常に頭が良いので、コンピュータの中心的存在です。ブラウザを開きながらも、アプリケーションを動作させ、メールを送信しながら音楽を聴くなんてことも平気でできてしまいます。

CPUは与えられた処理を1つ1つしかこなせませんが、それでも人間にはわからない圧倒的なスピードで処理を行い、あたかも同時に行われているかのように見せることができます。

 

しかし、ディープラーニングで必要なのはあくまで計算力です。CPUはもはや器用貧乏に見えてしまいます(コンピュータにCPUは必要ですが、計算を丸投げするには向いていません)。

 

GPU

「GPU」の画像検索結果

一方GPU(graphics processing units)というのは元々画像処理のためのハードです。

ハイビジョン化が進む中でピクセルが増えるだけでなく、画像としての質、データ量自体が膨大にふくれあがってきました。性能の良くないコンピュータでは、きっと高画質のゲームを楽しむことはできないでしょう。GPUと言えば一般向けにはゲームを楽しむためのハードウェアと言ったところでした。

高画質の動画を適切に処理するために、並列計算に特化したアーキテクチャは、次第に科学技術計算の分野で着目されるようになり、一般的な計算に対しても応用されるようになりました。

 

GPGPU

3DCGを扱うゲームの画像処理技術を始め、CADやCAEを用いたシミュレーション技術などにも応用されるようになり、そして一般的な科学技術計算でも扱われるようになりました。このような利用の仕方をGPGPU(General-purpose computing on graphics processing units)と言います。

信号処理や制御工学、最適化問題などあらゆる場面で並列計算は活躍できます。機械学習やディープラーニングも例外ではありません。

画像処理ユニットと言っても、それはコンピュータから見れば結局はバイナリの集合体であり、それが実は画像で無くても何でも扱えるということです。

 

ベンチマーク

様々な環境での実験

qiita.com

上記の記事の結果を述べれば、

 

1.CPUのみを使う場合は、CPUの性能差で速度が(数倍ほど)変わる。

2.しかし最高性能を誇るCPUでも、並のGPUにすら歯が立たない。(8倍)

3.どのメーカーのパソコンでどのOSを使おうともCPUに比べGPUは速い。(数十倍)

 

要するにGPUすごいということです。

ディープラーニングではハイパーパラメータの調整が非常に難しいため、何度も何度も同じデータに対して学習を行い、どのハイパーパラメータがいいのかを検証せねばなりません。

研究、実験のテンポを大きく左右する重要なところです。

 

ニューラルネットの構造を変えた実験

www.hpc.co.jp

同じニューラルネットの構造を計算するならば、当然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が認識するGPUの性能

TensorFlowは性能の良くないGPUは使ってくれません。認識はしても「ヘボいので使いません」って言われます。ここには注意をしてください。

もしもGPUにお金を掛ける気がなく、手元のでとりあえず試してみたいというのであれば、Chainerなどの他のフレームワークを使ったほうが良いかもしれません。TensorFlowは計算資源バカバカ使うので、ハード面を整えられない場合は対して恩恵ないかと思います。

 

以下中国のサイトにGPUのCompute Capability(CC)が掲載されています。

tensorflowは現状CCが3.0以上で無ければ認識しません。

このことに注意してGPUを選びましょう。

www.voidcn.com

「GeForce GTX650」のCCは3.0

 

となっています。原則これより上位のGPUでないとTensorFlowでは使えません。

実用上は

 

「GeForce GTX750」以上がほしいですし、「GeForce GTX980」や「1060」があればコスト的にもベストでしょう。

 

 

2017年GPUの早見表(デスクトップ向け)

www.hpc.co.jp

価格と性能のバランスを考えて、「◎、○、△、×」で評価しています。

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

玄人志向 ビデオカードGEFORCE GTX 1060搭載 GF-GTX1060-6GB/OC/DF

 

 

 

玄人志向 ビデオカードGEFORCE GTX 1070搭載 GF-GTX1070-E8GB/OC2/DF

玄人志向 ビデオカードGEFORCE GTX 1070搭載 GF-GTX1070-E8GB/OC2/DF

 

紹介

最新ハード、量子コンピュータとは?

s0sem0y.hatenablog.com

 

ディープラーニングのフレームワーク

s0sem0y.hatenablog.com

s0sem0y.hatenablog.com

s0sem0y.hatenablog.com

 

ディープラーニング初心者へ

s0sem0y.hatenablog.com