« LLVM | トップページ | 3D-CGプログラミング環境を考えて見る »

2017年8月 7日 (月)

Deep Learning と演算器の考察

Windows機にCaffeをインストールしてみました。

使いこなそうとすると、Linux + CUDA なのだと思いますが、普段Linux必要なときはVirtualBoxで済ませている向きとしては、その為にもう一台PCを用意するとかはハードルが高いわけです。AWS使うとかの手ももちろんあるのでしょうがDeep Learning自体を深くやりたいわけではないので、ここはコストを書けずにWindowsで味見してみました。
というか、よく考えたら手元のPCにCUDA使えるボード挿してなかったです(おいおい)。

ということで、実行環境はCPU版で遊ぶ程度に留めて、計算機科学の観点からまずは演算器について、Deep Learning を考えて見ます。

まず、演算器について必要精度について調べて見ました。
さらっとぐぐると下記の論文がヒットしました。

Deep Learning with Limited Numerical Precision
Suyog Gupta, Ankur Agrawal, Kailash Gopalakrishnan, Pritish Narayanan
(Submitted on 9 Feb 2015)
https://arxiv.org/abs/1502.02551

FP16からまださらに削っていく余地すらありそうです。
とはいえ、汎用計算機で計算する場合、今のところFP16が最小単位になりそうです。

FP32かFP16で計算することになると思うのですが、Intel CPU と nVidia GPU について、状況を調べて見ます。

まず、Intel CPU に FP16 を扱う機能は今のところなさそうです。
ですので、FP32でFMA(積和)命令を回すというのが基本になりそうです。
Coreプロセッサでは Haswell以降の世代で 1コアに付き2個の256bit FMAユニットがありますので、1コアで16FLOPS/Clockの演算が出来ることになります。

余談ですが、256bitのSIMD命令が2並列で発行可能というのも不思議な感じがします、スーパースカラ or HT での活用となるのだと思います512bitにしないのはなぜなんだろうと。

ちなみに、Wikipedia の Xeon KNC の説明(https://ja.wikipedia.org/wiki/Xeon_Phi)で、

「SIMD 命令は512ビットであり、倍精度浮動小数点数を8つ同時に扱うことができ、また FMA をサポートしているため、16 FLOPS/cycle である。なお同時期に発売されたHaswellマイクロアーキテクチャの Intel AVX2 は256ビットであり、同時に扱うことができる倍精度浮動小数点数は4つだが、FMA を2つ同時に計算できるため、同じく 16 FLOPS/cycle である」

とのことで、演算性能は同じだそうです。デコーダーの負担を少なく演算帯域を増やしたいのがSIMDの発想なのでバランスの難しいところなのでしょう。ちなみにKNL世代でも、AVX-1024とはいかず、512bit演算器×2への拡張のようです。

さて、次に nVidiaのGPUを見てみます。
どうも調べて見ると最新のPascalアーキテクチャには2種類合って、Teslaとかの科学計算向けのGP100(CC6.0)と、グラフィックスカードとしてのGP102(CC6.1)とがあるようです。
GP100 は FP64:FP32:FP16 で、演算性能が 1:2:4 なのに対し、GP102では 1:32:32 になっているようです。

どちらもFP32の性能は同じようなので、GP102の方が新しいにもかかわらず、倍精度が遅いのと、FP16にしても早くならない(メモリとバス帯域は節約)ということのようです。
グラフィックス性能を維持したまま、科学計算向けにはコストをかけずに対応できる範囲で留めたとい事と思われますが、Titan X や GTX1080Ti あたりで、Deep Learning な場合は、FP16にしても早くならない点は注意が必要な気がします。

次に汎用計算機ではなく、FPGAを考えて見ます。
FPGAの場合、精度は自在に設定できます。

https://www.xilinx.com/support/documentation/white_papers/wp486-deep-learning-int8.pdf

なんかを読むと、精度はINT8でもDPは成り立つといいつつ、DSP1個に2乗算突っ込むことを提案しているようです。
上記の文書自体は今のDSPをそのまま使ったアプローチのようですが、ひょっとすると将来はこういう使い方のやりやすい方向に進化していくのかもしれません。
FPGAのDSP数も近年かなり増えてきていますので、素の演算能力としては、CPUとGPUの間ぐらいにはいそうな気がします。

なにより電力考えた場合に、FPGAは圧勝なようです。
命令デコードが不要なのと、内蔵Block-SRAMに格納している範囲の係数は低電力&超広帯域で読み出せるわけですからそれはそうだろうとは思います。
データセンターにおいてもランニングコストとしての電力が問題になっているようですので、各社が力を入れるのも頷けます。

難点を言うとFPGAはクロックが上がらないのですよね。
ハードマクロのDSP部分だけでもよいので倍速クロックとかで動いて見かけ上のDSPの数を倍にしてくれるとかあると嬉しいのですけどね。

« LLVM | トップページ | 3D-CGプログラミング環境を考えて見る »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/560384/65631727

この記事へのトラックバック一覧です: Deep Learning と演算器の考察:

« LLVM | トップページ | 3D-CGプログラミング環境を考えて見る »