NVIDIA プロファイラを用いた
PYTORCH 学習最適化手法のご紹介
2021.08.30
Mana Murakami, Solution Architect , NVIDIA

AGENDA

1. プロファイリングの重要性について
2. DLProf & Nsight Systems
3. まとめ2よくあるご質問

プロファイリングの重要性について• GPU を学習に使用したら速くなったが、これ以上速くなるか分からない• GPU を学習にしようしているが、GPU がどの程度使われているのかよく分からない• そもそも最適化のステップが分からない3

よくあるご質問

プロファイリングの重要性について• GPU を学習に使用したら速くなったが、これ以上速くなるか分からない• GPU を学習にしようしているが、GPU がどの程度使われているのかよく分からない• そもそも最適化のステップが分からない

ボトルネック解析の為の便利なツールがいくつか存在します4パフォーマンス最適化の限界
プロファイリングの重要性について

アムダ―ルの法則: トレーニングセッションの一部 (GPU で動作) を高速化すると、残りの部分 (CPU で動作) が性能ボトルネックになるGPU

Mixed Precision(TF32/FP16/BF16)

MEMORY

MATH(linear, conv, matmul)

8-16x

Single Precision
FP32

1-2x

CPU1x

(pointwise,reductions)

OTHER(data pipeline,communication)~2x overall fastertraining session time5

NVIDIA プロファイリング スタック
用途毎に使い分け可能な階層型プロファイル スタック

• Nsight Systems と Nsight Compute は CUPTI(Profiling Tools Interface) ベースの GPU アプリケーションの為のプロファイラ• NVTX (NVIDIA Tools Extension Library) は
ソースコードにアノテーションをする為の CUDA ライブラリ• DLProf は内部で Nsight Systems を実行してプロファイルデータを収集し、データサイエンティストが分かりやすい形に整形して可視化

DLProf Viewer
Deep Learning Profiler (DLProf)

NEW
V1.0.0Nsight Systems
NVTX forTensorflow

NVTX Plugins

NVTX for PyTorch

NGC Optimized Framework Containers
NVIDIA COMPUTING PLATFORM

6

性能最適化の為の便利なツール
DL Prof と Nsight Systems

研究者と開発者

NVTX
Nsight Systems
Nsight Compute
アルゴリズム開発者

データサイエンティストと応用研究者

DLProf<Nsight Systems w/ NVTX>
特定のドメイン向けのモデル開発やアプリケーション開発者

7

性能最適化の為の便利なツール
DL Prof と Nsight Systems

研究者と開発者

NVTX
Nsight Systems
Nsight Compute
アルゴリズムやフレームワーク開発者の為のプロファイルツール
アルゴリズム開発者
オーバーヘッドも低く軽量でCUDA処理の流れを細かく把握する事ができる

データサイエンティストと応用研究者

DLProf<Nsight Systems w/ NVTX>解析結果をデータサイエンティストが理解しやすい形に特定のドメイン向けのモデル開発や整形・可視化して学習コードの最適化を支援
アプリケーション開発者

8

DLProf42

DLProf とは?
DLProf :ディープラーニングモデルの為のプロファイリングツール

TensorFlow, PyTorch, TensorRT をサポート

解析結果や最適化のアドバイスを表示

10

DLProf とは?
ダッシュボード•

GPU 使用率チャート••

オペレーション GPU 時間チャート :••すべてのオペレーションを「Tensor コアを使用した処理」「Tensor コア使用できたが使用しなかった処理」「Tensor コアを使用する事が出来ない処理」の 3つに分類してチャートを表示

CUDA カーネルの GPU 時間チャート:••

wall clock time のうち GPU がアクティブになっている割合の表示、複数 GPU の場合すべての GPU の平均利用率を示す

全 CUDA カーネル実行時間を「カーネル内で Tensor コアを使用した時間」「カーネル内でメモリ処理を行っていた時間」「カーネル内のその他すべての処理」の 3つに分類してチャートを表示

Tensor コア使用率チャート•

Tensor コアを使用した処理の全 GPU 時間に対する割合をチャートで表示
11

DLProf とは?
ダッシュボード•

性能 サマリー:••イテレーション サマリー:••

実行時に重要な主要指標を一覧として表示 (実行時間、Tensor コア使用率、GPU 使用率など)

実行中に各イテレーションでかかった時間を示す棒グラフ。Tensor コアを使用した時間、Tensor コア以外でGPUを使用した時間、GPU を使用していない時間のインテレーション毎の内訳が表示される。

トップ 10 GPU オペレーション :•実行時間がかかっている上位10オペレーションをソートして表示。ボトルネックになっている箇所の特定に有効
12

DLProf のインストール
DLProf を使うには?
1. NGC 上で配布されている TensorFlow および PyTorch コンテナに同梱されている DLProf を使う (PyTorch と TensorFlow (1.x/2.x ))•TensorFlow https://ngc.nvidia.com/catalog/containers/nvidia:tensorflow•PyTorch https://ngc.nvidia.com/catalog/containers/nvidia:pytorch
2. Python pip 経由のインストール (PyTorch と TF1.x のみ)• PyTorch の例: (py Index、DLProf および依存パッケージ、 DLProf Viewer Plugin for TensorBoard のインストール)$ pip install nvidia-pyindex$ pip install nvidia-dlprof[pytorch]$ pip install nvidia-tensorboard-plugin-dlprof

13

DLProf のインストール
DLProf を使うには?
1. NGC 上で配布されている TensorFlow および PyTorch コンテナに同梱されている DLProf を使う (PyTorch と TensorFlow (1.x/2.x ))•TensorFlow https://ngc.nvidia.com/catalog/containers/nvidia:tensorflow•PyTorch https://ngc.nvidia.com/catalog/containers/nvidia:pytorch
NOTE:
2. Python pip 経由のインストールNGCで配布されているDeep(PyTorch と TF2.x のみ) LearningコンテナをSingularityで動かす方法はAppendix.のブログを参照のこと
各コンテナに同梱されている
DLProfDLProfのバージョンは以下のドキュメントで確認可能• PyTorch の例: (py Index、DLProf
および依存パッケージ、Viewer Plugin for TensorBoard のインストール)
https://docs.nvidia.com/deeplearning/frameworks/pytorch-release-notes/$ pip install nvidia-pyindex$ pip install nvidia-dlprof[pytorch]$ pip install nvidia-tensorboard-plugin-dlprof

14

DLProf のインストール
DLProf を使うには?
1. NGC 上で配布されている TensorFlow および PyTorch コンテナに同梱されている DLProf を使う (PyTorch と TensorFlow (1.x/2.x ))•TensorFlow https://ngc.nvidia.com/catalog/containers/nvidia:tensorflow•PyTorch https://ngc.nvidia.com/catalog/containers/nvidia:pytorch
2. Python pip 経由のインストール (PyTorch と TF1.x のみ)• PyTorch の例: (py Index、DLProf および依存パッケージ、 DLProf Viewer Plugin for TensorBoard のインストール)$ pip install nvidia-pyindex$ pip install nvidia-dlprof[pytorch]$ pip install nvidia-tensorboard-plugin-dlprof

NOTE:
CUDA toolkit および driver と依存関係がある為、構築環境の CUDA バージョンと互換性があるバー
ジョンを入れる必要がある(参考)https://docs.nvidia.com/deeplearning/frameworks/dlprof-release-notes/index.html
15

PyTorch スクリプトのプロファイル手順
DLProf を使うには?
1. プロファイル対象の PyTorch コードに以下を追加
import nvidia_dlprof_pytorch_nvtx as nvtx
nvtx.init(enable_function_stack=True)with torch.autograd.profiler.emit_nvtx():
for iter in range(iters):#forward#backward

2. DLProf の実行$ dlprof --mode=pytorch python main.py

3. DLProfViewer による結果の可視化$ dlprofviewer –b 0.0.0.0 –p 8000 dlprof_dldb.sqlite

References:https://docs.nvidia.com/deeplearning/frameworks/dlprof-user-guide/index.html#quickstart_topic

16

PyTorch スクリプトのプロファイル手順
DLProf を使うには?
1. プロファイル対象の PyTorch コードに以下を追加
import nvidia_dlprof_pytorch_nvtx as nvtx
nvtx.init(enable_function_stack=True)

3行追加するだけwith torch.autograd.profiler.emit_nvtx():
for iter in range(iters):#forward#backward

2. DLProf の実行$ dlprof --mode=pytorch python main.py

3. DLProfViewer による結果の可視化$ dlprofviewer –b 0.0.0.0 –p 8000 dlprof_dldb.sqlite

References:https://docs.nvidia.com/deeplearning/frameworks/dlprof-user-guide/index.html#quickstart_topic

17

PyTorch スクリプトのプロファイル手順
DLProf を使うには?
1. プロファイル対象の PyTorch コードに以下を追加
import nvidia_dlprof_pytorch_nvtx as nvtx
nvtx.init(enable_function_stack=True)with torch.autograd.profiler.emit_nvtx():
for iter in range(iters):#forward#backward

2. DLProf の実行

DLProf の解析は時間がかかる為、イテレーション数を少なくするのが良い (10~20 mini-batchくらい)--delay オプションを付けて warmup 部をスキップしてプロファイルする事も可能$ dlprof --mode=pytorch python main.py

3. DLProfViewer による結果の可視化$ dlprofviewer –b 0.0.0.0 –p 8000 dlprof_dldb.sqlite

References:https://docs.nvidia.com/deeplearning/frameworks/dlprof-user-guide/index.html#quickstart_topic

18

PyTorch スクリプトのプロファイル手順
DLProf を使うには?
1. プロファイル対象の PyTorch コードに以下を追加
import nvidia_dlprof_pytorch_nvtx as nvtx
nvtx.init(enable_function_stack=True)with torch.autograd.profiler.emit_nvtx():
for iter in range(iters):#forward#backward

2. DLProf の実行
特にファイル名を指定せずに実行した場合、「dlprof_dldb.sqlite」と「nsys_profile.sqlite」が$ dlprof --mode=pytorch python
main.py
3. DLProfViewer による結果の可視化

出力される
Dlprofviewerには「dlprof_dldb.sqlite」を指定$ dlprofviewer –b 0.0.0.0 –p 8000 dlprof_dldb.sqlite

References:https://docs.nvidia.com/deeplearning/frameworks/dlprof-user-guide/index.html#quickstart_topic

19

例: DLProf + DLProfViewer によるプロファイル結果
GPU 最適化前 (AMP未使用/バッチサイズ小)全実行時間の殆どがCPU処理なのが一目で分かる

20

例: DLProf + DLProfViewer によるプロファイル結果
GPU 最適化前 (AMP未使用/バッチサイズ小)“Problem detected:”と”Recommended Change:”
全実行時間の殆どがCPU処理が表示され、問題点が分かるなのが一目で分かる

21

NVIDIA NSIGHTSYSTEMS
22
42

NSIGHT ツールワークフロー

新しくなった CUDA プロファイルツール群
スタート

Nsight Systems

全体的 なパフォーマンスを再確認

全体的なパフォーマンスを再確認

包括的なシステムレベルの性能確認

メトリック/カウンタを用いた
CUDAカーネル単位の詳細性能確認

Nsight Compute

CUDA カーネル詳細性能確認用

https://developer.nvidia.com/nsight-systems

グラフィックフレーム単位の詳細プロファイル

Nsight Graphics

フレーム/レンダー詳細性能確認

23

Nsight Systems

新しくなった CUDA プロファイルツール群
主な機能:•

システム全体のアルゴリズム最適化••

アプリケーション内のボトルネックを探しに有効••

マルチプロセスのアプリケーション解析のサポート

非常に高速なGUIタイムライン上で何百万ものイベントを視覚化

コマンドライン、IDE(統合型開発環境)の両方に対応

OS: Linux (x86, Power, Arm SBSA, Tegra), Windows, MacOSX (host)GPUs: Pascal+$ nsys profile –t cuda,osrt,nvtx,cudnn,cublas –o inference_result.qdstrm –w true
python inference.py
https://developer.nvidia.com/nsight-systems

24

CPU
utilization
Processes &threads

OS runtime
APIs
NVTX
annotations

CUDA &cuBLAS APIs

GPU CUDA
Kernels & memorytransfers

NVTX projected on
GPU CUDA streams

CPU IP &backtracesample data25

開発環境に NSIGHT SYSTEMS がインストールされていない場合NSIGHT SYTEMS
Setting Up and Using Nsight Systems Inside Containers
CUDA 11.4: install$ apt-get update –y$ apt-get install -y cuda-nsight-systems-11-4 nsight-systems-2021.2.4

CUDA 11.3: install$ apt-get update –y$ apt-get install -y cuda-nsight-systems-11-3 nsight-systems-2021.1.3

CUDA 11.2: install$ apt-get update –y$ apt-get install -y cuda-nsight-systems-11-2 nsight-systems-2020.4.3

Mapping an Nsight Systems Host Installation into a Container$ docker run --rm -it --network=host --gpus=all -v /opt/nvidia/nsight-systems/2021.1.3:/opt/nvidia/nsight-systems/2021.1.3
nvcr.io/nvidia/pytorch:21.08-py3 bash

\26

NSIGHT SYSTEMS を使うには?
NSIGHT SYTEMS
Example$ nsys profile -t nvtx,cuda,osrt,cublas--stats=true\-f true\-o pusch_result\
python main.py\

APIs to be traced
Outputs profiling information similar to nvprof
Overwrite the output
Output filename

cuda– GPU kernel
osrt– OS runtime
nvtx– NVIDIA Tools Extension
cublas – CUDA BLAS libraryhttps://docs.nvidia.com/nsight-systems/2020.3/profiling/index.html#cli-options

27

NSIGHT SYSTEMS を使うには?
NSIGHT SYTEMS
Example$ nsys profile -t nvtx,cuda,osrt,cublas--stats=true\-f true\-o pusch_result\python main.py
cuda– GPU kernel
osrt– OS runtime
nvtx– NVIDIA Tools Extension
cublas – CUDA BLAS library\APIs to be traced
Outputs profiling information similar to nvprof
Overwrite the output
Outputfilename
Other UserfulOptions• --delay (-y) : Collection start delay in seconds• --duration(-d): Collection duration in seconds.
• --capture-range(-c): none/cudaProfilerApi/nvtx
etc..

https://docs.nvidia.com/nsight-systems/2020.3/profiling/index.html#cli-options

28

例: Nsight Systems + NVTX

Nsight Systems プロファイル結果(NVTX あり)

1iteration

前処理
11.07sec

推論処理(10iteration) 28.924sec

アノテーションする事でタイムライン上で処理を把握しやすくなる！

29

Appendix. 技術ブログ・関連セッション

NVIDIA プロファイラを用いた Pytorch 学習最適化手法のご紹介

Deep Learning Examples• https://github.com/NVIDIA/DeepLearningExamples/
How to Run NGC Deep Learning Containers with Singularity• https://developer.nvidia.com/blog/how-to-run-ngc-deep-learning-containers-with-singularity/
Profiling and Optimizing Deep Neural Networks with DLProf and PyProf (TensorFlow)• https://developer.nvidia.com/blog/profiling-and-optimizing-deep-neural-networks-with-dlprof-and-pyprof/
Deep Learning Performance Optimization with Profiling Tools• https://www.nvidia.com/en-us/on-demand/session/gtcspring21-s31228/
Profiling and Optimizing Deep Neural Networks with DLProf and PyProf• https://www.nvidia.com/en-us/on-demand/session/gtcspring21-s31341/

PyTorch Performance Tuning Guide• https://www.nvidia.com/en-us/on-demand/session/gtcspring21-s31831/
30

THANK YOU!