NVIDIA visual profiler (以下、NVVP) は CUDA に同梱されているプロファイラで、CPU/GPUの使用率、メモリ使用量、データ転送量やその時間、遅延の原因など、GPUに関する調査を行うことができるプロファイラです。GUI上でのビジュアルプロファイリングだけでなく、CUI上でのテキストベースのプロファイリングも可能です。
OCTOPUSでは、NVIDIA visual profiler 9.0 が利用可能です。
NVVP(CUDA)のインストールディレクトリは下記になります。
/octfs/apl/CUDA/cuda-9.0
利用方法
バッチリクエストにより計算ノード上でプログラムの調査を行い、得られた結果をフロントエンド上で閲覧する、という利用方法になります。
nvvpを利用する際の具体的な手順とジョブスクリプトについて以下で解説します。
1.ジョブスクリプトの作成、投入
-
以下の例は、OCTOPUS GPUノードで NVVP を用いたプログラムの解析を行うジョブスクリプトです。
スクリプト名に特に指定はありません。
テキストベースプロファイリングの場合
1 2 3 4 5 6 7 8 |
#!/bin/bash #PBS -q OCTOPUS #PBS -l cpunum_job=24,elapstim_req=1:00:00,gpunum_job=1 cd $PBS_O_WORKDIR export CUDA_PATH=/octfs/apl/CUDA/cuda-9.0 export PATH=$CUDA_PATH/bin:$PATH export LD_LIBRARY_PATH=$CUDA_PATH/lib64:$LD_LIBRARY_PATH /octfs/apl/CUDA/cuda-9.0/bin/nvprof ./a.out |
ビジュアルプロファイリングの場合(シリアル実行)
1 2 3 4 5 6 7 8 |
#!/bin/bash #PBS -q OCTOPUS #PBS -l cpunum_job=24,elapstim_req=1:00:00,gpunum_job=1 cd $PBS_O_WORKDIR export CUDA_PATH=/octfs/apl/CUDA/cuda-9.0 export PATH=$CUDA_PATH/bin:$PATH export LD_LIBRARY_PATH=$CUDA_PATH/lib64:$LD_LIBRARY_PATH /octfs/apl/CUDA/cuda-9.0/bin/nvprof -o result.nvvp ./a.out |
ビジュアルプロファイリングの場合(IntelMPI並列実行)
1 2 3 4 5 6 7 8 9 10 |
#!/bin/bash #PBS -q OCTOPUS #PBS -l cpunum_job=24,elapstim_req=1:00:00,gpunum_job=1 #PBS -b 1 #PBS -T intmpi cd $PBS_O_WORKDIR export CUDA_PATH=/octfs/apl/CUDA/cuda-9.0 export PATH=$CUDA_PATH/bin:$PATH export LD_LIBRARY_PATH=$CUDA_PATH/lib64:$LD_LIBRARY_PATH mpirun ${NQSII_MPIOPTS} -np 24 /octfs/apl/CUDA/cuda-9.0/bin/nvprof -o result.%q{PMI_RANK}.nvvp ./a.out |
nvprofコマンドが、NVIDIA profiler による調査を行うことを指示するコマンドです。
-oオプションは、ビジュアルプロファイリング用の解析ファイルのファイル名を指定するオプションです。
MPI並列実行の場合、上記のように出力ファイル名を指定することで各プロセスが別ファイルに解析結果を出力します。"PMI_RANK"はIntelMPI用の環境変数ですので、OpenMPIを利用している場合は"OMPI_COMM_WORLD_RANK"に変更してください。
これ以外にも、調査モードや調査レベル、出力内容、形式など様々なオプションで指定できます。例えば、デフォルトではカーネル主体の調査モードですが、"--print-gpu-trace"オプションを指定するとGPUデバイス主体の調査モードになります。その他のオプションや詳細は下記のユーザーガイドをご覧ください。
NVIDIA Profiler User's Guide
ジョブスクリプトのその他の行についてはこちらをご参照ください。
作成したジョブスクリプトをqsubコマンドで投入し、計算ノード上でプロファイリングを行います。
% qsub nvvp.sh
3.解析結果の確認
-
ジョブの実行が終了すると、ジョブスクリプトで指定したディレクトリ内に解析結果ファイルが出力されます。
解析結果はCUI、GUIどちらでも閲覧することが可能です。特に理由がない限りは、GUIを用いて閲覧することを推奨します。
結果の閲覧はフロントエンドで行うことになるためメモリ使用量上限を2GBに制限していますが、GUIで閲覧する場合は解析結果ファイルの5~6倍のメモリ容量が必要となるため、大規模なファイルをGUIで閲覧しようとするとメモリ不足によりエラーが発生することがあります。
一時的に上限を引き上げることも可能ですので、メモリ不足のエラーが発生した場合は問い合わせフォームよりご連絡ください。
テキスト形式での閲覧方法
-
-oオプションを指定した場合は、指定したファイルをlessコマンドで確認してください。上記の場合、result.txtに出力されます。
-oオプションを指定しなかった場合は、標準出力エラーファイルに解析結果が出力されます。
GUIでの閲覧方法
-
GUIでの利用にはXサーバ環境が必要となります。こちらを参考に、あらかじめ起動をお願いいたします。
下記コマンドでNVVPを立ち上げます。
% /octfs/apl/CUDA/cuda-9.0/bin/nvvp
GUIが立ち上がったら、上部メニューの [File] から [Open] を選択し、解析結果を出力したファイル(拡張子が.nvvpのファイル)を開いてください。
MPI並列実行の場合、上部メニューの [File] から [Import]を選択、[Nvprof]を選択して[Next]、[Mutipul prosesses]を選択して[Next]、出力した解析ファイルを全て選択して[Finish]を選択することで、全てのプロセスの解析結果を1つのタイムラインに表示することができます。
以下のように調査結果が表示されますので、見たい項目にタブを切り替えつつ、結果をご確認ください。
参考情報
コマンドで指定できるオプションの解説や、GUIでの各項目の内容、使い方など、NVVPに関する詳細は下記の公式ページをご参照ください。
NVIDIA Visual Profiler NVIDIA Profiler User's Guide