volta は、chainer で使えるの?

Post on 21-Jan-2018

3.240 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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日に東京で開催

top related