Más contenido relacionado La actualidad más candente (20) Similar a Volta は、Chainer で使えるの? (20) Volta は、Chainer で使えるの?3. 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. 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. 5
TENSOR CORE
128 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
8. 8
80 SM
5120 FP32 units
640 Tensor Cores
VOLTA: TESLA V100
*full GV100 chip contains 84 SMs
Units Ops/cycle
FP32 5,120 10,240
Tensor
Core
640 81,920
80 SM
9. 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
理論ピーク性能
18. 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. 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. 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. 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. 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. 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