データサイエンティスト向け Azure の GPU インスタンスを調査する

#前口上
最強パワーの GPU インスタンスをディープな感じのデータ分析に使うべく、常に強力なマシンパワーを追い求め、尚且つコストパフォーマンス高めのボールを狙い打ちしようとしてる、屈強のデータサイエンティストが打席に立っているとします。
打ちやすいボールを投げるために、まず我々がどんなボールを持っているのか Azure の GPU インスタンスについて調べてみましたので記録しておきます。
(2019/4/29 時点) 

#比較してみる

###1. Azure VM Series 毎に整理
GPU 搭載の VM について調べてみました。大きく分けて以下の 3 種類から選べます。用途ごとにシリーズが分かれているんですね。
#####NC Series 機械学習用
 - NC : Tesla K80
 - NCv2 : Tesla P100
 - NCv3 : Tesla V100

#####ND Series ディープラーニング用
 - ND : Tesla P40
 - NDv2(Preview) : Tesla V100 NVLink

#####NV Series グラフィックス用
- NV : Tesla M60
- NVv2(Preview) : Tesla M60, Premium サポート

###2. GPU アーキテクチャ毎に整理
いずれの VM もNVIDIA のTESLA GPU を搭載しています。Azure VM N Series の "N" は "NVIDIA" の "N" なんですね。GPU アーキテクチャの違いを整理してみます。カッコの中は発売年を書いています。

#####Kepler (2012年) 
 - NC : Tesla K80
 - 単精度（高）、倍精度（低）信号処理、画像処理向けの GPU

#####Maxwell (2014年)
 - NV : Tesla M60
 - Keplerの発展形
 - グラフィックス用途に最適化（単精度演算重視）
 - 倍精度演算必須の HPC 用途には向かない

#####Pascal (2016年) 
 - NCv2 : Tesla P100, ND : Tesla P40
 - メモリ帯域、レジスタファイル、L2 キャッシュ大幅増
 - HPC用途 も グラフィックス用途もいける
 - NVLink 対応
 - P40 は ディープラーニング用途向け　INT8 演算に最適化

#####Volta (2017年)
 - NCv3 : Tesla V100, NDv2(Preview) : Tesla V100 NVLink
 - 強化版 Pascal
 - Tensorコア サポート
 - インターGPU、GPU-CPU 分散処理強化

ざっと眺めてみると同じ NVIDIA Tesla GPU を搭載していてもチップのアーキテクチャ毎に向き・不向きがありそうです。やはり利用用途向けに NC, ND, NV を使い分けるのが良いですね。
あとは価格の違いが気になります。

###3. スペックと価格を整理
インスタンス毎の価格を比較するために、最小インスタンス GPU 1X での時間単位の価格で比較してみます。NDv2 のみ最小インスタンスが GPU 8X となっている点は注意が必要です。

概算ですが、
Kepler と Maxwell がGPU 1X で時間あたり \$1
Pascal が少し高くなって \$2
Volta はさすがの最新 GPU なので \$3 となっています。

#####NC Series
| INSTANCE　|GPU |CORE |Cost/hour |
|:--------|:---|:---|---------:|
| NC6　 |K80  |6 | $0.9|
| NC6v2 |P100 |6 |$2.07|
| NC6v3 |V100 |6 |$3.06|

#####ND Series
| INSTANCE　|GPU |CORE |Cost/hour |
|:--------|:---|:---|---------:|
| ND6   |P40         |6 | $2.07|
| ND40v2 |V100 NVLink|40 |$12.24|

#####NV Series
| INSTANCE　|GPU |CORE |Cost/hour |
|:--------|:---|:---|---------:|
| NV6   |M60 |6 | $1.14|
| NV6v2 |M60 |6 |$0.77|

###4. Azure vs AWS vs GCP で比較
最後に各クラウドベンダーでの最大パワーとコストパフォーマンスを比較してみます。

#####Azure
| Series　|GPU |GPU Mem|NWBW|Cost/hour |
|:--------|:---|:---|---------:|---------:||---------:|
| ND24  |4X P40         |96GB|N/A| $8.28|
| NC24 v3 |4X V100 |64GB|N/A|$12.24|
| ND40 v2 (Preview) |8X V100 NVLink |96GB|24Gbps|$12.24|
[Azure Linux Virtual Machines Pricing](https://azure.microsoft.com/en-us/pricing/details/virtual-machines/linux/)
#####AWS
| Series　|GPU |GPU Mem|NWBW|Cost/hour |
|:--------|:---|:---|---------:|---------:||---------:|
| P3　8x |4X V100 NVLink | 64GB|10Gbps|$12.24|
| P3　24x |8X V100 NVLink | 256GB|100Gbps|$31.22|
[Amazon EC2 P3 Instance Product Details](https://aws.amazon.com/ec2/instance-types/p3/)

#####GCP
| Series　|GPU |GPU Mem|Cost/hour |
|:--------|:---|---------:|---------:|
| V100　 |8X V100 | 128GB HBM2| $19.84|
[Google Compute Engine Pricing](https://cloud.google.com/compute/pricing#gpus)

#まとめ
最もパワフルなノードは AWS の P3 24X ですね。

V100 NVLink を8個搭載しているのは Azure ND40 v2 や GCPと同じですが、GPU Memory が256GB と Network Bandwidth が 100Gbps と Azure や GCP より高速です。

一方コストパフォーマンスでは Azure に軍配が上がります。

ND40 v2 の時間当たりの価格が \$12.24 と同等の GPU を積んだ AWS の P3 \$31.22 や GCP と比較して圧倒的に安いのですが、これは Azure がプレビュー価格であることも考慮に入れる必要がありそうです。
GCP は比較すると選択肢が限られるのですが、GPU Memory は Azure の ND40 v2 より多め、一方で価格も高めとなっています。NVLink 対応しているようですが、価格表からは読み取れませんでした。

調べてみたところ、Azure であれば用途に応じて NC と ND シリーズを使い分け、さらにベンダー間では思ったより差がありませんでしたので、好きな環境を選んで大丈夫そうです。