More Related Content Similar to 第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
Similar to 第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会 (20) More from Hitoshi Sato (8) 第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会5. 5
産総研AIクラウド(通称AAIC)とは?
• 400x NVIDIA Tesla P100s and Infiniband EDR accelerate various AI workloads
including ML (Machine Learning) and DL (Deep Learning).
• Advanced data analytics leveraged by 4PiB shared Big Data Storage and Apache
Spark w/ its ecosystem.
AI Computation System Large Capacity Storage System
Computation Nodes (w/GPU) x50
• Intel Xeon E5 v4 x2
• NVIDIA Tesla P100 (NVLink) x8
• 256GiB Memory, 480GB SSD
Computation Nodes (w/o GPU) x68
• Intel Xeon E5 v4 x2
• 256GiB Memory, 480GB SSD
Mgmt & Service
Nodes x16
Interactive Nodes
x2
400 Pascal GPUs
30TB Memory
56TB SSD
DDN SFA14K
• File server (w/10GbEx2,
IB EDRx4) x4
• 8TB 7.2Krpm NL-SAS
HDD x730
• GRIDScaler (GPFS)
Computation Network
Mellanox CS7520 Director Switch
• EDR (100Gbps) x216
Bi-direction 200Gbps
Full bi-section bandwidth
Service and Management Network
IB EDR (100Gbps) IB EDR (100Gbps)
GbE or 10GbE GbE or 10GbE
Firewall
• FortiGate 3815D x2
• FortiAnalyzer 1000E x2
UTM Firewall
40-100Gbps class
10GbE
SINET5
Internet
Connection
10-100GbE
>4PiB effective
RW100GB/s
既存のGPUスパコン
に類似した構成
6. GPU計算ノードの構成
• NVIDIA TESLA P100 x 8
• Intel Xeon E5-2630 v4 x 2 ソケット
– ソケットあたり10コア
– Hyper Threading (HT) で動作
– ノードあたり40コアにみえる
• 256GiBのメモリ
• 480GBのSSD
• EDR Infiniband
– 計算ノード
– GPFSストレージへ接続
6
Machine (256GB total)
NUMANode P#0 (128GB)
Package P#0
L3 (25MB)
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#0
PU P#0
PU P#20
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#1
PU P#1
PU P#21
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#2
PU P#2
PU P#22
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#3
PU P#3
PU P#23
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#4
PU P#4
PU P#24
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#8
PU P#5
PU P#25
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#9
PU P#6
PU P#26
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#10
PU P#7
PU P#27
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#11
PU P#8
PU P#28
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#12
PU P#9
PU P#29
PCI 10de:15f9
card1
renderD128
PCI 10de:15f9
card2
renderD129
PCI 10de:15f9
card3
renderD130
PCI 10de:15f9
card4
renderD131
PCI 8086:8d62
sda
PCI 1a03:2000
card0
controlD64
PCI 8086:8d02
NUMANode P#1 (128GB)
Package P#1
L3 (25MB)
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#0
PU P#10
PU P#30
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#1
PU P#11
PU P#31
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#2
PU P#12
PU P#32
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#3
PU P#13
PU P#33
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#4
PU P#14
PU P#34
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#8
PU P#15
PU P#35
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#9
PU P#16
PU P#36
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#10
PU P#17
PU P#37
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#11
PU P#18
PU P#38
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#12
PU P#19
PU P#39
PCI 8086:1528
enp129s0f0
PCI 8086:1528
enp129s0f1
PCI 10de:15f9
card5
renderD132
PCI 10de:15f9
card6
renderD133
PCI 10de:15f9
card7
renderD134
PCI 10de:15f9
card8
renderD135
PCI 15b3:1013
ib0 mlx5_0
Indexes: physical
Date: Tue May 30 11:32:43 2017
MEM
CPU Cores
GPUs
Infiniband HBA
SSD
9. AIクラウドのためのソフトウェアエコシステム
既存のクラウド・スパコンの両⽅の技術要素が必要
9
数値計算
ライブラリ
BLAS/Matlab
デバッグ・ 性能プロファイル
MPI・OpenMP・CUDA/OpenCL
バッチジョブスケジューラ・ワークフロー
Linux OS
InfiniBabd
ネットワーク
SAN+ローカ
ルストレージ
X86+GPU/
アクセラレーター
Linuxコンテナ
分散ファイ
ルシステム
HDFS
ユーザプログラム
RDB
PostgresQL
機械学習
ライブラリ
グラフ処理
ライブラリ
Python, Jupyter Notebook, R etc.+
統合開発環境
CloudDB/
NoSQL
AIクラウド
アプリケーション層
OS層
深層学習
ライブラリ
Web
サービス
ビッグデータ
処理カーネル
Sort etc.
Fortran・C・
C++
ネイティブコード
並列ファイ
ルシステム
Lustre・GPFS
システムソフトウェア層
ハードウェア層
• 分散深層学習をはじめとする各種フレームワークを簡
単にバッチ処理や対話的な操作で利⽤
• 場合によってはウェブサービスの提供
• Python, Rなどのスクリプト⾔語、Jupyter
Nodebookなどのフレームワークの利⽤
• MPI, OpenMP, CUDAを利⽤した並列処理、HPC由来
の数値演算カーネル(BLAS),ビッグデータ処理カーネ
ル(Sort, PrefixSum, Merge, SetIntersection)のサ
ポート
• ⼤規模なパラメータサーベイ、ジョブの⻑時間実⾏、
ワークフローのサポート
• 画像、映像、⾳声、テキストなど細粒度I/O, 秘匿性の
あるデータへのアクセス
• Linuxコンテナのサポート
• スーパコンピュータ由来のInfiniband, GPUの利⽤、
コモディティサーバの採⽤
10. Singularity
(ソフトウェアの名称です)
• Singularity
– ⽶国LBNLで開発中のHPC向けLinuxコンテナ
• http://singularity.lbl.gov/
• https://github.com/singularityware/singularity
• 修正BSDライセンス
– ユーザ権限でプログラムを実⾏、ストレージへアクセス
• rootで動作するデーモンが不要 => 資源管理をスケジューラに委ねる
• setuidでroot権限を与えたコマンドを実⾏
(マウント、名前空間の作成、コンテナ内へのホストのPathのʼ作成など)
– Dockerイメージが利⽤可能
• DockerHubと連携
– HPC系のソフトウェアスタックが利⽤可能
• CUDA, MPI, Infiniband, etc.
10
11. Singularityの利⽤イメージ
sudo singularity build –sandbox tmpdir/ Singularity
sudo singularity build –writable container.img Singularity
sudo singularity build container.img Singularity
sudo singularity build container.img docker://ubuntu
sudo singularity build container.img shub://ubuntu
Sandboxディレクトリの⽣成
コンテナイメージファイルの⽣成
sudo singularity shell –writable container.img
パッケージソフトウェアを
インストール(yum, apt等)
Recipeファイルの利⽤
DockerHubの利⽤ (Dockerコンテナイメージ)
SingularityHubの利⽤(Singularityコンテナイメージ)
container.img
コンテナイメージ
ファイルを転送
インタラクティブにコンテナイメージを作成
既存のコンテナイメージを利⽤して作成
予め定めた⼿順によりコンテナイメージを作成
singularity run container.img
singularity exec container.img …
singularity shell container.img
シェルを実⾏(shell)
コマンドを与えて実⾏
(exec)
予め定義された動作を
実⾏(run)
ユーザ環境 共有計算機環境
11
12. Singularityでできること
• GPU, Infiniband, XXXが利⽤できるか?
– ホスト側のデバイス関連ドライバ・ライブラリをコンテナ側
へみせる(nvidia-docker⽅式?)
• MPIが利⽤できるか?
– ホストのMPIをコンテナ側へみせる(コンテナなメリットが薄い)
– コンテナ内にMPIをインストールし、コンテナの外からキックする
(ホスト側と同じMPIを使⽤し, Buildも同じにする必要)
• mpirun –np N singularity exec container.img mpi_program
• mpi4pyが利⽤できるか?
– コンテナ内にMPIをインストール
– コンテナ内のMPIに対してmpi4pyをインストール
– コンテナ外からキック
12
13. 分散深層学習フレームワーク向けコンテナイメージの構築
• ホスト側
– GPUやIninibandを活⽤するために
デバイス関連ドライバ・ライブラリを
コンテナ側へマウント
• GPUやIninibandの利⽤
• nvidia-docker⽅式
• コンテナ側
– ユーザランドライブラリの
インストール
• CUDA, CuDNN, NCCL2, ibverbs, MPI
– 分散深層学習フレームワークの
インストール
• 最適化されたビルド
13
Base Drivers, Libraries on Host
CUDA
Drivers
Infiniband
Drivers
Filesystem
Libraries
(GPFS, Lustre)
Userland Libraries on Container
CUDA CuDNN NCCL2
MPI
(mpi4py)
Mount
ibverbs
Distributed Deep Learning
Frameworks
Caffe2 ChainerMNDistributed
TensorflowMXNet
14. 予備実験
• AIのワークロードを想定
– 演算性能(GEMM)
– メモリバンド幅性能(STREAM)
– 通信性能(OSU Micro Benchmarks)
– ストレージI/O性能 (FIO)
– 分散深層学習性能(Imagenet-1K)
• 実験環境
– AAIC
– ベアメタル
• CentOS 7.3, Linux 3.10.0,
gcc v4.8.5, glibc v2.17
– Singularity
• Singularity 2.4
• Ubuntu 16.04, Linux v3.10.0
gcc v5.4.0, glibc v2.23
– 両環境
• CUDA 8.0.61.2, CuDNN v6.0.21
NCCL v2.0.5, OpenMPI v2.1.1
14
15. GPU計算ノードの構成(再掲)
• NVIDIA TESLA P100 x 8
• Intel Xeon E5-2630 v4 x 2 ソケット
– ソケットあたり10コア
– Hyper Threading (HT) で動作
– ノードあたり40コアにみえる
• 256GiBのメモリ
• 480GBのSSD
• EDR Infiniband
– 計算ノード
– GPFSストレージへ接続
15
Machine (256GB total)
NUMANode P#0 (128GB)
Package P#0
L3 (25MB)
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#0
PU P#0
PU P#20
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#1
PU P#1
PU P#21
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#2
PU P#2
PU P#22
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#3
PU P#3
PU P#23
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#4
PU P#4
PU P#24
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#8
PU P#5
PU P#25
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#9
PU P#6
PU P#26
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#10
PU P#7
PU P#27
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#11
PU P#8
PU P#28
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#12
PU P#9
PU P#29
PCI 10de:15f9
card1
renderD128
PCI 10de:15f9
card2
renderD129
PCI 10de:15f9
card3
renderD130
PCI 10de:15f9
card4
renderD131
PCI 8086:8d62
sda
PCI 1a03:2000
card0
controlD64
PCI 8086:8d02
NUMANode P#1 (128GB)
Package P#1
L3 (25MB)
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#0
PU P#10
PU P#30
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#1
PU P#11
PU P#31
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#2
PU P#12
PU P#32
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#3
PU P#13
PU P#33
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#4
PU P#14
PU P#34
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#8
PU P#15
PU P#35
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#9
PU P#16
PU P#36
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#10
PU P#17
PU P#37
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#11
PU P#18
PU P#38
L2 (256KB)
L1d (32KB)
L1i (32KB)
Core P#12
PU P#19
PU P#39
PCI 8086:1528
enp129s0f0
PCI 8086:1528
enp129s0f1
PCI 10de:15f9
card5
renderD132
PCI 10de:15f9
card6
renderD133
PCI 10de:15f9
card7
renderD134
PCI 10de:15f9
card8
renderD135
PCI 15b3:1013
ib0 mlx5_0
Indexes: physical
Date: Tue May 30 11:32:43 2017
MEM
CPU Cores
GPUs
Infiniband HBA
SSD
21. Singularityを⽤いた分散深層学習フレームワークの実⾏
• 実験環境
– AAIC 8 nodes (64 GPUs)
– フレームワーク: CHainerMN v1.0.0
• Chainer 2.1.0, Cupy 1.0.3, mpi4py 2.0.0, Python 3.6.1
– コンテナ
• Singularity v2.3.1
• Ubuntu 16.04, gcc-5.4.0, glibc-2.23
– ベアメタル
• CentOS 7.3, gcc-4.8.5, glibc-2.17,
• 実験設定
– データセット: Imagenet-1K
– モデル: ResNet-50
– 訓練:
• バッチサイズ: GPU毎に32, 32 x 64
• 学習率: 30 epoch毎に0.1倍
• 最適化: Momentum SGD (momentum=0.9)
• Weight Decay: 0.0001
• 訓練エポック数: 100
21
ベアメタル実⾏とほぼ遜⾊のない性能を確認
Better
22. 議論
• Singularity
– ベアメタルと⽐較してほぼ遜⾊のない性能を確認
• 演算性能だけでなく、メモリバンド幅、ストレージI/O,
ネットワーク性能(要確認)も
• メモリのフットプリントは未確認
– OSの違いを超えられる(CentOS vs. Ubuntu)
• 特に、glibcのバージョンの違いも容易に超えられる
(glibcが互換性を担保するような実装になっている)
– 導⼊しやすさ
• configure, make, make installで可能。共有ストレージへも可能。
– あとはエンジニアリングイシュー
• ソフトウェアの安定性の向上
• セキュリティイシューを潰す
22
24. 議論 (contʼd)
• ユーザが任意のコンテナを動かして問題が起きるか?
– 特に問題がないと判断している(問題を定義したい)
– 基本的には実⾏するユーザの責任
(現状でも任意のソフトウェアをユーザが動かしているので
ほぼ同じ問題)
• 特殊なコンテナが必要?制限はある?
– 基本的には不要。ARMでもOPAでも(Linuxであれば)動く。
– ただし、計算環境に最適化するためには再コンパイルなどした⽅が良い。
• ISVアプリのライセンス
– コンテナに含めるのは難しい(気がする)
– ユーザ権限でホストの環境をコンテナ側にreadマウントすることはできる
– ホストにISVアプリをインストール、コンテナ側にマウント?
24
25. 関連研究
• Docker
– root権限が必要なデーモンによりコンテナ起動
– cgroupによる資源管理 (rktも)
• Shifter
– NERSCで開発 (Coriとかで利⽤?)、CSCSで拡張(Piz Dizant)
– Singulairtyと同様の技術, ImageGatewayの存在, Crayのサポート
• ChalieCloud [SCʼ17]
– Singulairtyと同様の技術
– Singularityのほうが盛り上がっている感はある
(OpenMPI v3.0やMvapich v2.3.2のSingularityサポート)
• McKernel Integration [Rossʼ17]
– Oakforest PACSの事例
– GeoFM, CCS-QCD, mniFE、今回の報告と同様の結果・傾向
25
27. ABCI AI Bridging Cloud Infrastructure
The worlds first large-scale Open AI Infrastructure
27
ABCI
Serving your AI needs
in Spring 2018