Upload
nvidia-japan
View
3.240
Download
0
Embed Size (px)
Citation preview
Akira Naruse, Senior Developer Technology Engineer, Sep 30, 2017
Voltaは、Chainerで使えるの?
2
Voltaは、Chainerで使えるの?
はい、使えます!
• Voltaって何?
• どれぐらい、Voltaで速くなるの?
• どうすれば、Voltaを使えるの?
3
VOLTA (V100)The Fastest GPU for DL and HPC
Volta Architecture
Most Productive GPU
Improved SIMT Model
New Algorithms
Volta MPS
Inference Utilization
Improved NVLink &
HBM2
Efficient Bandwidth
4
VOLTA (V100)The Fastest GPU for DL and HPC
Volta Architecture
Most Productive GPU
Improved SIMT Model
New Algorithms
Volta MPS
Inference Utilization
Improved NVLink &
HBM2
Efficient Bandwidth
Tensor Core
120 Programmable TFLOPS
Deep Learning
5
TENSOR CORE128 ops /cycle
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
BA C
Mixed Precision
6
VOLTA TENSOR OPERATION
FP16
storage/input
Full precision
product
Sum with
FP32
accumulator
Convert to
FP32 result
FP16
FP16× + FP32
FP32
more products
7
VOLTA GV100 SM
Units Ops/cycle
FP32 64 128
Tensor
Core8 1024
Per SM
8
80 SM5120 FP32 units640 Tensor Cores
VOLTA: TESLA V100
*full GV100 chip contains 84 SMs
Units Ops/cycle
FP32 5,120 10,240
Tensor
Core640 81,920
80 SM
9
P100 V100 Ratio
FP16 or Tensor Core 21 TOPS 120 TOPS 6x
FP32 10 TFLOPS 15 TFLOPS 1.5x
FP64 5 TFLOPS 7.5 TFLOPS 1.5x
HBM2 Bandwidth 720 GB/s 900 GB/s 1.2x
理論ピーク性能
10
どれぐらい、Voltaで速くなるの?P100 FP32, V100 FP32 vs. V100 Tensor Core
Resnet50
(*) Chainer 3.0.0rc1+ と CuPy 2.0.0rc1+ を使用
Conv,
1x1,
64
Conv,
3x3,
64
Conv,
1x1,
256
BN
ReLU
BN
ReLU
BN +x
ReLU
11
精度は大丈夫?http://docs.nvidia.com/deeplearning/sdk/mixed-precision-training/index.html
Training with Mixed-Precision User Guide
12
どうすれば、Tensor Coreを使えるの?
• Volta(Tesla V100)が必要です。
8 GPUs
4 GPUs
13
どうすれば、Tensor Coreを使えるの?
• Voltaが必要です。
• CUDA9, cuDNN7が必要です。
• CUDA8, cuDNN6は
Voltaに対応していません。
14
cuBLAS9Tensor Core Operations
15
cuBLAS9
C = alpha * AB + beta * C
16
cuDNN7Tensor Core Operations
制限
• 一部のConvolutionアルゴリズムのみ、Tensor Coreに対応
• 入力・出力チャネル数は8の倍数
17
どうすれば、Tensor Coreを使えるの?
• Voltaが必要です。
• CUDA9, cuDNN7が必要です。
• CUDA8, cuDNN6はVoltaに対応していません。
• モデルは、FP16向けに書き換えが必要です。
18
FP16対応AlexNet (examples/imagenet/alex.py)
def __init__(self):
chainer.Chain.__init__(self)
W = initializers.HeNormal(1 / np.sqrt(2), np.float16)
bias = initializers.Zero(np.float16)
with self.init_scope():
self.conv1 = L.Convolution2D(None, 96, 11, stride=4, initialW=W, initial_bias=bias)
self.conv2 = L.Convolution2D(None, 256, 5, pad=2, initialW=W, initial_bias=bias)
self.conv3 = L.Convolution2D(None, 384, 3, pad=1, initialW=W, initial_bias=bias)
self.conv4 = L.Convolution2D(None, 384, 3, pad=1, initialW=W, initial_bias=bias)
self.conv5 = L.Convolution2D(None, 256, 3, pad=1, initialW=W, initial_bias=bias)
self.fc6 = L.Linear(None, 4096, initialW=W, initial_bias=bias)
self.fc7 = L.Linear(None, 4096, initialW=W, initial_bias=bias)
self.fc8 = L.Linear(None, 1000, initialW=W, initial_bias=bias)
def __call__(self, x, t):
return Alex.__call__(self, F.cast(x, np.float16), t)
19
どうすれば、Tensor Coreを使えるの?
• Voltaが必要です。
• CUDA9, cuDNN7が必要です。
• CUDA8, cuDNN6はVoltaに対応していません。
• モデルは、FP16向けに書き換えが必要です。
• ChainerとCuPyの、最新のmasterブランチが必要です。
• CUDA9, cuDNN7, Tensor Core対応のPRが、既にマージされています。
• CuPy#353, #362, #363, #492, #494, #495
20
どうすれば、Tensor Coreを使えるの?
• Voltaが必要です。
• CUDA9, cuDNN7が必要です。
• CUDA8, cuDNN6はVoltaに対応していません。
• モデルは、FP16向けに書き換えが必要です。
• ChainerとCuPyの、最新のmasterブランチが必要です。
• CUDA9, cuDNN7, Tensor Core対応のPRが、既にマージされています。
• Stable版(Chainer2とCuPy1)では使えません。
• プラス、以下のPRが必要です。 (いずれ、マージされるでしょう…)
• Chainer#3386: FP16でcuDNNのBNを使用 (9/29に、マージされました)
• Chainer#3388: Convolution層に、Tensor Coreを使用
21
どうすれば、Tensor Coreを使えるの?
• Voltaが必要です。
• CUDA9, cuDNN7が必要です。
• CUDA8, cuDNN6はVoltaに対応していません。
• モデルは、FP16向けに書き換えが必要です。
• ChainerとCuPyの、最新のmasterブランチが必要です。
• CUDA9, cuDNN7, Tensor Core対応のPRが、既にマージされています。
• Stable版(Chainer2とCuPy1)では使えません。
• プラス、以下のPRが必要です (いずれマージされるでしょう)。
• Chainer#3386: FP16でも、cuDNNのBatch Normalizationを使用
• Chainer#3388: Convolution層に、Tensor Coreを使用
• すると、自動でTensor Coreが使えます!
22
どうすれば、Tensor Coreを使えるの?
• Voltaが必要です。
• CUDA9, cuDNN7が必要です。
• CUDA8, cuDNN6はVoltaに対応していません。
• モデルは、FP16向けに書き換えが必要です。
• ChainerとCuPyの、最新のmasterブランチが必要です。
• CUDA9, cuDNN7, Tensor Core対応のPRが、既にマージされています。
• Stable版(Chainer2とCuPy1)では使えません。
• プラス、以下のPRが必要です (いずれマージされるでしょう)。
• Chainer#3386: FP16でも、cuDNNのBatch Normalizationを使用
• Chainer#3388: Convolution層に、Tensor Coreを使用
• すると、自動でTensor Coreが使えます!
• あと、以下のPRもあると良いです。• Chainer#3336: GPUカーネル実行と入力データ転送をオーバーラップ
• Chainer#3097: FP16でマルチGPUトレーニング (NCCL2)
23(*) CUDA 9, cuDNN 7, NCCL 2, Chainer 3.0.0rc1+, CuPy 2.0.0rc1+ を使用、マシンはDGX1V
トレーニング中の様子ImageNet, ResNet50, Volta, Tensor Core使用
グラフ作成、メモリ管理、カーネル投入
Forward Backward
次のデータ準備
データ転送
GPU
CPU
24
バッチサイズ、そんなに大きくして大丈夫?
https://research.preferred.jp/2017/02/chainermn-benchmark-results/ https://research.fb.com/publications/imagenet1kin1h/
25日本最大の GPU 技術イベントにぜひご参加ください
2017/12/12~13 | 東京 | #GTCJapanhttp://www.gputechconf.jp/
基調講演は CEO ジェンスン ファンGPU テクノロジが可能にする AI、VR、自動運転の最先端がここに
GTC Japan 2017 は 2017年12月12 ~ 13日に東京で開催