ついに GA した N シリーズとその GPU の話

このエントリは「Microsoft Azure Advent Calendar 2016」の8日目です。

こんにちは、エヌビディアの佐々木です。

ついに、とうとう、N シリーズが GA しましたね。いやー、待った待った。
「[Azure N シリーズの一般提供を 12 月 1 日から開始](https://blogs.technet.microsoft.com/jpitpro/2016/11/22/azure-n-series-general-availability-on-december-1/)」

NVIDIA のブログでも紹介していますよ！
「[The GPU-Cloud Era – Powered by Microsoft Azure N-Series](https://blogs.nvidia.com/blog/2016/12/01/cloud-gpu-era-powered-by-microsoft-azure-n-series/)」

というわけで、せっかくGAしたNシリーズをちょっと試してみようと思ったのですが、すでに以前こんなのを書いていました。
「[Azure NシリーズでNVIDIA DIGITSをサクッと動かす](http://qiita.com/ksasaki/items/bd85786171424901b27d)」

というわけで今回はちょっと趣向を変えて、N シリーズに搭載されている GPU を簡単に説明してみたいと思います。

# Azure N シリーズ と NVIDIA GPU
皆さんご存じの通り、Azure の N シリーズには 2 種類あります。
![Azure_N.png](https://qiita-image-store.s3.amazonaws.com/0/32712/5d9eff69-15f9-aa9d-8248-d5cd0f193dbe.png)

「今まであまり GPU に縁がなかったけれど、N シリーズを契機にちょっと興味を持った」という方は、ひょっとするとこの表を見て **「ああ、"M"xx ってのは可視化用 GPU で、"K"xx ってのは演算用 GPU なのね」** と思ったかもしれません。

違うんです！ここでちょっと、NVIDIA の GPU 製品ラインナップについて整理したいと思います。


## NVIDIA GPU 製品ライン
(組み込みや自動車用はいったん置いておいて) PC やワークステーション、サーバーに搭載される NVIDIA GPU は次の 3 種類に分かれます。

- [GeForce](http://www.nvidia.co.jp/object/geforce_family_jp.html)
  - ご家庭用の GPU です。PC ゲームを楽しむ方にはおなじみですね。
- [Quadro](http://www.nvidia.co.jp/object/quadro-jp.html)
  - 「プロフェッショナル ビジュアライゼーション」向けです。CAD ワークステーションや、最近では VR 用にもよく使われます。
- [Tesla](http://www.nvidia.co.jp/object/tesla-servers-jp.html)
  - サーバー及びデータセンター向けで、厳しい検査に合格したものだけが出荷されます。
  - 長時間の安定運用を実現するために、ECCメモリや、ダイナミックページリタイアメント(不良メモリを自動的に除外)など、Tesla 独自の機能が盛り込まれています。
  - エンタープライズレベルのサポート体制が整っています。

というわけで、Azure に採用されているのはデータセンター向けの Tesla です。(Titan X を含む GeForce 系 はデータセンターでの利用に向きませんし保証もありません)

次に「K80」とか「M60」という名前の意味を解説しましょう。

## アーキテクチャの世代

K80 の "K" や M60 の "M" は、GPU アーキテクチャの世代を表しています。K は Kepler で M は Maxwell です。NVIDIA の GPU は、各世代のアーキテクチャに偉大な科学者の名前を戴いているのです。

- [Tesla](https://ja.wikipedia.org/wiki/%E3%83%8B%E3%82%B3%E3%83%A9%E3%83%BB%E3%83%86%E3%82%B9%E3%83%A9) - 2007 年
- [Fermi](https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%B3%E3%83%AA%E3%82%B3%E3%83%BB%E3%83%95%E3%82%A7%E3%83%AB%E3%83%9F) - 2009 年
- [Kepler](https://ja.wikipedia.org/wiki/%E3%83%A8%E3%83%8F%E3%83%8D%E3%82%B9%E3%83%BB%E3%82%B1%E3%83%97%E3%83%A9%E3%83%BC) - 2012 年 ← NC シリーズの Tesla K80 
- [Maxwell](https://ja.wikipedia.org/wiki/%E3%82%B8%E3%82%A7%E3%83%BC%E3%83%A0%E3%82%BA%E3%83%BB%E3%82%AF%E3%83%A9%E3%83%BC%E3%82%AF%E3%83%BB%E3%83%9E%E3%82%AF%E3%82%B9%E3%82%A6%E3%82%A7%E3%83%AB) - 2014 年 ← NV シリーズの Tesla M60
- [Pascal](https://ja.wikipedia.org/wiki/%E3%83%96%E3%83%AC%E3%83%BC%E3%82%BA%E3%83%BB%E3%83%91%E3%82%B9%E3%82%AB%E3%83%AB) - 2016 年 ← これが最新。製品としては Tesla P100/P40, Quadro P6000/P5000, GeForce 1080/1070/1060 等がこの世代
- [Volta](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%AC%E3%83%83%E3%82%B5%E3%83%B3%E3%83%89%E3%83%AD%E3%83%BB%E3%83%9C%E3%83%AB%E3%82%BF) - ご期待ください！

ちょっとややこしいのですが、"Tesla" はアーキテクチャの名称でもあり、同時にデータセンター向け GPU の製品ラインの名前でもあるわけです。例えば "Tesla M60" というのは、「Maxwell 世代の Tesla」で、Tesla K80 は「Kepler 世代の Tesla」です。

## なぜ NC シリーズは K80 なのか？

ここで一つ疑問がわきませんか？ 最近本格的な出荷が始まったばかりの Pascal 世代 GPU が Azure の N シリーズに間に合わなかったのはわかるにせよ、Pascal から見て 2 つ前の Kepler 世代である K80 (2014 年発売) をなぜ、NC シリーズは搭載しているのでしょうか？イマサラ感半端ない！と思われても無理はありません。

しかし、これにはちゃんと理由があります。ポイントは「倍精度浮動小数点演算性能」です。
K80 はガチ HPC 向けの GPU なので、単精度だけでなく倍精度の演算も得意で、その理論ピーク性能は以下の通り。

- 単精度で 8.73 テラフロップス
- 倍精度で 2.91 テラフロップス

Kepler では倍精度性能が単精度の 1/3 出るのです。

しかし、その次の Maxwell 世代 GPU は、ディープラーニング等での利用にフォーカスし、単精度演算を重視した構成になっています。そのため、倍精度の性能は単精度の 1/32 しか出ません。これでは倍精度演算が必須の HPC 用途には適さないため、NC シリーズは Maxwell ではなく Kepler 世代の K80 を搭載しているのです。つまり、K80 は Maxwell より一世代前であるにもかかわらず、 HPC 分野では「最新」の GPU **だった**わけです。

そう、今年 P100 が出るまではね。

# Pascal 世代の最強 GPU - Tesla P100

(まだ Azure には導入されていないものの) 今年発表された Tesla P100 は、単精度も倍精度もイケて、さらに半精度(FP16)演算にも最適化されている万能の GPU です。その理論ピーク性能は次の通り。(単位: テラフロップス)

- 倍精度 (FP64): 5.3
- 単精度 (FP32): 10.6
- 半精度 (FP16): 21.2

Pascal では、倍精度は単精度のちょうど半分出るようになりました。そして、K80 との比較ではもう一つポイントがあります。

K80 は、実は二つの "GK210" という GPU を束ねた構成になっており、メモリも二つの GK210 がそれぞれ持っています。OS 上では二つの独立した GPU として認識され、つまり K80 の性能を完全に引き出すにはアプリケーションがマルチ GPU に対応している必要があります。

一方、P100 は "GP100" という GPU が一つだけです。仮にマルチ GPU に対応していないアプリケーションでも、単精度で 10.6TFLOPS という性能を生かすことができます。

この他、P100 は、HBM2 という新しいタイプのメモリで帯域が大幅に増えていたり(K80: 480GB/s, P100: 720GB/s)、NVLink という新しいインターコネクトで、 GPU を PCIe より高速に接続したりできます。

というわけで、「N シリーズ v2」は Tesla P100 を搭載してくれると良いなー！と期待しております。楽しみです！

# 関連情報

- [Azure N シリーズの一般提供を 12 月 1 日から開始](https://blogs.technet.microsoft.com/jpitpro/2016/11/22/azure-n-series-general-availability-on-december-1/)
- [The GPU-Cloud Era – Powered by Microsoft Azure N-Series](https://blogs.nvidia.com/blog/2016/12/01/cloud-gpu-era-powered-by-microsoft-azure-n-series/)
- [NVIDIA と Microsoft、協力して AI を加速](http://www.nvidia.co.jp/object/nvidia-microsoft-accelerate-ai-togethers-20161118-jp.html)
- [SC16 NVIDIA NEWS](https://doc.co/uDcniz) - SC16 での GPU 関連情報をまとめた瓦版
- [TESLA M60](http://www.nvidia.co.jp/object/tesla-m60-jp.html) - NV シリーズの GPU
- [NVIDIA GRID](http://www.nvidia.co.jp/object/nvidia-grid-jp.html) - NV シリーズで利用可能な GPU 仮想化テクノロジ
- [TESLA K80](http://www.nvidia.co.jp/object/tesla-k80-jp.html) - NC シリーズの GPU
- [TESLA P100](http://www.nvidia.co.jp/object/tesla-p100-jp.html) - Pascal 世代のフラッグシップ GPU
- [TESLA P100 WHITE PAPER](https://images.nvidia.com/content/pdf/tesla/whitepaper/pascal-architecture-whitepaper.pdf) - P100 のアーキテクチャ詳細解説
- [NVIDIA DGX-1](http://www.nvidia.co.jp/object/deep-learning-system-jp.html) - P100 を 8 基搭載したサーバー

# さて、次回のアドベントカレンダーは…
[Microsoft Azure Advent Calendar 2016](http://qiita.com/advent-calendar/2016/azure)
明日は @reiji1020 さんです。よろしくお願いします！