Amazon Web Services ブログ

Amazon EC2 の新しい P2 インスタンスタイプ – 最大 16 GPU

by AWS Japan Staff | on | in Amazon EC2 |

私は長期に渡る技術やビジネスの動向を見ながら、自ら使用しブログに書くことができる製品やサービスの成り立ちを観察することが好きです。今回のブログを準備している時に、3 つのトレンドが頭に浮かびました。

  • ムーアの法則 – 1965 年に予測されたムーアの法則は、半導体のトランジスタ数の集積度は毎年 2 倍になるというものです。
  • 大量市場/大量生産 – 人類が生み出しその使用を楽しんでいる技術は大量の半導体を消費しており、大きなマーケットシェアになっています。
  • 専門化 – 上記の動向から隙間市場さえ専用製品を取り扱う大規模な市場になることも可能です。

このような動向に合わせて業界が進むに連れ、過去 10 年ほどの間に興味深いチャレンジがいくつか浮上しました。次のリストをご覧ください (箇条書きで考える癖がついていますね)。

  • 光の速度 – トランジスタ密度が増加しても、光速にはスケーリングの限界があります (コンピューターの先駆者 Grace Hopper が頻繁に指摘していますが、電気はナノ秒で約 1 フィートの距離を移動することができます)。
  • 半導体物理学 – トランジスタのタイム変換 (オンまたはオフ) の基本的限界により CPU が達成可能なサイクル時間の最低値を判断することができます。
  • メモリボトルネック – 有名な von Neumann Bottleneck は CPU の追加能力値を制限します。

GPU (グラフィックスプロセッシングユニット) はこうした動向から生まれたもので、いくつものチャレンジに対応しています。プロセッサがクロック速度の上限に達しても、設計者はムーアの法則でより多くのトランジスタを使用することができます。従来のアーキテクチャに対し、より多くのキャッシュやメモリを追加するためにトランジスタを使用することができますが von Neumann Bottleneck はそれを制限します。逆に、現在では専用ハードウェア (GPU 消費の先駆けとしてはゲームなど) が大きな市場になっています。これらをまとめると、GPU はスケールアップ (プロセッサ速度の上昇やボトルネックメモリ) の代わりにスケールアウト (より多くのプロセッサと平行する蓄積したメモリ) を行っていることが分かります。Net-net: GPU は多くのトランジスタを使用して大量の処理能力を提供する上で効率的な方法です。

こうしたバックグランドを踏まえた上で最新の EC2 インスタンスタイプ、P2 についてご説明します。このインスタンスは大規模な機械学習、詳細な学習、計算流体力学 (CFD)、耐震解析、分子モデリング、ゲノム、金融工学のワークロードに対応できるように設計されています。

新しい P2 インスタンスタイプ
この新しいインスタンスタイプは 8 NVIDIA Tesla K80 アクセラレーター まで組み込むことが可能です。それぞれ NVIDIA GK210 GPU ペアを実行します。各 GPU はそれぞれ 12 GB のメモリ (メモリ帯域幅 240 GB/秒 経由でアクセス可能) と、2,496 の並列処理コアを提供します。ECC メモリ保護も含んでいるため、シングルビットエラーの修正とダブルビットエラーの検出を可能にします。ECC メモリ保護と倍精度の浮動操作の組み合わせにより、こうしたインスタンスは上記のワークロードすべてにおいて最適です。

インスタンスのスペックは次をご覧ください。

インスタンス名 GPU カウント vCPU カウント
メモリ 並列処理コア
GPU メモリ
ネットワークパフォーマンス
p2.xlarge 1 4 61 GiB 2,496 12 GB
p2.8xlarge 8 32 488 GiB 19,968 96 GB 10 ギガビット
p2.16xlarge 16 64 732 GiB 39,936 192 GB 20 ギガビット

インスタンスはすべて 2.7 GHz で実行している Intel の Broadwell プロセッサで AWS 固有バージョンを使用しています。p2.16xlarge は C ステートと P ステートのコントロールを可能にするほか、1 コアまたは 2 コアで実行している場合に 3.0 GHz まで高速化することができます。
GPU は CUDA 7.5 とそれ以降では OpenCL 1.2 と GPU コンピューティング API をサポートします。p2.8xlargep2.16xlarge の GPU は一般的な PCI fabric 経由で接続します。これにより低レイテンシーのピアツーピア GPU から GPU 転送を可能にします。

インスタンスはすべて新しい Enhanced Network Adapter を使用します (ENA – 詳しくは「Elastic Network Adapter – Amazon EC2 のハイパフォーマンスネットワークインターフェイス」をご覧ください)。また、上記の表のようにプレイスメントグループ内で使用した場合は低レイテンシーで 20 Gbps までサポートすることができます。
単一インスタンスでパワフルなマルチ vCPU プロセッサと適切に連携している複数の GPU と、同じ機能を持つ別のインスタンスへの低レイテンシーアクセスがあれば、スケールアウト処理で非常に優れた階層を作成することができます。

  • One vCPU
  • マルチ vCPU
  • 1 個の GPU
  • 単一インスタンスでマルチ GPU
  • プレイスメントグループ内の複数のインスタンスでマルチ GPU

P2 インスタンスは VPC のみを対象にしており、64 ビット、HVM スタイル、EBS-backed AMI を使用する必要があります。この機能は US East (Northern Virginia)US West (Oregon)Europe (Ireland) リージョンにてオンデマンドインスタンス、スポットインスタンス、リザーブドインスタンス、専用ホストとして今日からご利用いただけます。下記は私が P2 インスタンスで NVIDIA ドライバと CUDA ツールキットをインストールした時の例です。その前に CUDA ツールキットに十分な余裕があった EBS ボリューム ( /ebs) と関連のサンプルで作成、フォーマット、アタッチ、マウントしてから実行しました (10 GiB あれば十分です)。

$ cd /ebs
$ sudo yum update -y
$ sudo yum groupinstall -y "Development tools"
$ sudo yum install -y kernel-devel-`uname -r`
$ wget http://us.download.nvidia.com/XFree86/Linux-x86_64/352.99/NVIDIA-Linux-x86_64-352.99.run
$ wget http://developer.download.nvidia.com/compute/cuda/7.5/Prod/local_installers/cuda_7.5.18_linux.run
$ chmod +x NVIDIA-Linux-x86_64-352.99.run
$ sudo ./NVIDIA-Linux-x86_64-352.99.run
$ chmod +x cuda_7.5.18_linux.run
$ sudo ./cuda_7.5.18_linux.run   # Don't install driver, just install CUDA and sample
$ sudo nvidia-smi -pm 1
$ sudo nvidia-smi -acp 0
$ sudo nvidia-smi --auto-boost-permission=0
$ sudo nvidia-smi -ac 2505,875

以下の点に注意してください。 NVIDIA-Linux-x86_64-352.99.runcuda_7.5.18_linux.run はインタラクティブプロジェクトです。ライセンス契約に同意しオプションをいくつか選択してパスを入力する必要があります。私が設定した CUDA ツールキットと実行時のサンプルは次の通りです。 cuda_7.5.18_linux.run:

P2 と OpenCL の一例
設定をすべて完了してから、この Gistp2.8xlarge インスタンスにコンパイルしました。

[ec2-user@ip-10-0-0-242 ~]$ gcc test.c -I /usr/local/cuda/include/ -L /usr/local/cuda-7.5/lib64/ -lOpenCL -o test

レポートは次の通りです。

[ec2-user@ip-10-0-0-242 ~]$ ./test
1. Device: Tesla K80
 1.1 Hardware version: OpenCL 1.2 CUDA
 1.2 Software version: 352.99
 1.3 OpenCL C version: OpenCL C 1.2
 1.4 Parallel compute units: 13
2. Device: Tesla K80
 2.1 Hardware version: OpenCL 1.2 CUDA
 2.2 Software version: 352.99
 2.3 OpenCL C version: OpenCL C 1.2
 2.4 Parallel compute units: 13
3. Device: Tesla K80
 3.1 Hardware version: OpenCL 1.2 CUDA
 3.2 Software version: 352.99
 3.3 OpenCL C version: OpenCL C 1.2
 3.4 Parallel compute units: 13
4. Device: Tesla K80
 4.1 Hardware version: OpenCL 1.2 CUDA
 4.2 Software version: 352.99
 4.3 OpenCL C version: OpenCL C 1.2
 4.4 Parallel compute units: 13
5. Device: Tesla K80
 5.1 Hardware version: OpenCL 1.2 CUDA
 5.2 Software version: 352.99
 5.3 OpenCL C version: OpenCL C 1.2
 5.4 Parallel compute units: 13
6. Device: Tesla K80
 6.1 Hardware version: OpenCL 1.2 CUDA
 6.2 Software version: 352.99
 6.3 OpenCL C version: OpenCL C 1.2
 6.4 Parallel compute units: 13
7. Device: Tesla K80
 7.1 Hardware version: OpenCL 1.2 CUDA
 7.2 Software version: 352.99
 7.3 OpenCL C version: OpenCL C 1.2
 7.4 Parallel compute units: 13
8. Device: Tesla K80
 8.1 Hardware version: OpenCL 1.2 CUDA
 8.2 Software version: 352.99
 8.3 OpenCL C version: OpenCL C 1.2
 8.4 Parallel compute units: 13

ご覧のように、すぐに使用できる勝利能力が膨大にあることが分かりました。

AMI の新たな詳細学習
このブログの冒頭で触れましたが、こうしたインスタンスは機械学習、詳細な学習、計算流体力学 (CFD)、構造計算、分子モデリング、ゲノム、金融工学のワークロードに最適です。

1 つ以上の P2 インスタンスの活用を可能にするため、本日 AMI の詳細学習 をリリースしました。詳細学習は、もっとも複雑でより大量な計算トレーニングプロセスを要するレベルの低い機械学習の予測に比べ、より信頼性が高い予測 (スコアまたは障害性) を生成できる可能性を備えています。幸い、新世代の詳細学習ツールは単一インスタンスにおける複数の GPU や複数の GPU を含む複数のインスタンスに渡り、トレーニングワークを分散させることができます。
新しい AMI には次のフレームワークが含まれています。いずれもインストールおよび設定済みで人気の MNIST データベースに対してテストも行われています。

MXNet – 柔軟性に優れ移動可能、詳細学習において効率的なライブラリです。C++、Python、R、Scala、Julia、Matlab、JavaScript を含む幅広いプログラミング言語に渡り宣言型プログラミングや命令型プログラミングをサポートします。

Caffe – 発現、速度、モジュール性を念頭に設計された詳細学習のフレームワークです。Berkeley Vision and Learning Center (BVLC) と様々なコミュニティの協力者により開発されました。
Theano – この Python ライブラリは多次元配列に関与する数式を定義、最適化、評価します。

TensorFlow – データフローグラフ (グラフの各ノードが算術演算で、各エッジは多次元データ間の通信を表示) を使用した数値計算のオープンソースライブラリです。

Torch – 機械学習アルゴリズムのサポートを備えた GPU 指向の科学計算フレームワークです。すべて LuaJIT 経由でアクセスすることができます。

次の README ファイル ( ~ec2-user/src ) でフレームワークの詳細をご覧ください。

AMIs from NVIDIA
興味があれば次の AMI も合わせてご覧ください。

Jeff;