趣味のTensorFlowのハードウェアとGPUクラウド事情

## 目次

- 自分がやっていること、カジュアルディープラーニング
- TensorFlowで遊ぶために必要なハードウェア
- 自前PC編
- クラウドサービス編

## 自分がやっていること、カジュアルディープラーニング

もともとはカーネル主成分分析系統の理論で顔画像認識とかやったり諸々のコンピュータビジョンのあれこれでお仕事してたりしてました。最近はコンピュータビジョンのお仕事からは離れてフツーの開発をしています。

趣味でプログラミングもしていて今年はTensorFlowを始めました。[TensorFlow将棋ソフト開発日誌 目次](http://qiita.com/YusukeSuzuki@github/items/30bcaf7b14f015493121) という形で開発の経過を書いています。最近は自宅のPCの能力が不足気味（GTX 1080）でちょっと開発速度が低下気味。年内中に1手指したいのだけれどどうなることやら。

こういうどう考えてもお金にならない完全に趣味なディープラーニングを自分は「カジュアルディープラーニング」と呼んでいます。ディープラーニングのおかげで様々な問題がそれなり気軽に学習できるようになって産業応用が期待されるとともに、どう考えてもお金にならない「やってみたらおもしろいんじゃね？」って感じの趣味なこともやれるようになりました。趣味のプログラムがあるのなら趣味のディープラーニングがあったっていいじゃない、ということでカジュアルディープラーニングなわけです。

## TensorFlowで遊ぶために必要なハードウェア

Twitterで「tensorflow」で検索しているとCPUで頑張ろうとしている人を結構見かけますが基本的にはそこそこのnVidia GPUを調達した方がよいです。TensorFlowのチュートリアルでいうと「[Softmax Regressions](https://www.tensorflow.org/versions/r0.12/tutorials/mnist/beginners/index.html#softmax-regressions)」あたりまでならCPUでも十分できますが「[Convolution and Pooling](https://www.tensorflow.org/versions/r0.12/tutorials/mnist/pros/index.html#convolution-and-pooling)」あたりになるとCPUでは学習に10分、20分、30分と時間がかかってきます。これより複雑なモデルだとさらに時間がかかってしまいます。

配布されているモデルを動かすだけであればCPUでもなんとかなるとは思うのですが、ニューラルネットワークの学習まで試したい、身につけたい、自分で考えたいとなると学習処理にかかる時間は短くした方がよいです。

5万円～9万円のGPUでもCPUと比較すれば劇的に高速化するので長期的にディープラーニングを学びたいというのであれば投資を検討しましょう。

## 自前PC編

いまのところTensorFlowであれTorchであれChainerであれnVidiaのGPUでCUDAを利用する以外の選択肢はありません。これから購入するのであればGTX 1070/GTX 1080あたりが値段の現実感でもおすすめです。

### 参考サイト
- [phoronix](http://www.phoronix.com/scan.php?page=home) : GPUのベンチマークがよく載っています `GTX 1080 alexnet benchmark` `titan x alexnet benchmark` などで検索すると参考になる記事が出てきます。
- [HPCDYC blog](http://server-gear.com/shop/index.php/blog/) : 研究用のハイパフォーマンスマシンを扱うショップのブログです。P100など高額なカードの話題が多いですがGTX 1080での学習のベンチマークなどもあって参考になります。
- [自作とゲームと趣味の日々](http://blog.livedoor.jp/wisteriear/) : ディープラーニングのサイトではないのですがGPUの発熱なども含めて詳しく書いてくれているので自分でPCを組もうとするときに参考になります。

### 個々のカードについて
- GTX 1060 : グラフィックメモリ6GBのモデルで35000円前後。ディープラーニング系のベンチマークで見かけないため実力はよくわかりません。スペックだけを見れば「CPU使ってるよりはずいぶんマシ」くらいは働いてくれそう。メモリが少ないのが若干不安。使っている人の感想を聞きたい。
- GTX 1070 : 40000円～55000円くらい。[phoronixのベンチマーク記事(GTX 1080との比較に注目)](http://www.phoronix.com/scan.php?page=article&item=nvidia-gtx-1070&num=4)。メモリは8GBで「フツーに買えるGPU」としては最大級で十分。技術チャレンジではなく技術学習目的として経済的にすませたいのであればここら辺でも良いかもしれない。
- GTX 1080 : 80000円前後。最近ご祝儀価格が終わったのか70000円台の製品も見かけるようになりました。フツーのお財布感覚の人が買える最高峰なのかなーって思います。
- nVidia Titan X : [amazon.co.jp](http://amzn.asia/0vCpFhT)で171204円、[amazon.com](http://a.co/gYRKUFY)で1699.99ドル(個人輸入になる)、[nVidia直販](http://www.geforce.com/hardware/10series/titan-x-pascal)で1200ドル（個人輸入になる）。現時点でのコンシューマ向けの最高峰となり業務のディープラーニングで使われている話もよく聞く。メモリ容量も12GBと余裕がある。お財布がふとましい人は是非買ってみてください。
- GTX 1080ti : 未発売。来年のCESで発表されるという噂がある。性能はGTX 1080とTitan Xの中間くらい、価格も同じく中間くらい、メモリ容量は10GBという噂系ニュースをよく見る。GTX 1080とくらべてメモリ容量に余裕があるのが魅力。気になる人はGoogleニュースで「gtx 1080ti」を検索してチェックしておくと良い。

### マルチGPUについて

技術習得からさらに進んで自分の考えたモデル、自分が解きたい課題に取り組みたいということになるとまだ計算パワーが足りない。そこでマルチGPUになります。

注意したいのは発熱と電源容量です。

発熱については[The Ultimate King 「TITAN X Pascal SLI」 レビュー。GTX 1080と徹底比較](http://blog.livedoor.jp/wisteriear/archives/1060133368.html#jump5)においてTitan Xでデュアル構成だと空冷ではサーマルリミットで本来の性能が出せないとレポートされています。自作PCに詳しい人に相談したり自作ショップの人と相談したりしながら検討した方がよいと思います。

電源についてはGTX 1080にしろTitan Xにしろ1枚250Wを要求します。4枚構成を組んだ場合、CPU他を含めて1500Wから2000Wクラスの電源を検討することになります。自作PCでは最大容量クラスであるためちょっとお高くなってきます。またいわゆる普通のPCよりはるかに大きな消費電力（冷暖房器具クラス）となるためコンセント、宅内配線、ブレーカアンペアなどにも気をつけることになります。宅内配線で独立した系統のコンセントに直刺し、タップやタコ足厳禁みたいな話になります。

例として[ENERMAX MAXREVO / EMR1500EWT](http://www.enermaxjapan.com/MAXREVO_top/EMR1500EWT_top.html)の注意書きを引用します。

> 100V環境下でご使用いただく場合、1500W の出⼒が上限となっております。
> 本製品は、100Vコンセントの電⼒供給能⼒の上限（1500W）まで使用する可能性があります。
以下の事項をご確認のいただいた上で、安全な環境でご使用いただきますようお願いいたします。
> ・ブレーカー容量が、他の使用機器や使用状況に応じて⼗分であることを確認して下さい。
> ・接続先と同系統の電⼒コンセントには、同時に他の機器を繋がないで下さい。（別系統の屋内配線に接
続して下さい）
> ※100Vコンセント1系統あたりの最大供給能⼒は1500Wです。
> ・電源タップを経由しての配線は絶対に⾏なわないで下さい。
> 適切な⽔準の電⼒供給設備を用意しなかったことが原因で⽣じる⼈的損害・物的損害、機会損失、その他のあらゆる損害等につきまして、製造元・代理店・販売店は⼀切の責任を負いません。

## クラウドサービス編

いろいろなクラウドサーバ事業者がGPUを利用できるインスタンスを提供・準備しています。今回は以下のサービスの「価格対性能比ってだいたい大雑把にざっくり言うとどんなもんなんだろう」ということを調べてみました。

- Amazon EC2 p2インスタンス
- Microsoft Azure nc
- さくら 高火力コンピューティング

時間貸し、年間契約をすべて時間単価になおした上でマシン性能として単精度のGFLOPS値（マルチGPUは単純にコア数を乗算）を時間単価で割った値で比べてみました。アーキテクチャの違いやGPU以外のスペックには留意していないことに注意してください。

以下、グラフです。

![gpu_cloud_final.png](https://qiita-image-store.s3.amazonaws.com/0/25288/ab881686-9fc9-7b17-3496-1b1fe747efc5.png)


集計シートです。

![gpu-1.png](https://qiita-image-store.s3.amazonaws.com/0/25288/44193fca-8830-ca0c-3236-b8af348229f8.png)

以下、感想です。

- 時間貸しはやっぱり割高。
- さくらのGeForce Titan Xの時間貸しが（サービス開始は来年だが）妙にコスパが良い。
- さくらもAmazonも年間契約するとコスパが上がるが時間貸しとの比較の前提として「365日24時間GPUを使いつづけてようやく元がとれる」という感じ。しかも100万200万とお金がかかる。
- P100がGFLOPSの比較だと奮わないがアーキテクチャもメモリ帯域も違うのでベンチマークが見てみたい。
- とりあえず実験的にさくらのGeForce Titan X x4時間貸しを使ってみたいなー。

カジュアルディープラーニングとしては長期契約は無理めなので「いい感じのモデルができたぜ！勉強会までに一気にデータ作ってしまうか！」というここぞというときに時間貸しのインスタンスを使う程度でしょうか。

ちなみに私はEC2 p2インスタンスを試すのにセットアップでハマったりパフォーマンスの出ないコードであることに気づいて修正したりして3日で3万溶かしました。

GPUの数が増えると学習の際のGPU利用率を最適化するためのチューニングとか学習データの転送とかでやることは増えるんですけどねー。

## まとめ、っていうか俺はどうするの？

TensorFlow将棋について。年内はアルゴリズムやモデルの検討、学習以外に必要なコードを書くことに集中します。学習については収束するものかどうか確かめる程度で。

年明けにGTX 1080tiが出たらそれで2枚刺しを組もうと予定しています。レッツお貯金！