gtc japan 2017
TRANSCRIPT
AIクラウドのソフトウェアエコシステム構築に向けた産総研の取り組み
産業技術総合研究所⼈⼯知能研究センター ⼈⼯知能クラウド研究チーム
佐藤 仁
⼈⼯知能技術の発展にはアルゴリズム×ビッグデータ×計算基盤
の⼀体的な進展が不可⽋
2
ビッグデータ
アルゴリズム
計算基盤
深層学習, 機械学習, etc.
クラウド, スパコン, etc.
研究開発・実証・橋渡しを⾒据えたAIプラットフォームの構築・展開
スパコンの新しい応⽤: HPCとAI/ビッグデータ処理の融合• ⼤規模グラフ処理
– Graph500:⼤規模グラフの探索能⼒でスーパーコンピュータのビッグデータ処理を評価する新しいベンチマーク
• ⼈⼯知能・機械学習– コンピュータがデータからルールや知識
を⾃動的に学習ex. 画像・映像・⾳声認識、⾃動運転、バイオ・ヘルスケア、ロボット・ドローン
on the Graph500 Ranking of Supercomputers with38621.4 GE/s on Scale 40
on the 10th Graph500 list published at the InternationalSupercomputing Conference, July 12, 2015.
Congratulations from the Graph500 Executive Committee
No.1
RIKEN Advanced Institute for ComputationalScience (AICS)’s K computer
is ranked
Kronecker graph
A: 0.57, B: 0.19C: 0.19, D: 0.05
TSUBAME-KFCTSUBAME3.0プロトタイプ
⾼度な学習のためにはマルチペタフロップス/バイト級の計算・ストレージ性能が必要
⼈⼯的に⽣成された10万時間の⾳声データを基に学習 [Baidu2015]
類似したアーキテクチャ
GPUによるアクセラレーション
約1兆頂点、16兆辺のグラフ82,944台, 663,552プロセスで0.45秒で処理
4
産総研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 SystemComputation Nodes (w/GPU) x50• Intel Xeon E5 v4 x2• NVIDIA Tesla P100 (NVLink) x8• 256GiB Memory, 480GB SSDComputation Nodes (w/o GPU) x68• Intel Xeon E5 v4 x2• 256GiB Memory, 480GB SSD
Mgmt & Service Nodes x16
Interactive Nodes x2
400 Pascal GPUs30TB Memory
56TB SSD DDN SFA14K• File server (w/10GbEx2,
IB EDRx4) x4• 8TB 7.2Krpm NL-SAS
HDD x730• GRIDScaler (GPFS)
Computation NetworkMellanox CS7520 Director Switch• EDR (100Gbps) x216
Bi-direction 200GbpsFull 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 Firewall40-100Gbps class
10GbE
SINET5Internet
Connection10-100GbE
>4PiB effectiveRW100GB/s
既存のGPUスパコンに類似した構成
GPU計算ノードの構成• NVIDIA TESLA P100 x 8• Intel Xeon E5-2630 v4 x 2 ソケット
– ソケットあたり10コア– Hyper Threading (HT) で動作– ノードあたり40コアにみえる
• 256GiBのメモリ• 480GBのSSD• EDR Infiniband
– 計算ノード– GPFSストレージへ接続
5
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
現状のAIクラウドの利⽤法(≒ スパコンの利⽤法)• ジョブスケジューラの存在
– スクリプトファイルの作成– ジョブの投⼊
• ユーザ権限でのプログラム実⾏– システムに予めインストールされた
ソフトウェアの利⽤• GPUランタイム・ライブラリCUDA,
CuDNN, NCCL• 並列分散処理ソフトウェア(MPI)
• 共有ストレージの利⽤– 複数ユーザで共有された並列ファイルシステム
6
/home ��������(GPFS)
Job Job Job Job
NQS
Submit
Scheduling
script file
$ qsub <option> script_filename
inter-connect
SSH
( )
AIアプリケーションの事例(Linuxコンテナ)• lang2program
– https://github.com/kelvinguu/lang2program
– ACL 2017 paper内で⽤いられた実装– Dockerfileの提供
• Tensorflow, PostgresQL,Python pip Packages, etc.
• 依存関係のあるソフトウェアのインストールが⼤量に発⽣
7
HPC環境(スパコン)で動くか?• Dockerの⾮サポート
(セキュリティ上ホストのrootを与えることができない)• マニュアルにインストールすれば可能だが煩雑
AIアプリケーションの事例(ファイルI/O)ImageNet-1kの対象とするファイルサイズの数と分布
学習データ テストデータ
8
サイズの⼩さなファイルへの⼤量アクセス→ 共有ファイルシステムが苦⼿なI/Oパターン(メタデータアクセス増)
9
ユーザプログラム
数値計算ライブラリBLAS
ドメイン固有⾔語
デバッグ・ 性能プロファイル
MPI・OpenMP・CUDA/OpenCL
並列ファイルシステムLustre・GPFS
バッチジョブスケジューラ
Linux OS
InfiniBabdネットワーク
SAN+ローカルストレージ
X86+GPU/
アクセラレーター
仮想マシン・Linuxコンテナ
Ethernetネットワーク
ローカルノード
ストレージx86 CPU
分散ファイルシステムHDFS
MapReduceフレームワークSpark/Hadoop
ユーザプログラム
RDBPostgresQL
機械学習ライブラリ
MLlib/Mahout
グラフ処理ライブラリGraphX/Giraph
Java・Scala+統合開発環境
SQLクエリエンジンHive/Pig
CloudDB/NoSQLHbase/Cassandra/MondoDB
コーディネーションエンジンZooKeeper
Linux OS
既存クラウド 既存スパコンアプリケーション層
システムソフトウェア層
ハードウェア層
OS層
Fortran・C・C+++統合開発環境
• クラウドはプログラムの実⾏に対話的な操作が必要。• スパコンはバッチジョブによる実⾏のため不要。
• クラウドは利便性が⾼いプログラム⾔語を採⽤するも⾼速化には向かない。データ解析等頻繁にプログラムを書き換える利⽤に特化。
• スパコンはマシンの性能を活かせるプログラム⾔語を採⽤するも、プログラムが難しく⽣産性が低い。数値演算などコアな処理はあまりプログラムを書き換える必要がないため。
• クラウドはデータベース利⽤が多い。
• スパコンは数千・数万台の計算機向けにデバッグ・性能チューニングが必要。
• クラウドは仮想マシン・コンテナ技術による⽤途に応じた環境構築が可能。• スパコンは⾼速処理のためのベアメタル環境が主。
• クラウドはWebサーバ由来の技術、分散ストレージなどを採⽤。• スパコンは超広帯域・低遅延ネットワーク、共有ストレージ、GPUなどを採⽤。
AI/ビッグデータ処理の⾼速化が最重要だがソフトウェアエコシステムは皆無特に分散深層学習・強化学習、HPCと融合したワークロード等
既存のクラウドとスパコンで異なるソフトウェアエコシステム
AIクラウドのためのソフトウェアエコシステム既存のクラウド・スパコンの両⽅の技術要素が必要
10
数値計算ライブラリ
BLAS/Matlab
デバッグ・ 性能プロファイル
MPI・OpenMP・CUDA/OpenCL
バッチジョブスケジューラ・ワークフロー
Linux OS
InfiniBabdネットワーク
SAN+ローカルストレージ
X86+GPU/アクセラレーター
Linuxコンテナ
分散ファイルシステム
HDFS
ユーザプログラム
RDBPostgresQL
機械学習ライブラリ
グラフ処理ライブラリ
Python, Jupyter Notebook, R etc.+統合開発環境
CloudDB/NoSQL
AIクラウド
アプリケーション層
OS層
深層学習ライブラリ
Webサービス
ビッグデータ処理カーネル
Sort etc.
Fortran・C・C++
ネイティブコード
並列ファイルシステムLustre・GPFS
システムソフトウェア層
ハードウェア層
• 分散深層学習をはじめとする各種フレームワークを簡単にバッチ処理や対話的な操作で利⽤
• 場合によってはウェブサービスの提供
• Python, Rなどのスクリプト⾔語、JupyterNodebookなどのフレームワークの利⽤
• MPI, OpenMP, CUDAを利⽤した並列処理、HPC由来の数値演算カーネル(BLAS),ビッグデータ処理カーネル(Sort, PrefixSum, Merge, SetIntersection)のサポート
• ⼤規模なパラメータサーベイ、ジョブの⻑時間実⾏、ワークフローのサポート
• 画像、映像、⾳声、テキストなど細粒度I/O, 秘匿性のあるデータへのアクセス
• Linuxコンテナのサポート
• スーパコンピュータ由来のInfiniband, GPUの利⽤、コモディティサーバの採⽤
Singularity(ソフトウェアの名称です)
• Singularity– ⽶国LBLで開発中のHPC向けLinuxコンテナ
• http://singularity.lbl.gov/• https://github.com/singularityware/singularity• 修正BSDライセンス
– ユーザ権限でプログラムを実⾏、ストレージへアクセス• rootで動作するデーモンが不要• setuidでroot権限を与えたコマンドを実⾏
– Dockerイメージが利⽤可能• DockerHubと連携
– HPC系のソフトウェアスタックが利⽤可能• CUDA, MPI, Infiniband, etc.
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)
ユーザ環境 共有計算機環境
分散深層学習フレームワーク向けコンテナイメージの構築
• ホスト側– GPUやIninibandを活⽤するために
デバイス関連ドライバ・ライブラリをコンテナ側へマウント
• GPUやIninibandの利⽤• nvidia-docker⽅式
• コンテナ側– ユーザランドライブラリの
インストール• CUDA, CuDNN, NCCL2, ibverbs, MPI
– 分散深層学習フレームワークのインストール
• 最適化されたビルド
13
Base Drivers, Libraries on Host
CUDADrivers
InfinibandDrivers
FilesystemLibraries
(GPFS, Lustre)
Userland Libraries on Container
CUDA CuDNN NCCL2 MPI(mpi4py)
Mount
ibverbs
Distributed Deep Learning Frameworks
Caffe2 ChainerMNDistributedTensorflowMXNet
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
14
ベアメタル実⾏とほぼ遜⾊のない性能を確認
AICloudModules: AI向けコンテナイメージ集• Base Images
– AIクラウド向けに最適化したOSイメージ• CUDA,CuDNN, NCCL, MPI, etc.• CUDA, Infiniband, GPFS等は
ホスト側のドライバを利⽤• DL Images
– 基盤となるOSイメージを拡張し、深層学習フレームワークやその他AIアプリケーションを導⼊
15
Base ImagesBase OS Images
incl. CUDA, CuDNN, NCCL2, MPI, Infiniband
DL ImagesImages for Deep Learning Frameworks
based on HPCBase
CentOSUbuntu
Base Drivers, Libraries on Host
GPU Infiniband GPFSMPI
Caffe2 ChainerMNDistributedTensorflowMXNet
公開に向けて準備中
CNTK
Distributed Deep Learning Frameworks
Distributed Deep Learning Playgrounds:分散深層学習フレームワークの実⾏サンプル集
• 分散深層学習フレームワーク– CNTK, ChainerMN, Caffe2,
Tensorflow, MXNet• AIクラウドをはじめスパコン環境
での実⾏を想定したスクリプト– MPIでのリモートプロセス起動
• プロセスマッピング、MIMDモード– ジョブスケジューラを介したジョブ実⾏
• NQSII, Univa, etc.向けスクリプトファイル
16
Caffe2 ChainerMN
DistributedTensorflowMXNet
CNTK
MPI
OpenMPI Mvapich
Schedulers
NQSII Unvia Others
細粒度I/Oのためのオンデマンドなデータストア• スケジューラと協調してオンデマンドに
分散ファイルシステムを構築– スケジューラが計算ノードを確保– 確保された計算ノードの
ローカルストレージ(SSD)を集約– 共有ファイルシステムから
ファイルステージング
• 分散ファイルシステム– BeeGFS On Demand
• https://www.beegfs.io/content/– Gfarm Burstbuffer
• http://oss-tsukuba.org/software/gfarm
17
AIクラウドのソフトウェアエコシステム構築に向けて• ⽐較的運⽤が保守的なHPC環境でもAI/ビッグデータ処理
のためのソフトウェアスタックが容易に構成可能• いろいろある⽇本国内のGPU計算資源
→ 適切な⼿続き(HPCI, JHPCN,共同研究 etc.)を経れば利⽤可能– 東京⼤学 Reedbush H, L
(NVIDIA Tesla P100 x 2 per node x 128ノード)(NVIDIA Tesla P100 x 2 per node x 64ノード)
– 東京⼯業⼤学 TSUBAME3(NVIDIA Tesla P100 x 4 per node x 540ノード)
– 九州⼤学 Ito(NVIDIA Tesla P100 x 4 per node x 128ノード)
– 産総研 AAIC(NVIDIA Tesla P100 x 8 per node x 50ノード)
まとめ
• 産総研AIクラウド(AAIC)の紹介• AIクラウドのためのソフトウェアエコシステムの必要性
– 既存のクラウドとスパコンの両⽅の技術要素が必要• 産総研の取り組み
– Singularityを⽤いたユーザ権限でのコンテナ実⾏– 分散深層学習フレームワークのコンテナ化– 細粒度I/Oのためのオンデマンドなデータストア構築
19
ABCI AI Bridging Cloud InfrastructureThe worlds first large-scale Open AI Infrastructure
20
ABCI
Serving your AI needsin Spring 2018