Xprof を使用するには、まずモデルのワークロード コード内でプロファイル キャプチャを有効にする必要があります。プロファイルをキャプチャするには、次の 2 つの方法があります。
プログラムによるキャプチャ
プログラムによるキャプチャでは、コード内でプロファイルをキャプチャする場所を指定するため、モデルのコードにアノテーションを付ける必要があります。通常、ユーザーはトレーニング ループのいくつかのステップでプロファイルを収集するか、モデル内の特定のブロックをプロファイリングします。JAX、Pytorch XLA、Tensorflow などのフレームワークでは、トレースのキャプチャ方法がいくつかあります(トレースの開始または停止を API ベースで行うか、コンテキスト マネージャー ベースで行うかなど)。
オンデマンド キャプチャ(手動キャプチャ)
オンデマンド プロファイル キャプチャは、プログラマティック プロファイル キャプチャが無効であった期間に、実行中にアドホックにプロファイルをキャプチャする場合に使用します。これは通常、実行中にモデル指標で問題が発生し、問題を診断するために、その瞬間のプロファイルを一定期間キャプチャする場合に使用されます。
オンデマンド キャプチャを有効にするには、コード内で xprof サーバーを起動する必要があります。たとえば、JAX で jax.profiler.start_server を有効にすると、ML ワークロードで xprof サーバーが起動します。このサーバーがオンデマンド キャプチャ トリガーをリッスンして、プロファイルのキャプチャを開始します。
1 回の実行で複数のセッション
プロファイルをキャプチャする際、1 回の実行のプロファイルを複数のセッションとしてキャプチャできます。トレーニング実行でステップ 1 ~ 3 のプロファイルをキャプチャし、その後、ステップ 8 ~ 10 のプロファイルをキャプチャするとします。これらは同じ実行のプロファイルになりますが、最初のステップ 1 ~ 3 のキャプチャは session1 になり、2 回目のステップ 8 ~ 10 のキャプチャは session2 になります。実行ごとに、異なる日付スタンプの付いたセッションが示されます。異なるセッションにプログラム、オンデマンド、またはその両方の組み合わせでプロファイルをキャプチャできます。
Google Cloud の XProf と Tensorboard
Google Cloud では、cloud-diagnostics-xprof ライブラリを使用して Tensorboard と XProf を簡単にホストすることをおすすめします。GCP でこのライブラリを使用する主なメリットは次のとおりです。
- XProf と TensorBoard の依存関係の簡単な設定とパッケージ化。
- プロファイルを GCS に保存します。これは、長期的な保持や、実行後の分析に役立ちます(実行を終了すると、ローカルでキャプチャされたプロファイルは削除されます)。
- GCE VM または GKE Pod に Tensorboard をプロビジョニングすることで、大規模なプロファイルや複数のプロファイルを高速に読み込みます。読み込み速度や費用に関するニーズに応じてマシンタイプを変更することもできます。
- プロファイルの共有、チームメンバーや Google エンジニアとのコラボレーションのためにリンクを簡単に作成します。
- GKE と GCE のワークロードのオンデマンド プロファイリングが容易になり、ワークロードを実行しているホストを選択してプロファイルをキャプチャできます。
フレームワーク固有の手順
さまざまなフレームワークでプログラムによるプロファイリングとオンデマンド プロファイリングを有効にする方法については、以下をご覧ください。
トラブルシューティング
GPU プロファイリング
GPU で実行されているプログラムは、トレース ビューアの上部付近に GPU ストリームのトレースを生成します。ホストのトレースのみが表示される場合は、プログラムのログまたは出力で次のエラー メッセージを確認します。
次のようなエラーが表示された場合: Could not load dynamic library 'libcupti.so.10.1'
エラー全文:
W external/org_tensorflow/tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcupti.so.10.1'; dlerror: libcupti.so.10.1: cannot open shared object file: No such file or directory
2020-06-12 13:19:59.822799: E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1422] function cupti_interface_->Subscribe( &subscriber_, (CUpti_CallbackFunc)ApiCallback, this)failed with error CUPTI could not be loaded or symbol could not be found.
libcupti.so のパスを環境変数 LD_LIBRARY_PATH に追加します。(locate libcupti.so を試してパスを見つけてください)。次に例を示します。
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/extras/CUPTI/lib64/:$LD_LIBRARY_PATH
この操作を行っても Could not load dynamic library メッセージが表示される場合は、トレースビューアに GPU トレースが表示されるかどうかを確認します。このメッセージは、すべてが正常に動作している場合でも表示されることがあります。これは、libcupti ライブラリが複数の場所で検索されるためです。
次のようなエラーが表示された場合: failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
エラー全文:
E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1445] function cupti_interface_->EnableCallback( 0 , subscriber_, CUPTI_CB_DOMAIN_DRIVER_API, cbid)failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES
2020-06-12 14:31:54.097791: E external/org_tensorflow/tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1487] function cupti_interface_->ActivityDisable(activity)failed with error CUPTI_ERROR_NOT_INITIALIZED
次のコマンドを実行します(再起動が必要です)。
echo 'options nvidia "NVreg_RestrictProfilingToAdminUsers=0"' | sudo tee -a /etc/modprobe.d/nvidia-kernel-common.conf
sudo update-initramfs -u
sudo reboot now
詳細については、このエラーに関する NVIDIA のドキュメントをご覧ください。
リモート マシンでのプロファイリング
プロファイリングするプログラムがリモートマシンで実行されている場合は、上記の手順をすべてリモートマシンで実行し(特に、リモートマシンで XProf サーバーを起動)、SSH ローカルポート転送を使用してローカルマシンから XProf ウェブ UI にアクセスする方法があります。次の SSH コマンドを使用して、デフォルトの XProf ポート 8791 をローカルマシンからリモートマシンに転送します。
ssh -L 8791:localhost:8791 <remote server address>
Google Cloud を使用している場合:
$ gcloud compute ssh <machine-name> -- -L 8791:localhost:8791
複数の TensorBoard インストール
TensorBoard の起動が失敗し、次のようなエラーが表示される場合: ValueError: Duplicate
plugins for name projector
これは、TensorBoard と TensorFlow の 2 つのバージョンがインストールされていることが原因であることがよくあります(たとえば、tensorflow、tf-nightly、tensorboard、tb-nightly の pip パッケージにはすべて TensorBoard が含まれています)。単一の pip パッケージをアンインストールすると、tensorboard 実行可能ファイルが削除され、置き換えるのが難しくなることがあります。そのため、すべてをアンインストールして単一のバージョンを再インストールする必要がある場合があります。
pip uninstall tensorflow tf-nightly tensorboard tb-nightly xprof xprof-nightly tensorboard-plugin-profile tbp-nightly
pip install tensorboard xprof
権限に関する問題を解決する
Docker 環境または Linux で CUDA® Toolkit を使用してプロファイリングを実行すると、CUPTI 権限の不足(CUPTI_ERROR_INSUFFICIENT_PRIVILEGES)に関連する問題が発生することがあります。Linux でこれらの問題を解決する方法については、NVIDIA Developer Docs をご覧ください。
Docker 環境で CUPTI の権限の問題を解決するには、次のコマンドを実行します。
docker run option '--privileged=true'