CUDA
GPU
Profiling
nvvp

NVIDIA Visual Profiler 入門

はじめに

NVIDIA Visual Profilerという、CUDAに関する、描画が少しリッチなProfilerがあります。
こんな感じです。

12

ボトルネックを解析したり、Optimizationしたりするのに有効です。
リモートマシンでInstallしておいて nvvp とすると起動して、以下のようにターミナル端末からX11とかで起動することもできますが

12

動作が重くなりがちなので、 nvprof でprofilingだけリモートマシンで行なって、 scp でローカルマシンに結果を飛ばして、
ローカルの NVIDIA Visual Profilerを使う という一連の流れを紹介したいと思います。
(なお、リモートマシンは nvprofが使えることを前提としてます)

公式のドキュメントはここにあります。(英語)
http://docs.nvidia.com/cuda/profiler-users-guide/index.html#visual
http://cs.colby.edu/courses/S14/cs336/online_materials/CUDA_Profiler_Users_Guide.pdf
http://www.sie.es/wp-content/uploads/2015/12/cuda-profiling-tools.pdf
http://people.maths.ox.ac.uk/gilesm/cuda/lecs/NV_Profiling_lowres.pdf
こちらも参考になりました。
http://topsecret.hpc.co.jp/wiki/index.php/CUDA_5%E3%81%AE%E6%96%B0%E6%A9%9F%E8%83%BD(4):_nvprof%E3%83%97%E3%83%AD%E3%83%95%E3%82%A1%E3%82%A4%E3%83%A9

ローカルマシンのセットアップ

まずはここからローカルマシンにダウンロード & インストール
https://developer.nvidia.com/nvidia-visual-profiler

  1. 左側のDownload CUDA Toolkit 8.0を選択
  2. 今回、localマシンがOSXなので、OSXの最新版っぽいものを選択して、dmgとpatchをダウンロード

11

  1. まず、容量大きい方のdmgを開いて、インストーラーを起動、この時パスワードを求められる
  2. Accept and Proceedを選択
  3. Install CompleteしたらFinish

123

  1. 同様にpatchを開き、CUDA Patchを選択したまま、Next
  2. Install CompleteしたらFinish

12

これにて準備は完了。

nvvpアプリケーションを探し出して、起動すれば、NVIDIA Visual Profilerがローカル環境で使えるようになります。
Screen Shot 2017-08-23 at 16.26.33.png

使ってみる

nvprofでprofileをとる

例えばCaffe2とかで、以下のようなコマンドを、先頭に、nvprof -o profile.nvp をつけるような形でprofilingします。
nvprofに関しては、以下のサイトを
http://docs.nvidia.com/cuda/profiler-users-guide/index.html#nvprof-overview

nvprof -o profile.nvp \
      python \
          ${CAFFE2_HOME}/caffe2/python/examples/resnet50_trainer.py  \
          --train_data $TRAIN_DATA \
          --num_gpus $NUM_GPUS \
          --batch_size $32 \
          --epoch_size 4096 \
          --num_epochs 1 \
          --base_learning_rate 1.0 \
          --weight_decay 0.0001

このようにして、nvprofの結果をprofile.nvpとして、保存します。

scpなどでローカルマシンに結果を転送

このprofile.nvpscpコマンドなどを用いて、ローカルマシンにダウンロードし、NVIDIA Visual Profilerで見てみます。

$ scp username@XXX_Cluster:/hoge/profile.nvp /hoge/Desktop

NVIDIA Visual Profilerでprofile.nvpを開く

  1. まずNVIDIA Visual Profilerを起動し、importからprofile.nvpを開きます
  2. nvprofを選択し、今回はsingle processを選択します。
  3. Timeline data file から Browseを選択し、profile.nvpのパスを指定
  4. 選択したらFinishでloadする

12

12

12

12

すると、以下のような画面が表示されます。

Screen Shot 2017-08-26 at 17.52.00.png

NVIDIA Visual Profilerの機能紹介

WIP

the following kernels are ordered by optimization importance based on execution time and achieved occupacy.
Optimization of higher ranked kernels (those that appear first in the list) is more likely to improve performance compared to lower ranked kernels

以下のカーネルは、実行時間と達成された占有率に基づいて最適化の重要度によって順序付けられます。
上位ランクのカーネル(リストの最初に表示されるもの)の最適化は、ランクの低いカーネルに比べてパフォーマンスを向上させる可能性が高くなります

参考

https://gist.github.com/sonots/5abc0bccec2010ac69ff74788b265086