SlideShare a Scribd company logo
佐々木邦暢 (@_ksasaki)
エヌビディア合同会社
AUTOMATIC MIXED PRECISION
2019/5/16 GPU Deep Learning Community #11
2
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
FP32 と FP16
FP32 (単精度) FP16 (半精度)
指数部: 8 ビット、仮数部: 23 ビット 指数部: 5 ビット、仮数部: 10 ビット
表現可能な範囲
1.4 x 10-45 < x < 3.4 x 1038
表現可能な範囲
5.96 x 10-8 < x < 65504
3
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
FP32 と FP16
モデルのパフォーマンスを最大化
FP32 (単精度) を基準にすると FP16 (半精度) の性能は
• 計算のスループット
• メモリアクセスのスループット
• メモリの消費量 (フットプリント)
• 計算のスループット - 8 倍
• メモリアクセスのスループット - 2倍
• メモリの消費量 (フットプリント) - 1/2
4
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
TENSOR コア
混合精度行列演算ユニット
D =
FP32
(FP16)
FP16 FP16 FP32
(FP16)
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
行列の FMA (Fused Multiply-Add)
4x4 の行列の積和演算を1サイクルで計算する性能:
128 演算/サイクル/Tensor コア、1024 演算/サイクル/SM
A B C
5
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
混合精度演算で学習を3倍高速化
Tesla V100 搭載のサーバーでの例
Server: NVIDIA DGX-2 | GPU: 1x V100-SXM3-32GB | CPU: Platinum8168
PyTorch: GNMT: 19.01_py3, Dataset: WMT16 English-German | TensorFlow: OpenSeq2Seq(GNMT), 18.11_py3, Dataset: WMT16 English-German | MXNet: ResNet50: 18.12_py3, Dataset: ImageNet2012
Faster Time to Train
Increased Data
Scientist Productivity
Lower TCO
23435
8115
80051
24476
0
20000
40000
60000
80000
100000
PyTorch
GNMT
TensorFlow
OpenSeq2Seq(GNMT)
TotalTokens/sec
FP32 Mixed
439
1413
0
400
800
1200
1600
MXNet
ResNet50Images/sec
3.0X
3.2X
3.4X
Scale-up Server
1x V100 GPU
6
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
Tensor コアによる混合精度演算
精度を妥協することなく高いスループットを実現
ILSVRC12 classification top-1 accuracy.
(Sharan Narang, Paulius Micikevicius et al., "Mixed Precision Training“, ICLR 2018)
**Same hyperparameters and learning rate schedule as FP32.
0.00%
10.00%
20.00%
30.00%
40.00%
50.00%
60.00%
70.00%
80.00%
AlexNet VGG-D GoogleNet
(Inception v1)
Inception v2 Inception v3 Resnet50
精度
FP32 Mixed Precision**
7
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
機械学習のパフォーマンスを
計測する初めてのベンチマークテスト
https://mlperf.org/
8
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
混合精度演算が MLPERF で勝利
シングルノードでのトレーニング時間
7 部門中 6 部門で NVIDIA GPU が首位を獲得
画像分類
ResNet50 v.1.5
物体検出
(高負荷)
Mask R-CNN
物体検出
(軽負荷)
SSD
翻訳
GNMT
翻訳
Transformer
レコメンデーション
NCF
70 分 167 分 14分
10分 19分 0.4分
Test Platform: DGX-2H - Dual-Socket Xeon Platinum 8174, 1.5TB system RAM, 16 x 32 GB Tesla V100 SXM-3 GPUs connected via NVSwitch
9
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
AMP
GRAPH OPTIMIZATION
CHOOSING WHAT AND
WHERE TO CAST
10
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
混合精度演算の自動適用 (AMP)
わずか数行のコード追加で AMP を有効化することで、最大 3 倍程度のスピードアップ
演算ごとに適切な精度を利用するためにグラフ最適化技術を活用
TensorFlow, PyTorch, MXNet をサポート
容易な高速化で生産性を向上
11
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
勾配のアンダーフロー
勾配の値が 0 に近づくと 0 に丸められてしまう
12
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
ロス スケーリング
小さな値が FP16 の表現可能範囲に収まるようにスケールする
13
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
キャストすべきものの選択
1. できる限り FP16 を使うようにする
特に Tensor コアで実行できる操作は効果が大きいので優先
2. 精度を維持することが重要な部分では FP32 を使う
3. FP16 と FP32 間の「キャスト スラッシング」を避ける
ガイドライン
14
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
キャストすべきものの選択
演算を 3+1 のカテゴリに分類
常にキャスト
(Always)
FP16 化の効果が大きい演算。これらはコストをかけてキャストする価値がある。
例: matmul, conv2d
キャストするかも
(Maybe)
FP16 化によって速くはなるがキャストのコストと見合うとは限らないもの。
例: add, relu
キャストしない
(Never)
数値的安定性を維持するために FP32 が必要なもの。
例: exp, softmax_cross_entropy_with_logits
その他 FP16 実装がないものや入力が浮動小数点型でないもの。
15
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
キャスト可否判定グラフの例
Placeholder
Mul
Reciprocal
GradFilter
MatMul
Placeholder
GradInput
ReluGrad
LossGrad
MatMul
Conv2d
Relu
Add
Loss
MatMul
VariableV2
Mul
VariableV2
Mul
VariableV2
16
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
キャスト可否判定グラフの例
ステップ 1: 演算の色を初期化
Placeholder
Mul
Reciprocal
GradFilter
MatMul
Placeholder
GradInput
ReluGrad
LossGrad
MatMul
Conv2d
Relu
Add
Loss
MatMul
VariableV2
Mul
VariableV2
Mul
VariableV2
17
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
キャスト可否判定グラフの例
ステップ 2: "Never" の伝播
Placeholder
Mul
Reciprocal
GradFilter
MatMul
Placeholder
GradInput
ReluGrad
LossGrad
MatMul
Conv2d
Relu
Add
Loss
MatMul
VariableV2
Mul
VariableV2
Mul
VariableV2
18
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
キャスト可否判定グラフの例
ステップ 3: "Always" に挟まれた "Maybe"
Placeholder
Mul
Reciprocal
GradFilter
MatMul
Placeholder
GradInput
ReluGrad
LossGrad
MatMul
Conv2d
Relu
Add
Loss
MatMul
VariableV2
Mul
VariableV2
Mul
VariableV2
19
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
キャスト可否判定グラフの例
ステップ 4: "Always" の境界検出
Placeholder
Mul
Reciprocal
GradFilter
MatMul
Placeholder
GradInput
ReluGrad
LossGrad
MatMul
Conv2d
Relu
Add
Loss
MatMul
VariableV2
Mul
VariableV2
Mul
VariableV2
20
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
キャスト可否判定グラフの例
ステップ 5: キャストの挿入
FP16 Cast
Mul
Reciprocal
GradFilter
MatMul
Placeholder
GradInput
ReluGrad
LossGrad
MatMul
Conv2d
Relu
Add
Loss
MatMul
VariableV2
Mul
VariableV2
Mul
VariableV2
Placeholder
FP16 Cast
FP16 Cast
FP32 Cast FP16 Cast
FP32 Cast
FP32 Cast
21
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
AMP
GENERAL PURPOSE
22
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
混合精度演算は汎用的
23
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
混合精度演算による高速化
画像分類に限らず様々なタスクで有効
24
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
AMP
SCHEDULE & USAGE
25
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
自動混合精度演算の有効化
わずか数行の追加で最大 3 倍の高速化
More details: https://developer.nvidia.com/automatic-mixed-precision
TensorFlow
PyTorch
MXNet
os.environ['TF_ENABLE_AUTO_MIXED_PRECISION'] = '1'
amp.init()
amp.init_trainer(trainer)
with amp.scale_loss(loss, trainer) as scaled_loss:
autograd.backward(scaled_loss)
model, optimizer = amp.initialize(model, optimizer)
with amp.scale_loss(loss, optimizer) as scaled_loss:
scaled_loss.backward()
OR
export TF_ENABLE_AUTO_MIXED_PRECISION=1
GA Available Since Q2 2018
GA Coming Soon
GA GTC 19
26
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
CHAINER の MIXED PRECISION 対応
https://github.com/chainer/chainer/pull/6337https://github.com/chainer/chainer/pull/6337
27
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
https://twitter.com/melleo1978/status/1110203991764262913
28
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
NGC の TensorFlow イメージ
19.03 以降は Automatic Mixed Precision 対応
https://ngc.nvidia.com/catalog/containers/nvidia:tensorflow
29
Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP
ngc.nvidia.com
Automatic Mixed Precision の紹介

More Related Content

PPTX
DNNの曖昧性に関する研究動向
PDF
【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks?
PDF
Transformerを多層にする際の勾配消失問題と解決法について
PDF
Neural networks for Graph Data NeurIPS2018読み会@PFN
PPTX
【LT資料】 Neural Network 素人なんだけど何とかご機嫌取りをしたい
PDF
【メタサーベイ】基盤モデル / Foundation Models
PDF
【メタサーベイ】Vision and Language のトップ研究室/研究者
PPTX
【DL輪読会】SimCSE: Simple Contrastive Learning of Sentence Embeddings (EMNLP 2021)
DNNの曖昧性に関する研究動向
【DL輪読会】How Much Can CLIP Benefit Vision-and-Language Tasks?
Transformerを多層にする際の勾配消失問題と解決法について
Neural networks for Graph Data NeurIPS2018読み会@PFN
【LT資料】 Neural Network 素人なんだけど何とかご機嫌取りをしたい
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】Vision and Language のトップ研究室/研究者
【DL輪読会】SimCSE: Simple Contrastive Learning of Sentence Embeddings (EMNLP 2021)

What's hot (20)

PDF
SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜
PDF
実装レベルで学ぶVQVAE
PDF
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
PPTX
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
PDF
【DL輪読会】ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders
PDF
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
PDF
自己教師学習(Self-Supervised Learning)
PPTX
ResNetの仕組み
PDF
[DL輪読会]Glow: Generative Flow with Invertible 1×1 Convolutions
PPTX
[DL輪読会]MetaFormer is Actually What You Need for Vision
PPTX
[DL輪読会]Pay Attention to MLPs (gMLP)
PDF
GAN(と強化学習との関係)
PDF
深層学習の不確実性 - Uncertainty in Deep Neural Networks -
PDF
モデルアーキテクチャ観点からのDeep Neural Network高速化
PDF
Vision and Language(メタサーベイ )
PDF
SSII2021 [OS2-02] 深層学習におけるデータ拡張の原理と最新動向
PPTX
【DL輪読会】ViT + Self Supervised Learningまとめ
PPTX
[DL輪読会]Wav2CLIP: Learning Robust Audio Representations From CLIP
PDF
[Track2-2] 最新のNVIDIA AmpereアーキテクチャによるNVIDIA A100 TensorコアGPUの特長とその性能を引き出す方法
PDF
【メタサーベイ】数式ドリブン教師あり学習
SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜
実装レベルで学ぶVQVAE
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
【DL輪読会】ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
自己教師学習(Self-Supervised Learning)
ResNetの仕組み
[DL輪読会]Glow: Generative Flow with Invertible 1×1 Convolutions
[DL輪読会]MetaFormer is Actually What You Need for Vision
[DL輪読会]Pay Attention to MLPs (gMLP)
GAN(と強化学習との関係)
深層学習の不確実性 - Uncertainty in Deep Neural Networks -
モデルアーキテクチャ観点からのDeep Neural Network高速化
Vision and Language(メタサーベイ )
SSII2021 [OS2-02] 深層学習におけるデータ拡張の原理と最新動向
【DL輪読会】ViT + Self Supervised Learningまとめ
[DL輪読会]Wav2CLIP: Learning Robust Audio Representations From CLIP
[Track2-2] 最新のNVIDIA AmpereアーキテクチャによるNVIDIA A100 TensorコアGPUの特長とその性能を引き出す方法
【メタサーベイ】数式ドリブン教師あり学習
Ad

Similar to Automatic Mixed Precision の紹介 (20)

PDF
【de:code 2020】 AI とデータ サイエンスを加速する NVIDIA の最新 GPU アーキテクチャ
PDF
A100 GPU 搭載! P4d インスタンス 使いこなしのコツ
PDF
Chainer で Tensor コア (fp16) を使いこなす
PDF
GPUディープラーニング最新情報
PDF
20170421 tensor flowusergroup
PDF
【A-1】AIを支えるGPUコンピューティングの今
PDF
【旧版】2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
PDF
2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
PDF
機械学習とこれを支える並列計算: ディープラーニング・スーパーコンピューターの応用について
PDF
【関東GPGPU勉強会#4】GTX 1080でComputer Vision アルゴリズムを色々動かしてみる
PDF
20170726 py data.tokyo
PDF
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
PDF
MII conference177 nvidia
PDF
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
PDF
IEEE ITSS Nagoya Chapter NVIDIA
PDF
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
PPTX
Cvim saisentan 半精度浮動小数点数 half
PPTX
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
PDF
AWS Webinar 20201224
【de:code 2020】 AI とデータ サイエンスを加速する NVIDIA の最新 GPU アーキテクチャ
A100 GPU 搭載! P4d インスタンス 使いこなしのコツ
Chainer で Tensor コア (fp16) を使いこなす
GPUディープラーニング最新情報
20170421 tensor flowusergroup
【A-1】AIを支えるGPUコンピューティングの今
【旧版】2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
2009/12/10 GPUコンピューティングの現状とスーパーコンピューティングの未来
機械学習とこれを支える並列計算: ディープラーニング・スーパーコンピューターの応用について
【関東GPGPU勉強会#4】GTX 1080でComputer Vision アルゴリズムを色々動かしてみる
20170726 py data.tokyo
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
MII conference177 nvidia
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
IEEE ITSS Nagoya Chapter NVIDIA
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
Cvim saisentan 半精度浮動小数点数 half
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
AWS Webinar 20201224
Ad

More from Kuninobu SaSaki (20)

PDF
EnrootとPyxisで快適コンテナ生活
PDF
GTC 2019 NVIDIA NEWS
PDF
SC18 NVIDIA NEWS
PDF
GTC Japan 2018 NVIDIA NEWS
PDF
ISC17 NVIDIA NEWS 日本版
PDF
GTC17 NVIDIA News
PDF
SC16 NVIDIA NEWS
PDF
20150821 Azure 仮想マシンと仮想ネットワーク
PPTX
Azure仮想マシンと仮想ネットワーク
PDF
もっとわかる Microsoft Azure 最新技術アップデート編 - 20150123
PDF
Cloudera World Tokyo 2014 LTセッション「マイクロソフトとHadoop」
PDF
20140818 オープン白熱塾 ksasakims
PDF
YAPC::Asia Tokyo 2013 ランチセッション
PDF
Windows Azure HDInsight サービスの紹介
PPTX
Effective Hyper-V - 久しぶりエディション
PDF
HPC Azure TOP500 2012-11
PDF
WDD2012_SC-004
PPTX
TechEd2010_T2-401_EffectiveHyper-V
PPTX
TechEd2009_T1-402_EffectiveHyper-V
PPTX
TechEd2008_T1-407_EffectiveHyper-V
EnrootとPyxisで快適コンテナ生活
GTC 2019 NVIDIA NEWS
SC18 NVIDIA NEWS
GTC Japan 2018 NVIDIA NEWS
ISC17 NVIDIA NEWS 日本版
GTC17 NVIDIA News
SC16 NVIDIA NEWS
20150821 Azure 仮想マシンと仮想ネットワーク
Azure仮想マシンと仮想ネットワーク
もっとわかる Microsoft Azure 最新技術アップデート編 - 20150123
Cloudera World Tokyo 2014 LTセッション「マイクロソフトとHadoop」
20140818 オープン白熱塾 ksasakims
YAPC::Asia Tokyo 2013 ランチセッション
Windows Azure HDInsight サービスの紹介
Effective Hyper-V - 久しぶりエディション
HPC Azure TOP500 2012-11
WDD2012_SC-004
TechEd2010_T2-401_EffectiveHyper-V
TechEd2009_T1-402_EffectiveHyper-V
TechEd2008_T1-407_EffectiveHyper-V

Automatic Mixed Precision の紹介

  • 1. 佐々木邦暢 (@_ksasaki) エヌビディア合同会社 AUTOMATIC MIXED PRECISION 2019/5/16 GPU Deep Learning Community #11
  • 2. 2 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP FP32 と FP16 FP32 (単精度) FP16 (半精度) 指数部: 8 ビット、仮数部: 23 ビット 指数部: 5 ビット、仮数部: 10 ビット 表現可能な範囲 1.4 x 10-45 < x < 3.4 x 1038 表現可能な範囲 5.96 x 10-8 < x < 65504
  • 3. 3 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP FP32 と FP16 モデルのパフォーマンスを最大化 FP32 (単精度) を基準にすると FP16 (半精度) の性能は • 計算のスループット • メモリアクセスのスループット • メモリの消費量 (フットプリント) • 計算のスループット - 8 倍 • メモリアクセスのスループット - 2倍 • メモリの消費量 (フットプリント) - 1/2
  • 4. 4 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP TENSOR コア 混合精度行列演算ユニット D = FP32 (FP16) FP16 FP16 FP32 (FP16) 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 行列の FMA (Fused Multiply-Add) 4x4 の行列の積和演算を1サイクルで計算する性能: 128 演算/サイクル/Tensor コア、1024 演算/サイクル/SM A B C
  • 5. 5 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP 混合精度演算で学習を3倍高速化 Tesla V100 搭載のサーバーでの例 Server: NVIDIA DGX-2 | GPU: 1x V100-SXM3-32GB | CPU: Platinum8168 PyTorch: GNMT: 19.01_py3, Dataset: WMT16 English-German | TensorFlow: OpenSeq2Seq(GNMT), 18.11_py3, Dataset: WMT16 English-German | MXNet: ResNet50: 18.12_py3, Dataset: ImageNet2012 Faster Time to Train Increased Data Scientist Productivity Lower TCO 23435 8115 80051 24476 0 20000 40000 60000 80000 100000 PyTorch GNMT TensorFlow OpenSeq2Seq(GNMT) TotalTokens/sec FP32 Mixed 439 1413 0 400 800 1200 1600 MXNet ResNet50Images/sec 3.0X 3.2X 3.4X Scale-up Server 1x V100 GPU
  • 6. 6 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP Tensor コアによる混合精度演算 精度を妥協することなく高いスループットを実現 ILSVRC12 classification top-1 accuracy. (Sharan Narang, Paulius Micikevicius et al., "Mixed Precision Training“, ICLR 2018) **Same hyperparameters and learning rate schedule as FP32. 0.00% 10.00% 20.00% 30.00% 40.00% 50.00% 60.00% 70.00% 80.00% AlexNet VGG-D GoogleNet (Inception v1) Inception v2 Inception v3 Resnet50 精度 FP32 Mixed Precision**
  • 7. 7 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP 機械学習のパフォーマンスを 計測する初めてのベンチマークテスト https://mlperf.org/
  • 8. 8 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP 混合精度演算が MLPERF で勝利 シングルノードでのトレーニング時間 7 部門中 6 部門で NVIDIA GPU が首位を獲得 画像分類 ResNet50 v.1.5 物体検出 (高負荷) Mask R-CNN 物体検出 (軽負荷) SSD 翻訳 GNMT 翻訳 Transformer レコメンデーション NCF 70 分 167 分 14分 10分 19分 0.4分 Test Platform: DGX-2H - Dual-Socket Xeon Platinum 8174, 1.5TB system RAM, 16 x 32 GB Tesla V100 SXM-3 GPUs connected via NVSwitch
  • 9. 9 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP AMP GRAPH OPTIMIZATION CHOOSING WHAT AND WHERE TO CAST
  • 10. 10 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP 混合精度演算の自動適用 (AMP) わずか数行のコード追加で AMP を有効化することで、最大 3 倍程度のスピードアップ 演算ごとに適切な精度を利用するためにグラフ最適化技術を活用 TensorFlow, PyTorch, MXNet をサポート 容易な高速化で生産性を向上
  • 11. 11 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP 勾配のアンダーフロー 勾配の値が 0 に近づくと 0 に丸められてしまう
  • 12. 12 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP ロス スケーリング 小さな値が FP16 の表現可能範囲に収まるようにスケールする
  • 13. 13 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP キャストすべきものの選択 1. できる限り FP16 を使うようにする 特に Tensor コアで実行できる操作は効果が大きいので優先 2. 精度を維持することが重要な部分では FP32 を使う 3. FP16 と FP32 間の「キャスト スラッシング」を避ける ガイドライン
  • 14. 14 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP キャストすべきものの選択 演算を 3+1 のカテゴリに分類 常にキャスト (Always) FP16 化の効果が大きい演算。これらはコストをかけてキャストする価値がある。 例: matmul, conv2d キャストするかも (Maybe) FP16 化によって速くはなるがキャストのコストと見合うとは限らないもの。 例: add, relu キャストしない (Never) 数値的安定性を維持するために FP32 が必要なもの。 例: exp, softmax_cross_entropy_with_logits その他 FP16 実装がないものや入力が浮動小数点型でないもの。
  • 15. 15 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP キャスト可否判定グラフの例 Placeholder Mul Reciprocal GradFilter MatMul Placeholder GradInput ReluGrad LossGrad MatMul Conv2d Relu Add Loss MatMul VariableV2 Mul VariableV2 Mul VariableV2
  • 16. 16 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP キャスト可否判定グラフの例 ステップ 1: 演算の色を初期化 Placeholder Mul Reciprocal GradFilter MatMul Placeholder GradInput ReluGrad LossGrad MatMul Conv2d Relu Add Loss MatMul VariableV2 Mul VariableV2 Mul VariableV2
  • 17. 17 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP キャスト可否判定グラフの例 ステップ 2: "Never" の伝播 Placeholder Mul Reciprocal GradFilter MatMul Placeholder GradInput ReluGrad LossGrad MatMul Conv2d Relu Add Loss MatMul VariableV2 Mul VariableV2 Mul VariableV2
  • 18. 18 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP キャスト可否判定グラフの例 ステップ 3: "Always" に挟まれた "Maybe" Placeholder Mul Reciprocal GradFilter MatMul Placeholder GradInput ReluGrad LossGrad MatMul Conv2d Relu Add Loss MatMul VariableV2 Mul VariableV2 Mul VariableV2
  • 19. 19 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP キャスト可否判定グラフの例 ステップ 4: "Always" の境界検出 Placeholder Mul Reciprocal GradFilter MatMul Placeholder GradInput ReluGrad LossGrad MatMul Conv2d Relu Add Loss MatMul VariableV2 Mul VariableV2 Mul VariableV2
  • 20. 20 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP キャスト可否判定グラフの例 ステップ 5: キャストの挿入 FP16 Cast Mul Reciprocal GradFilter MatMul Placeholder GradInput ReluGrad LossGrad MatMul Conv2d Relu Add Loss MatMul VariableV2 Mul VariableV2 Mul VariableV2 Placeholder FP16 Cast FP16 Cast FP32 Cast FP16 Cast FP32 Cast FP32 Cast
  • 21. 21 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP AMP GENERAL PURPOSE
  • 22. 22 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP 混合精度演算は汎用的
  • 23. 23 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP 混合精度演算による高速化 画像分類に限らず様々なタスクで有効
  • 24. 24 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP AMP SCHEDULE & USAGE
  • 25. 25 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP 自動混合精度演算の有効化 わずか数行の追加で最大 3 倍の高速化 More details: https://developer.nvidia.com/automatic-mixed-precision TensorFlow PyTorch MXNet os.environ['TF_ENABLE_AUTO_MIXED_PRECISION'] = '1' amp.init() amp.init_trainer(trainer) with amp.scale_loss(loss, trainer) as scaled_loss: autograd.backward(scaled_loss) model, optimizer = amp.initialize(model, optimizer) with amp.scale_loss(loss, optimizer) as scaled_loss: scaled_loss.backward() OR export TF_ENABLE_AUTO_MIXED_PRECISION=1 GA Available Since Q2 2018 GA Coming Soon GA GTC 19
  • 26. 26 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP CHAINER の MIXED PRECISION 対応 https://github.com/chainer/chainer/pull/6337https://github.com/chainer/chainer/pull/6337
  • 27. 27 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP https://twitter.com/melleo1978/status/1110203991764262913
  • 28. 28 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP NGC の TensorFlow イメージ 19.03 以降は Automatic Mixed Precision 対応 https://ngc.nvidia.com/catalog/containers/nvidia:tensorflow
  • 29. 29 Follow us on Twitter! @NVIDIAAIJP ハッシュタグ: #GDLCJP ngc.nvidia.com