VOLTA TENSOR コアで 高速かつ高精度に DL モデルをトレーニングする方法 成瀬彰, シニアデベロッパーテクノロジーエンジニア, 2017/12/12

Similar documents
Images per Second Images per Second VOLTA: ディープラーニングにおける大きな飛躍 ResNet-50 トレーニング 2.4x faster ResNet-50 推論 TensorRT - 7ms レイテンシ 3.7x faster P100 V100 P10

GTC Japan, 2018/09/14 得居誠也, Preferred Networks Chainer における 深層学習の高速化 Optimizing Deep Learning with Chainer

Haiku Generation Based on Motif Images Using Deep Learning Koki Yoneda 1 Soichiro Yokoyama 2 Tomohisa Yamashita 2 Hidenori Kawamura Scho

Mastering the Game of Go without Human Knowledge ( ) AI 3 1 AI 1 rev.1 (2017/11/26) 1 6 2

第 1 回ディープラーニング分散学習ハッカソン <ChainerMN 紹介 + スパコンでの実 法 > チューター福 圭祐 (PFN) 鈴 脩司 (PFN)

スライド 1

PowerPoint Presentation

b4-deeplearning-embedded-c-mw

ディープラーニングの最新トレンドとエヌビディアの最新GPU

Slide 1

ディープラーニングとは AGENDA Qwiklabs/DIGITS の使い方 DIGITS による物体検出入門ハンズオン

AGENDA ディープラーニングとは Qwiklab/Jupyter notebook/digits の使い方 DIGITS による物体検出入門ハンズオン

画像分野におけるディープラーニングの新展開

Presentation Title

Slide 1

Deep Learning によるビッグデータ解析 ~ 手法や CUDA による高速化 2014 年 9 月 5 日 G-DEP ソリューションパートナー株式会社システム計画研究所奥村義和

プログラミング実習I

概要 単語の分散表現に基づく統計的機械翻訳の素性を提案 既存手法の FFNNLM に CNN と Gate を追加 dependency- to- string デコーダにおいて既存手法を上回る翻訳精度を達成

Microsoft PowerPoint - pr_12_template-bs.pptx

2017 (413812)

Slides: TimeGraph: GPU Scheduling for Real-Time Multi-Tasking Environments

音響モデル triphone 入力音声 音声分析 デコーダ 言語モデル N-gram bigram HMM の状態確率として利用 出力層 triphone: 3003 ノード リスコア trigram 隠れ層 2048 ノード X7 層 1 Structure of recognition syst

インテル FPGA の Deep Learning Acceleration Suite とマイクロソフトの Brainwave を HW 視点から比較してみる

MATLAB® における並列・分散コンピューティング ~ Parallel Computing Toolbox™ & MATLAB Distributed Computing Server™ ~

Convolutional Neural Network A Graduation Thesis of College of Engineering, Chubu University Investigation of feature extraction by Convolution

PowerPoint プレゼンテーション


Poincaré Embedding による 分散表現の獲得 M1 橋本隼人 森信介 京都大学情報学研究科 / 学術情報メディアセンター森研究室 1

http//umercalbra.org/lectures/deep-learg/ z l l-1 = f w l 1 z l 1 1 f x = 1 + e x x x > 0 f x = 0 x 0 z l l-1 = f w l 1 z l 1

スライド 1

機械学習 ハンズオン-チュートリアル

Microsoft Word - 補論3.2

WiFiの現状

dlshogiアピール文章

データ科学2.pptx

PowerPoint プレゼンテーション

ディープラーニングによって加速する AI 競争 100% 90% 80% 従来 CV 手法 IMAGENET 正答率 ディープラーニング 70% 60% IBM Watson が自然言語処理のブレークスルーを実現 Facebook が Big Sur を発表 Baidu の Deep Speech

Slide 1

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

Microsoft Word - 1 color Normalization Document _Agilent version_ .doc

Microsoft PowerPoint - 7.Arithmetic.ppt

Microsoft PowerPoint - qcomp.ppt [互換モード]

ビッグデータ分析を高速化する 分散処理技術を開発 日本電気株式会社

本ラボの目的 ディープラーニングのイントロダクション ネットワークのトレーニング トレーニングの結果を理解する コンピュータビジョン 画像分類に関するハンズオン Caffe と DIGITS を使用する 1/17/217 6

多変量解析 ~ 重回帰分析 ~ 2006 年 4 月 21 日 ( 金 ) 南慶典

遅延デジタルフィルタの分散型積和演算回路を用いたFPGA実装の検討

人工知能(AI)時代、企業は、何をすべきか?

BIT -2-

最小二乗法とロバスト推定

ディープラーニングが変える未来 - PFN の事業戦略と Chainer on AWS - Preferred Networks 研究担当 VP 比戸将平

,., ping - RTT,., [2],RTT TCP [3] [4] Android.Android,.,,. LAN ACK. [5].. 3., 1.,. 3 AI.,,Amazon, (NN),, 1..NN,, (RNN) RNN

SAP11_03

SUALAB INTRODUCTION SUALAB Solution SUALAB は 人工知能 ( ディープラーニング ) による画像解析技術を通して 迅速 正確 そして使いやすいマシンビジョン用のディープラーニングソフトウェアライブラリーである SuaKIT を提供します これは 従来のマシン

EBNと疫学

Presentation Title

ソフトウェア基礎技術研修

共有辞書を用いた 効率の良い圧縮アルゴリズム

WHITE PAPER RNN

PowerPoint プレゼンテーション

Anaconda (2019/7/3)

nlp1-12.key

要 旨 題目深層学習による人物検出学籍番号 T 氏名海住嘉希指導教員白井英俊近年 深層学習による画像認識が高い精度で成果を挙げていることで注目されている 本研究では 深層学習によって物体認識を行う三つの手法を用いて実装を行った そして 三つの手法の実装結果から人物検出に焦点をあて これら

Jetson and Azure ハンズオン

ボルツマンマシンの高速化

PowerPoint プレゼンテーション

ディープラーニングの組み込み機器実装ソリューション ~GPC/CPU編~

14 化学実験法 II( 吉村 ( 洋 mmol/l の半分だったから さんの測定値は くんの測定値の 4 倍の重みがあり 推定値 としては 0.68 mmol/l その標準偏差は mmol/l 程度ということになる 測定値を 特徴づけるパラメータ t を推定するこの手

Transcription:

VOLTA TENSOR コアで 高速かつ高精度に DL モデルをトレーニングする方法 成瀬彰, シニアデベロッパーテクノロジーエンジニア, 2017/12/12

アジェンダ Tensorコアとトレーニングの概要 混合精度 (Tensorコア) で FP32と同等の精度を得る方法 ウェイトをFP16とFP32を併用して更新する ロス スケーリング DLフレームワーク対応状況 ウェイトをFP16で更新する 2

VOLTA TENSOR コア 4x4 の行列の乗算を 1 サイクルで実行 A 0,0 A 0,1 A 0,2 A 0,3 B 0,0 B 0,1 B 0,2 B 0,3 C 0,0 C 0,1 C 0,2 C 0,3 D = A 1,0 A 1,1 A 1,2 A 1,3 B 1,0 B 1,1 B 1,2 B 1,3 C 1,0 C 1,1 C 1,2 C 1,3 A 2,0 A 2,1 A 2,2 A 2,3 B 2,0 B 2,1 B 2,2 B 2,3 C 2,0 C 2,1 C 2,2 C 2,3 A 3,0 A 3,1 A 3,2 A 3,3 B 3,0 B 3,1 B 3,2 B 3,3 C 3,0 C 3,1 C 3,2 C 3,3 FP16 or FP32 FP16 FP16 FP16 or FP32 D = AB + C 3

VOLTA TENSOR コア 混合精度演算 Volta Tensor Core FP16 FP16 16bit 16bit FP16 FP32 32bit + FP32 FP32 P100 V100 FP16/Tensorコア 20 TFLOPS 125 TFLOPS FP32 10 TFLOPS 15.6 TFLOPS 4

CUDNN: TENSOR コアの実効性能 Pascal FP32 vs. V100 Tensor コア Convolution 層の性能比較 5

Resnet50, Imagenet, Batch:128 P100 FP32, V100 FP32 vs. V100 Tensor コア 0 100 200 300 400 500 600 Time per iteration [ms] P100 FP32 570 ms V100 FP32 360 ms V100 Tensor コア 197 ms 約 3 倍 (*) Chainer 3.0.0rc1+ と CuPy 2.0.0rc1+ を使用 Conv BN Relu Cupy_* Misc. 6

Forward トレーニングの流れ Forward 7

トレーニングの流れ Backprop Backprop 8

トレーニングの流れ Update Update 9

Forward トレーニングの流れ Forward 10

データ型に基づくトレーニングの分類 FP32, FP16, 混合精度 トレーニング 入力データ 行列演算乗算 (x) 行列演算加算 (+) GPU FP32 FP32 FP32 FP32 FP16 FP16 FP16 FP16 Pascal 混合精度 FP16 FP16 FP32 Volta 11

半精度浮動小数点 (FP16) FP16 IEEE754 FP32 単精度 (FP32) と比べると 表現可能レンジが非常に狭い 12

32 64 128 256 512 1024 32 64 128 256 512 1024 32 64 128 256 512 1024 平均 1.2 1.1 1 誤差範囲 TENSOR コアの計算精度 FP32 に近い結果 Tensor コアの演算結果は FP16 と比べて FP32 との誤差が小さい 0.9 0.8 FP32 TensorCore FP16 内積長 行列 A: 指数分布 (activation) 行列 B: 正規分布 (weight) ( 平均 0.0, 分散 1.0) 内積長 : 32 1024 1 万サンプル 誤差区間 : 99% 13

混合精度 (TENSOR コア ) でトレーニング Q: FP32 でトレーニングしたモデルと 同じ精度を得られるのか? A: 可能です その方法を説明します 14

ウェイトの更新には FP16 と FP32 を併用する 15

トレーニング (FP16 混合精度 ) ストレージは FP16 W = W λ*δw (FP16) 勾配は小さい重みが更新されない可能性更新消失問題 ストレージのデータ型 FP16 FP16 FP16 FP16 16

半精度浮動小数点 (FP16) FP16 表現可能範囲が狭い FP32 FP16 の仮数部は 10 ビット 2048 + 1 =? 2049 2048? 17

ウェイトは FP32 で更新 ストレージのデータ型 FP16 FP16 FP16 FP32 FP16 18

ウェイトは FP32 で更新 Backprop Weight Update Forward ΔW (FP16) 変換 ΔW (FP32) W = W λ*δw (FP32) W (FP32) 変換 W (FP16) Update は FP32 で計算する FP16の勾配を FP32に変換 FP32のウェイト ( マスターコピー ) を FP32で更新 FP32のウェイトから FP16のウェイトを作成 Q: FP32 で更新すると遅くならないか? 19

Update トレーニングの時間比率 Forward Backward トレーニング時間の大部分は Backward と Forward Update の時間は短い FP32 計算によるスピード低下は僅か 20

トレーニングの分類 トレーニング 入力データ 行列乗算乗算 (x) 行列乗算加算 (+) ウェイト更新 GPU FP32 FP32 FP32 FP32 FP32 FP16 FP16 FP16 FP16 FP16/FP32 Pascal 混合精度 FP16 FP16 FP32 FP16/FP32 Volta 21

混合精度 + ウェイト FP32 更新 多くのモデルは これで収束する FP32 モデルと同等の精度が得られるケースも多い 同じソルバー 同じハイパーパラメータ 同じ学習レートコントロール 画像分類 (ImageNet) GoogleNet, VGG-D, Inception v3, ResNet-50 ソルバー : モメンタムSGD 言語モデル 機械翻訳 NMT ソルバー : ADAM 22

GOOGLENET FP32 の学習カーブと一致 23

INCEPTION V1 FP32 の学習カーブと一致 24

RESNET-50 FP32 の学習カーブと一致 25

CNN ( 画像分類 ) Alexnet, CaffeNet CNN ( 物体検出 ) RNN 混合精度 + ウェイト FP32 更新 収束しないケース Multibox SSD (VGG-D): 学習できず Faster R-CNN (VGG-D): 精度低下 map: 69.1% (FP32) 68.5% (Tensorコア) Seq2seq ( アテンション付 ): 収束が遅い biglstm: 途中から発散 Q: 問題は何? 26

アクティベーションの勾配 27

アクティベーションの勾配のヒストグラム Multibox SSD (VGG-D, FP32) FP32: ゼロ : 67% 非ゼロ : 33% FP16: ゼロ : 94% 非ゼロ : 6% 28

アクティベーションの勾配のヒストグラム Multibox SSD (VGG-D, FP32) FP16 で表現可能なレンジが ほとんど使われていない 29

ロス スケーリング 30

ロス スケーリング 問題 : 勾配消失 アクティベーションの勾配値は小さい データ型を FP16 にするとゼロになる 解決法 : ロススケーリング ロスの値をスケールアップ ( 大きく ) してから Backpropする ウェイト更新の直前に ウェイトの勾配をスケールダウン ( 小さく ) する スケーリングファクター : 新ハイパーパラメータ? 31

スケールアップ ロス スケーリング スケールダウン 勾配消失回避 32

ロス スケーリング ( 例 ) ロスの値を 256 倍 効果 : 勾配の値も 256 倍になる アクティベーションの勾配値が FP16 の表現可能域にシフト ウェイトの勾配値は FP16 の正規数領域に入る 33

ロス スケーリングの効果 Alexnet トレーニングモード Top1 (%) Top5 (%) FP32 58.6 81.3 FP16 ( スケーリング無し ) 56.7 78.1 FP16 (scaling=1000) 58.9 81.1 Tensorコア (scaling=1000) 59.1 81.2 (*) Nvcaffe-0.16, momentum SGD, 100 epochs, 1024 batch, DGX1 34

ロス スケーリングの効果 Alexnet ロス スケーリング無し ロス スケーリング有り FP32 FP16 (no scaling) FP32 FP16 (scaling=1000) 35

ロス スケーリングの効果 物体検出 トレーニングモード Multibox SSD (map) Facter-RCNN (map) FP32 76.9% 69.1% Tensor コア ( スケーリング無し ) X 68.5% Tensor コア (scaling=256) 77.1% 69.7% 36

SEQ2SEQ NMT: ドイツ語 英語 OpenSeq2Seq https://github.com/nvidia/openseq2sseq NMT_ONE model Encoder: 2-layer bi-directional (512 LSTM) Attention: Normalized Bahdanau Decoder: 4-layer (512 LSTM) 37

SEQ2SEQ OpenSeq2Seq 単に Tensor コアを使用するだけでは 精度が低下 ロス スケーリング (1024) で FP32 と同程度の精度 fp32 TensorCore TensorCore (s=1024) 38

SEQ2SEQ NMT_ONE スケーリングファクター小さくできないか? fp32 TensorCore (s=32k) ロス スケーリング使用で FP32 と同程度の精度スケーリングファクター : 32K fp32 TensorCore (s=32k) 39

ロス関数変更とラーニングレート調整 Ave Loss Sum Loss LARS (Layer-wise Adaptive Rate Scaling) レイヤー毎に学習率を調整 (*) Yang You, et al., Large Batch Training of Convolutional Networks, 2017 40

SEQ2SEQ NMT_ONE fp32 TensorCore (s=512) Sum Loss と LARS 使用スケーリングファクター : 512 FP32 と同程度の精度 fp32 TensorCore (s=512) 41

SEQ2SEQ GNMT-like Encoder: 8-layer bi-directional (1024 LSTM) Attention: GNMT-style normalized Bahdanau Decoder: 8-layer (1024 LSTM) fp32 TensorCore (s=1024) Sum Loss と LARS 使用スケーリングファクター : 1024 FP32 と同程度の精度 fp32 TensorCore (s=1024) (*) Yonghui Wu, et al.: Google s neural machine translation system: Bridging the gap between human and machine translation., 2016 42

言語モデル 1 Billion Word Language Benchmark BigLSTM 2 x 8192 LSTM, 1024 Projection Vocabulary: 800K words Solver: Adagrad (*) Rafal Jozefowicz, et al.: Exploring the Limits of Language Modeling., 2016 43

言語モデル BigLSTM: 2 x 8192 LSTM, 1024 projection ロス スケーリング無しでは収束せず 44

言語モデル BigLSTM: 2 x 8192 LSTM, 1024 projection ロス スケーリング (128) で FP32 と同程度の精度 45

勾配値の特徴 Activation 勾配の範囲は FP16 の表現可能領域より 小さいほうに偏っている 最大値は高々 10 程度? オーバフローすることなく スケールアップ可能 ( ~ 1024 倍 ) Weight 重みの勾配 >> Activation の勾配 消失しやすいのは Activation の勾配 ほぼ全てのモデルで共通の傾向 46

VOLTA 混合精度トレーニング FP32 と同じ精度のモデルをトレーニングする方法 ストレージ (weights, activation, gradients): FP16 ForwardとBackpropの計算 : Tensorコア Batch Normalization の計算は FP32 (cudnn は FP16 入力 FP32 計算 ) Update の計算 : FP32 (weights は fp16 と fp32 の両方で管理 ) 注意 勾配は FP16 で表現できないほど 小さくなることがある ( 勾配消失 ) 勾配消失は ロススケーリングで解消できる 47

DL フレームワークの対応状況 48

NVIDIA CAFFE 0.16 https://github.com/nvidia/caffe/tree/caffe-0.16 FP16 Tensorコアに完全対応 ForwardとBackward: それぞれ データ型 計算型を指定可能 (FP32 or FP16) ウェイト更新 : FP32 更新対応ロス スケーリング対応 49

NVIDIA CAFFE 0.16 https://github.com/nvidia/caffe/tree/caffe-0.16 50

TENSOR FLOW Tensorコア : TensorFlow 1.4で対応データ型をFP16にすると Tensorコアを使用 ウェイト FP32 更新 : 可能 tf.cast(tf.get_variable(..., dtype=tf.float32), tf.float16) ロススケーリング : 可能 scale = 128 grads = [grad / scale for grad in tf.gradients(loss * scale, params)] 51

PYTORCH Tensor コア : 対応 FP16 ストレージにすると Tensor コアを使用 ウェイト FP32 更新 : 可能 Input = input.cuda().half() model = model.cuda().half() ロススケーリング : 可能 52

CHAINER Tensor コア : Chainer V4 で対応予定 データ型を FP16 にすると Tensor コア使用 x = F.cast(x, np.float16) FP32 パラメータ更新 : 対応 ロススケーリング : 対応 ( 予定 ) optimizer = chinaer.optimizers.sgd() optimizer.use_fp32_update() loss = lossfunc(y, t) loss.backward(loss_scale=1024) 53

ウェイトを FP16 で更新できないか? 54

ウェイトを FP32 で更新する問題 FP16 と FP32 の 2 種類のデータ型で ウェイトを管理する必要がある メモリ使用量の増加 FP16 でウェイトを更新できないか? 55

SGD FP16 の問題 : 更新消失 SGD によるウェイト更新 W(t+1) = W(t) λ * ΔW(t) (λ: 学習率 ) FP16 を使うと λ*δw(t) が小さくなりすぎることがある 学習初期 : ΔW(t) が非常に小さい (λ<1) 中盤以降 : 学習初期より ΔW(t) は大きくなるが λ は小さくなる 56

モメンタム SGD 1. モメンタム計算 : H(t+1) = m * H(t) λ * ΔW(t) (m: モメンタム係数 ) 2. ウェイト更新 : W(t+1) = W(t) + H(t+1) FP16 の場合 モメンタム計算 λ * ΔW(t) の減算で更新消失が起きやすい 57

モメンタム SGD 1. モメンタム計算 : H(t+1) = m * H(t) λ * ΔW(t) (m: モメンタム係数 ) 2. ウェイト更新 : W(t+1) = W(t) + H(t+1) モメンタム計算再考 H(t+1) = λ*δw(t) + m*h(t) = λ*δw(t) + m*( λ*δw(t-1) + m*h(t-1) ) = λ*δw(t) + m*( λ*δw(t-1) + m*( λ*δw(t-2) + m*h(t-2) ) ) = λ * ( ΔW(t) + m*δw(t-1) + m 2 *ΔW(t-2) + + m k *ΔW(t-k) + ) モメンタムは 勾配の蓄積と見なすことができる? 58

修正モメンタム SGD FP32 を使わなくても 更新消失を回避できる? モメンタムSGD 1. モメンタム計算 : H(t+1) = m * H(t) λ * ΔW(t) 2. ウェイト更新 : W(t+1) = W(t) + H(t+1) こう 解釈することも可能 1. モメンタム計算 : G(t+1) = m * G(t) + ΔW(t) 2. ウェイト更新 : W(t+1) = W(t) λ * G(t+1) G(t) は勾配の蓄積なので消失しにくい ウェイトは正しく更新される? 59

ウェイトも FP16 で更新 修正モメンタム SGD AlexNet FP32と同じ精度を達成 60

ALEXNET 修正モメンタム SGD トレーニングモード Top1 (%) Top5 (%) FP32 58.6 81.3 FP16 ( スケーリング無し ) 56.7 78.1 FP16 (scaling=1000) 58.9 81.1 Tensorコア (scaling=1000) 59.1 81.2 Tensorコア (scale=1000), FP16ウェイト更新 58.5 81.2 61

INCEPTION-V3 修正モメンタム SGD トレーニングモード Top1 (%) Top5 (%) FP32 73.8 91.4 FP16 ( スケーリング無し ) 51.4 90.8 FP16 (scaling=100) 74.1 91.5 FP16 (scale=100), FP16ウェイト更新 73.5 91.1 62

INCEPTION-V3 修正モメンタム SGD 63

RESNET50 修正モメンタム SGD トレーニングモード Top1 (%) Top5 (%) FP32 73.2 91.2 FP16 (no scaling) 73.2 90.9 FP16 (no scaling), FP16ウェイト更新 72.7 91.4 Tensorコア (no scaling), FP16ウェイト更新 73.5 91.4 64

RESNET50 修正モメンタム SGD Iteration 65

まとめ Tensorコア ( 混合精度 ) トレーニング ForwardとBackprop( 計算の大部分 ) はTensorコアで計算する ウェイトをFP32で更新する 多くのモデルはこれで収束 (FP32と同程度の精度) それ以外も ロス スケーリング設定でFP32レベルの精度に回復 ウェイトも FP16 で更新 モメンタム SGD の修正で CNN で FP32 と同等の精度を確認 66

LINKS Mixed-Precision Training of Deep Neural Networks, NVIDIA blog post devblogs.nvidia.com/parallelforall/mixed-precision-training-deep-neural-networks/ Training with Mixed Precision, NVIDIA DL SDK doc docs.nvidia.com/deeplearning/sdk/mixed-precision-training/index.html Paulius Micikevicius, et al., Mixed Precision Training arxiv.org/abs/1710.03740 67