Upload
others
View
8
Download
0
Embed Size (px)
Citation preview
HPC/AI を支える GPU コンピューティングの今エヌビディア エンタープライズマーケティング本部 佐々木邦暢 (@_ksasaki)
2
エヌビディアAI コンピューティングカンパニー
1993 年創業創業者兼 CEO ジェンスン フアン従業員 12,000 人2018 会計年度売上高 97 億ドル時価総額 1600 億ドル
3
NVIDIA HOLODECK未来のデザインラボ
4
5
GPU コンピューティング12年の歩み
2010
Fermi: 世界初のHPC 用 GPU
世界初の HIV カプシドの原子モデルシミュレーション
GPU AI システムが碁の世界チャンピオンを破る
2014
スタンフォード大学がGPU を利用したAI マシンを構築
世界初のヒトゲノムの3次元マッピング
Google がImageNet で人間を超える
2012
H1N1 の異変の仕組みを解明
オークリッジ国立研究所の世界最速 GPU スーパーコンピュータ
2008
世界初の GPU Top500 システム
2006
CUDA発表
GPU を利用したAlexNet が圧勝
Green500 の上位 13 システムがNVIDIA GPUを利用
2017
東工大 TSUBAME 3.0 Green500 首位獲得
6
NVIDIA GPU 製品のおおまかな一覧
Maxwell(2014)
Pascal(2016)
Volta(2017)
GeForceゲーミング
Quadroプロフェッショナルグラフィックス
M40
M6000
GTX
980
HPC 用
GRID 用
DL 用
M60
GP100P5000
Kepler(2012)
K6000
GTX
780
K80
K2
K520
GTX
1080TITAN X
V100データセンタ& クラウド
TeslaP40
P100
P6
TITAN V
Fermi(2010)
M2070
6000
GTX
580
P4
GV100
M6 M10
Turing(2018)
RTX
8000
RTX
2080 Ti
New!
7
NVIDIA Tesla V100AI と HPC のための大きな飛躍Tensor コアを搭載した Volta アーキテクチャ
210 億トランジスタ | TSMC 12nm FFN | 815mm2
5120 CUDA コア
7.8 FP64 TFLOPS | 15.7 FP32 TFLOPS
125 Tensor TFLOPS
総レジスタファイル 20MB | 16MB キャッシュ
900 GB/s の 16GB HBM2
300 GB/s NVLink
8
P100 V100 性能UP
トレーニング性能 10 TOPS 125 TOPS 12x
インファレンス性能 21 TFLOPS 125 TOPS 6x
FP64/FP32 5/10 TFLOPS 7.8/15.6 TFLOPS 1.5x
HBM2 バンド幅 720 GB/s 900 GB/s 1.2x
NVLink バンド幅 160 GB/s 300 GB/s 1.9x
L2 キャッシュ 4 MB 6 MB 1.5x
L1 キャッシュ 1.3 MB 10 MB 7.7x
GPU ピーク性能比較: P100 vs v100
9
VOLTAディープラーニング性能を大幅に向上
P100 V100 P100 V100
Images
per
Second
Images
per
Second
2.4x faster 3.7x faster
FP32 Tensorコア FP16 Tensorコア
トレーニング インファレンスTensorRT - 7ms Latency
(*) DLモデルはResNet50
10
VOLTAHPC性能を大きく向上
P100に対する相対性能
HPCアプリケーション性能
System Config Info: 2X Xeon E5-2690 v4, 2.6GHz, w/ 1X Tesla P100 or V100. V100 measured on pre-production hardware.
Summit
Supercomputer
200+ PetaFlops
~3,400 Nodes
10 Megawatts
トランジスタ数:21B 815 mm2
80 SM5120 CUDAコア640 Tensorコア
HBM216 GB, 900 GB/s
NVLink 300 GB/s
TESLA V100
*full GV100 chip contains 84 SMs
12
VOLTA GV100 SM
GV100
FP32ユニット 64
FP64ユニット 32
INT32ユニット 64
Tensorコア 8
レジスタファイル 256 KB
統合L1・共有メモリ 128 KB
Activeスレッド 2048
(*) SMあたり
13
VOLTA GV100 SM
命令セットを一新
スケジューラを2倍
命令発行機構をシンプルに
L1キャッシュの大容量・高速化
SIMTモデルの改善
テンソル計算の加速
最もプログラミングの簡単なSM
生産性の向上
VOLTA TENSORコア
TENSOR コア混合精度行列計算ユニット
D = AB + C
D =
FP16 or FP32 FP16 FP16 FP16 or FP32
A0,0 A0,1 A0,2 A0,3
A1,0 A1,1 A1,2 A1,3
A2,0 A2,1 A2,2 A2,3
A3,0 A3,1 A3,2 A3,3
B0,0 B0,1 B0,2 B0,3
B1,0 B1,1 B1,2 B1,3
B2,0 B2,1 B2,2 B2,3
B3,0 B3,1 B3,2 B3,3
C0,0 C0,1 C0,2 C0,3
C1,0 C1,1 C1,2 C1,3
C2,0 C2,1 C2,2 C2,3
C3,0 C3,1 C3,2 C3,3
4x4 の行列の積和演算を1サイクルで計算する性能 (128演算/サイクル)
行列のFMA (Fused Multiply-Add)
VOLTA TENSOR コアVolta Tensor Core
P100 V100
FP16/Tensorコア 20 TFLOPS 125 TFLOPS
FP32 10 TFLOPS 15.6 TFLOPS
FP16
FP16
× + FP32
FP32
FP16 FP32
混合精度演算
16bit
16bit
32bit
CUBLAS: TENSORコアの実効性能P100 FP32 vs. V100 Tensorコア
最大9倍の性能向上
CUDNN: TENSOR コアの実効性能P100 FP32 vs. V100 Tensorコア
Convolution層の性能比較
Resnet50, Imagenet, Batch:128P100 FP32, V100 FP32 vs. V100 Tensorコア
0 100 200 300 400 500 600
Conv BN Relu Cupy_* Misc.
570 ms
360 ms
197 ms
Time per iteration [ms]
約3倍
P100 FP32
V100 FP32
V100Tensorコア
(*) Chainer 3.0.0rc1+ と CuPy 2.0.0rc1+ を使用
TENSOR コアの計算精度
Tensor コアの演算結果は、FP16と比べて、FP32との誤差が小さい
FP32の計算結果に近い
• 行列A: 指数分布 (activation)
• 行列B: 正規分布 (weight)
(平均0.0, 分散1.0)
• 内積長: 32 – 1024
• 1万サンプル
• 誤差区間: 99%
0.8
0.9
1
1.1
1.2
32
64
128
256
512
1024
32
64
128
256
512
1024
32
64
128
256
512
1024
FP32 TensorCore FP16
内積長
平均
誤差範囲
アプリケーション依存
コンテナ環境での GPU 利用
ソフトウェアスタックの管理は大変例: フレームワークを利用するアプリケーションのスタック
OS
NVIDIA driver
CUDA
cuDNN 6cuBLAS…
Applications
TensorFlow 1.3
OS
NVIDIA driver
CUDA
cuDNN 5 cuBLAS …
Applications
MXNet 0.10
フレームワークごとにGPUへの対応状況が異なるため複数バージョンが必要
NVIDIA driver
ソフトウェアスタックの管理は大変例: フレームワークを利用するアプリケーションのスタック
OS
TensorFlow container
CUDA
cuDNN 6cuBLAS…
TensorFlow 1.3
MXNet container
CUDA
cuDNN 5 cuBLAS …
MXNet 0.10
コンテナにまとめることで、複数バージョンの共存を容易に
NVIDIA-DOCKER 1.0github.com/NVIDIA/nvidia-docker
GitHub 上のオープンソースプロジェクト
コンテナ内でホストの GPU を利用可能にする仕組み
様々な環境で利用可能
主要なディープラーニングフレームワークをサポート
25
NVIDIA DOCKERなぜ必要か – ドライバとライブラリ
$ nvidia-smiFailed to initialize NVML: Driver/library version mismatch
GPU のドライバ(カーネルモジュール)
nvidia
nvidia_uvm
nvidia_modeset 等
ユーザーアプリケーションやライブラリ
密結合
①
③
バージョンが合っていないと、このエラー
GPU アプリケーションの動作には、次の 2 つが必要。① GPU ドライバ (カーネルモジュール)② GPU 関連ライブラリ (ユーザー空間)
この 2 つはマイナーバージョンまで一致している必要がある。そのため ② のライブラリをコンテナイメージに含めてしまうと、ドライバのバージョンが異なるホストでは動かない、可搬性の低いイメージになってしまう。
GPU アプリケーションに必要なモジュール
GPU 関連ライブラリlibnvidia-*.so
libcuda.so 等②
26
NVIDIA DOCKERなぜ必要か – ドライバとライブラリ
GPU のドライバ(カーネルモジュール)
nvidia
nvidia_uvm
nvidia_modeset 等
GPU 関連ライブラリlibnvidia-*.so
libcuda.so 等
ユーザーアプリケーションやライブラリ
①
②
③
GPU のドライバ(カーネルモジュール)
nvidia
nvidia_uvm
nvidia_modeset 等
GPU 関連ライブラリlibnvidia-*.so
libcuda.so 等
ユーザーアプリケーションやライブラリ
イメージに含めるのはここだけ コンテナ
ボリュームを生成してコンテナへマウント
ホストのドライバと整合性のとれたライブラリをボリュームに詰め込んでコンテナへ
27
NVIDIA DOCKERなぜ必要か – デバイスファイル
ホスト コンテナ #1
/dev/nvidiactl/dev/nvidia-uvm
/dev/nvidia0/dev/nvidia1/dev/nvidia2/dev/nvidia3/dev/nvidiactl/dev/nvidia-uvm
コンテナ #2
/dev/nvidiactl/dev/nvidia-uvm
/dev/nvidia0/dev/nvidia1/dev/nvidia2
/dev/nvidia2/dev/nvidia3
GPU の操作に必要なデバイスファイルをコンテナにマッピングする必要がある。
これは、 docker run 時に --device オプションで指定することができるが、NVIDIA Docker がこれを自動的に行う。
「どの GPU をコンテナに見せるか」は、環境変数で指定するが、これは NVIDIA Docker のバージョンにより異なる。
V1: NV_GPUV2: NVIDIA_VISIBLE_DEVICES
デバイスファイルのマッピング
28
NVIDIA DOCKER 2NVIDIA Container Runtime をベースとした新しいコマンド
Docker のラッパーではなく、runC と並ぶ一つのランタイムとして実装
NVIDIA-Docker 1.0 との後方互換性を確保
公式 CUDA イメージ以外の様々なイメージに対応
k8s 環境ではこちらのバージョンが必要
NVIDIA Docker 2
OCI ランタイム インタフェース
Caffe PyTorchTensorF
lowNAMD CHROMA
コンポーネント
コンテナ化アプリケーション
nvidia-container-runtime-hook
libnvidia-container
NVIDIA ドライバ
29
コンテナー オーケストレーション: KUBERNETES
代表的なコンテナ オーケストレーション ツール
大規模なクラスターをサポート
GPU サポートも急速に進みつつある状況
Service
Discovery
Intelligent
Scheduling
Self
Healing
Security
Metrics
&
Logging
Authentication
Authorization
Admission
Container
Runtime
30
KUBERNETES ON NVIDIA GPU
k8s のメインラインに対する GPU 対応拡張
https://github.com/NVIDIA/kubernetes/
k8s コミュニティと緊密に連携しながら開発
オープンソース
NGC のレジストリにも登録済み
NVIDIA CONTAINER RUNTIME
KUBERNETES
NVIDIA DRIVER
31
NVIDIA DEVICE PLUGIN
Kubernetes 1.8 から導入された Device Plugin 機構を利用。
Daemonset として各ノードで動作し、GPU をコンテナに利用可能にするほか、GPU に関する各種情報をクラスタへ提供。
$ kubectl create -f raw.github/.../NVIDIA/.../v1.10/device-plugin.yml
32
NVIDIA DEVICE PLUGIN
apiVersion: vkind: Podmetadata:
name: gpu-podspec:
containers:- name: cuda-container
image: nvidia/cuda:9.0-basecommand: ["sleep"]args: ["100000"]extendedResourceRequests: ["nvidia-gpu"]
extendedResources:- name: "nvidia-gpu"
resources:limits:
nvidia.com/gpu: 1affinity:
required:- key: "nvidia.com/gpu-memory"
operator: "Gt"values: ["8000"] # change value to appropriate mem for GPU
Device Plugin によってもたらされる GPU の詳細情報に基づいてノードを選択可能。
例えば• Tesla P100 搭載ノード• GPU メモリを 8GB 以上搭載したノードといった条件が指定できる。
33
NVIDIA GPU CLOUD
NVIDIA CONFIDENTIAL. DO NOT DISTRIBUTE.
NVIDIA GPU CLOUD
30 種類の GPU 対応アプリケーションイメージ各種ディープラーニング フレームワーク、サードパーティの HPC アプリケーション、NVIDIA の HPC 可視化ツール、数々のパートナー アプリケーション
数週間ではなく、数分でイノベーションを生み出すソフトウェア環境を構築するための複雑な作業を、大幅に軽減します。
あらゆる環境からアクセスVolta あるいは Pascal 世代 GPU を搭載した PC、NVIDIA DGX Systems 製品群、そして複数のクラウドサービスプロバイダ
GPU 対応アプリケーションの総合カタログ
NGC の GPU 最適化ディープラーニング コンテナ
NVCaffe
Caffe2
Chainer
Microsoft Cognitive Toolkit (CNTK)
DIGITS
MXNet
PyTorch
TensorFlow
Theano
Torch
CUDA (base level container for developers)
NVIDIA TensorRT inference accelerator with ONNX support
ディープラーニングソフトウェアの包括的なカタログ
コンテナ化されたアプリケーション
TF Tuned SW
NVIDIA Docker
CNTK Tuned SW
NVIDIA Docker
Caffe2 Tuned SW
NVIDIA Docker
PyTorch Tuned SW
NVIDIA Docker
CUDA RTCUDA RTCUDA RTCUDA RT
Linux Kernel と CUDA ドライバ
Tuned SW
NVIDIA Docker
CUDA RT
Other
Frameworks
and Apps. . .
常に最新エヌビディアによるフレームワークとコンテナの月例更新
NGC 日本語ドキュメントWeb で公開中
ユーザーガイド44 ページ
技術概要10 ページ
NGC を始めましょうサインアップ無料
GPU 対応アプリケーションの一覧など詳細はこちら:
nvidia.com/cloud
サインアップはこちらから:
nvidia.com/ngcsignup
39
NVIDIA DEEP LEARNING INSTITUTE
DEEP LEARNING INSTITUTEディープラーニングのハンズオントレーニング
自習ラボ
パートナーコース
オンサイトワークショップ
技術ブログ
ディープラーニング基礎
自動運転車 ゲーム開発とデジタルコンテンツ
金融
豊富なコンテンツ様々な領域におけるディープラーニング活用の基礎から応用まで幅広い教材
インテリジェントビデオ アナリティクス
医療
さらに拡大中
DLI ハンズオンコンテンツの例
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
1
2
2
1
1
1
0
1
2
2
2
1
1
0
1
2
2
2
1
1
0
0
1
1
1
1
1
0
0
0
0
0
0
0
4
0
0
0
0
0
0
0
-4
1
0
-8
入力ピクセル
コンボリューション
カーネル出力ピクセル
コンボリューションカーネルの係数と、入力ピクセルを掛け、足し合わせた値を出力とする。
畳込み層(CONVOLUTIONAL LAYER)
「NVIDIA DIGITS による画像分類入門」より
データセットの作成1.
2. 3.
1. Image Type : Grayscale
2. Image Size : 28 x 28
3. Training Images: /data/train_small
4. Dataset Name: “mnist small”
5. Createボタンを押す
4.
5.
「NVIDIA DIGITS による画像分類入門」より
モデルの作成
1. “mnist small” データセットを選択
2. Training Epochs を”8”にする
3. モデルは、”LeNet” を選択
4. モデル名は、”The right model for the data” を入力
1. “mnist small”データセットを選択
2. Training epochsを”8”に設定
3. “LeNet”を選択
4. “The right model
for the data”を入力
「NVIDIA DIGITS による画像分類入門」より
Loss 関数(検証データ)
Loss 関数(学習データ)
Accuracy検証データセットから求められる
「NVIDIA DIGITS による画像分類入門」より
DATA AUGMENTATION白黒反転した画像を追加
Pixel(Inverted) = 255 – Pixel(original)
黒い背景に白い文字→白い背景に黒い文字
“MNIST full”をクローン(データ/モデルとも)
Training Images: /data/train_invertDataset Name: MNIST invert
Select Dataset: MNIST invertModel Name: MNIST invert
「NVIDIA DIGITS による画像分類入門」より
ネットワークの変更内容
編集後、Visualizeボタンを押して、
ネットワークを確認。
ReLUレイヤの追加
conv1
20 → 75
conv2
50 → 100
reluP1
「NVIDIA DIGITS による画像分類入門」より
コンテンツ パートナー
産業界のパートナー企業、フレームワークの開発コミュニティ、大学などの教育・研究機関と連携してコンテンツの作成とワークショップのデリバリを行っています。
日本の DLI 認定パートナー
株式会社 日立インフォメーションアカデミー
日本サード・パーティ株式会社
51
September 13-14, 2018 | 東京 | #GTC18https://www.nvidia.com/ja-jp/gtc/
WWW.GPUTECHCONF.COM
今年の GTC Japan は9月13–14日開催最も重要な GPU 開発者イベントにぜひご参加ください
台湾 | 5月30-31日日本 | 9月13-14日
ヨーロッパ | 10月9-11日
イスラエル | 10月17-18日ワシントンDC | 10月23-24日
シリコンバレー | 2019年3月18-22日
HPC/AI を支える GPU コンピューティングの今エヌビディア エンタープライズマーケティング本部 佐々木邦暢 (@_ksasaki)