このガイドでは、Collective Communication Analyzer(CoMMA)ライブラリを有効、無効にして管理する方法について説明します。CoMMA は、Google Cloud サービスの NCCL テレメトリーを収集します。CoMMA の詳細については、Collective Communication Analyzer(CoMMA)をご覧ください。
CoMMA を有効にする
NCCL gIB プラグインを含むイメージを使用すると、CoMMA がプリインストールされ、有効になります。これらのイメージのリストについては、CoMMA が有効になっているイメージをご覧ください。
インストール オプション
これらのイメージを使用せず、CoMMA をインストールする場合は、次のいずれかの方法を使用します。
| インストール方法 | サポートされているマシンタイプ |
|---|---|
| NCCL Google Infrastructure Bundle(gIB)イメージ (新しいマシンタイプにおすすめ) | A4X Max、A4X、A4 High、A3 Ultra |
| CoMMA インストーラ イメージ | A4X、A4 High、A3 Ultra |
| ソースからビルド(古いマシンタイプでは必須) | GPU が接続された A3 Mega、A3 High、A3 Edge、A2 Ultra、A2 Standard、N1 |
CoMMA をインストールする
CoMMA をインストールするには、次のいずれかのオプションを選択します。
NCCL gIB 画像
NCCL gIB イメージを使用して CoMMA をインストールするには、次のコマンドを実行します。
docker run --rm --name nccl-gib-installer --volume /usr/local/gib:/var/lib/gib \ us-docker.pkg.dev/gce-ai-infra/gpudirect-gib/nccl-plugin-gib install \ --install-nccl
CoMMA インストーラ イメージ
CoMMA バイナリはスタンドアロンの Docker イメージで取得できます。CoMMA Docker イメージ us-docker.pkg.dev/gce-ai-infra/gpudirect-gib/comma-installer を initContainers として使用して、CoMMA バイナリをワークロード コンテナにインストールできます。コンテナはバイナリを /artifacts ディレクトリに保存します。
CoMMA インストーラ イメージを使用する手順は次のとおりです。
次のスニペットを
initContainersに追加して、CoMMA をワークロードにインストールします。- name: profiler-plugin-installer image: us-docker.pkg.dev/gce-ai-infra/gpudirect-gib/comma-installer:latest imagePullPolicy: Always volumeMounts: - name: nccl-plugin-volume mountPath: /usr/local/nccl-plugin command: - /bin/sh - -c - | set -ex rm -rf /usr/local/nccl-plugin/lib64/libnccl-profiler.so cp /artifacts/libnccl_profiler.so /usr/local/nccl-plugin/lib64/libnccl-profiler.so # GPUViz is a dependency of telemetry insights such as straggler detection rm -rf /usr/local/nccl-plugin/lib64/libGPUViz.so cp /artifacts/libGPUViz.so /usr/local/nccl-plugin/lib64/
この YAML 構成スニペットは、CoMMA をインストールするコンテナを指定します。このスニペットでは、インストーラ コンテナ イメージ、その pull ポリシー、プラグインのボリューム マウントを指定します。同じボリューム マウントを、LD_LIBRARY_PATH に <mount-path>/lib64 を追加してワークロード コンテナにマウントする必要があります。command セクションは、シェル スクリプトを実行して既存のプロファイラ ライブラリを削除します。次に、新しいプロファイラ ライブラリを指定されたプラグイン ディレクトリにコピーします。このスクリプトにより、正しいバージョンのプロファイラ プラグインがインストールされ、使用できるようになります。
ソースからビルドする
ソースから CoMMA ライブラリをビルドするには、次のソフトウェアをインストールします。
- コンパイラと Cargo で必要な Rust プログラミング言語。これは rustup またはシステム パッケージでインストールできます
Libclang-dev。bindgenが必要です。CMakeバージョン 3.10 以降
ソースからビルドするには、次の手順を行います。
リポジトリとそのサブモジュールのクローンを作成します。
git clone --recurse-submodules https://github.com/google/CoMMA
Cargo を使用してバイナリをコンパイルします。
cargo build --release
Cargo はバイナリを
target/release/libnccl_profiler.soに保存します。次のいずれかの方法で NCCL を有効にして、CoMMA ライブラリを読み込みます。
- コンパイルされた
libnccl_profiler.soをLD_LIBRARY_PATHのディレクトリにコピーします。名前をlibnccl-profiler.soに変更します(アンダースコアではなくハイフンを使用します)。 - 別の方法として、
NCCL_PROFILER_PLUGIN環境変数を設定して.soファイルのパスを指定します。
- コンパイルされた
インストールまたは有効化を確認する
NCCL が CoMMA ライブラリを読み込んでいることを確認するには、NCCL ログを確認します。
- NCCL デバッグ ロギングを有効にします。
NCCL_DEBUG=INFO環境変数を設定して、ロギングを有効にします。より詳細なデバッグレベルを指定することもできます。その他のデバッグ オプションについては、NVIDIA のドキュメントのNCCL_DEBUGセクションをご覧ください。 - デバッグする
INITサブシステムを指定します。NCCL_DEBUG_SUBSYS=INIT環境変数を設定して、INITを指定します。他のサブシステムを指定することもできます。サブシステムのその他のオプションについては、NCCL_DEBUG_SUBSYSセクションをご覧ください。 - NCCL ログで、次のような行を探します。
NCCL INFO PROFILER/Plugin: Plugin name set by env to PATH_TO_PROFILER_PLUGIN
CoMMA を無効にする
CoMMA がすでにインストールされている場合は、ワークロードを実行する前に NCCL_TELEMETRY_MODE=0 CoMMA 環境変数を設定して、NCCL テレメトリーの収集を防止します。CoMMA 環境変数を設定するには、環境変数を設定するをご覧ください。
CoMMA を無効にした後で再度有効にする手順は次のとおりです。
NCCL_TELEMETRY_MODE環境変数を 0 以外の値に設定します。たとえば、デフォルト モードを使用するには、NCCL_TELEMETRY_MODE=3を指定します。オプションの完全なリストを確認するには、構成オプションの表の
NCCL_TELEMETRY_MODEをご覧ください。
CoMMA NCCL テレメトリーを構成して表示する
環境で CoMMA が有効になっている場合は、データの粒度レベルを設定して、収集するテレメトリー データのタイプを構成できます。このセクションでは、データ粒度と使用可能なオプションを設定する方法について説明します。
また、CoMMA が収集したデータを確認して、組織のセキュリティ ポリシーに沿っていることを確認したり、独自の NCCL テレメトリー分析ツールで分析したりすることもできます。そのためには、未加工データをローカル ファイルにエクスポートします。
データの粒度を設定する
CoMMA は、さまざまな粒度レベルで NCCL テレメトリーを収集します。環境変数を使用して粒度レベルを構成します。CoMMA 環境変数を設定するには、環境変数を設定するをご覧ください。
- デフォルトの動作: デフォルトでは、CoMMA は NCCL オペレーション(コレクティブとピアツーピアの両方を含む)、それらのオペレーションのメタデータ、完了時間を追跡します。次の環境変数を使用します。
NCCL_PROFILER_TRACK_NCCLOP=trueNCCL_PROFILER_AGGREGATE_STEPS=trueNCCL_PROFILER_TRACK_INTERPROCESS_PROXYOP=true
- より詳細なレベルのデータ収集を有効にするには、次の環境変数を設定します。
NCCL_PROFILER_TRACK_PROXYOP=trueを設定して、プロキシ オペレーションの完了時間を追跡します。NCCL_PROFILER_TRACK_STEPS=trueを設定して、各ネットワーキング I/O オペレーションに費やされた時間を追跡します。この設定では、最も細かい粒度が得られます。
環境変数の完全なリストについては、構成オプションをご覧ください。
データをローカル ファイルにエクスポートする
未加工データをローカル ファイルにエクスポートして表示します。データをローカル ファイルにエクスポートして出力を表示する手順は次のとおりです。
NCCL_TELEMETRY_MODEを1または4に設定します。NCCL_TELEMETRY_MODE環境変数については、構成オプションをご覧ください。次のいずれかのエクスポート パスを設定します。
NCCL_PROFILER_LATENCY_FILE=PATHを設定して、詳細なイベント トレースをローカル ファイルにエクスポートします。PATHは、/tmp/latency-%p.txtなどのパスに置き換えます。集計された概要統計情報をエクスポートするには、
NCCL_PROFILER_SUMMARY_FILE=PATHを設定します。PATHは、/tmp/summary-%p.txtなどのパスに置き換えます。システムは
%pをプロセス ID に置き換えます。
出力を確認します。未加工の出力は JSON ファイルです。
構成オプション
以降のセクションでは、CoMMA で構成できるすべての環境変数について説明します。また、環境変数の設定方法についても説明します。
CoMMA 環境変数を設定する
CoMMA 環境変数をデフォルト以外の値に設定するには、環境変数を設定します。環境変数は、Compute インスタンスのコマンドラインで設定するか、起動スクリプトに追加できます。コマンドラインで環境変数を設定した場合、値はセッションごとにのみ保持されます。環境変数を永続化するには、~/.bashrc ファイル、~/.profile、またはオペレーティング システムで使用する起動ファイルに環境変数を配置します。詳細については、オペレーティング システムのドキュメントをご覧ください。
ワークロードは NCCL の初期化中に変数を読み取るため、ワークロードが開始する前に CoMMA 環境変数を設定する必要があります。環境変数は次のように設定できます。
export ENVIRONMENT_VARIABLE=VALUE
次のように置き換えます。
ENVIRONMENT_VARIABLE: 設定する環境変数(例:NCCL_TELEMETRY_MODE)。VALUE: 環境変数の値(例:0)。
CoMMA 環境変数
このセクションでは、CoMMA に設定できる環境変数とそのデフォルト値を示します。
| 名前 | 説明 | デフォルト | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
NCCL_PROFILER_AGGREGATE_STEPS |
ネットワーク チャンク オペレーションの集約を有効(true)または無効(false)にします。 |
true |
||||||||||
NCCL_PROFILER_GPUVIZ_LIB |
NCCL テレメトリーを Google Cloud サービスにアップロードするライブラリである libGPUViz.so へのパスを指定します。このライブラリは、エージェント通信 API をラップします。エージェント通信 API は、ゲスト オペレーティング システム内で実行されているプロセスなどのエージェントが Google Cloud サービスとの安全で信頼性の高い接続を開始するために使用するインターフェースです。NCCL gIB イメージをインストーラとして使用する場合、または NCCL gIB プラグインをバンドルするイメージを使用する場合は、この環境変数を設定する必要はありません。 |
|||||||||||
NCCL_PROFILER_LATENCY_FILE |
レイテンシ トレース ファイルのパス テンプレートを指定します。たとえば、/tmp/latency-%p.txt のようになります。システムは、名前の %p をプロセス ID(pid)に置き換えます。ファイルベースのエクスポートを無効にするには、この変数の設定を解除します。 |
|||||||||||
NCCL_PROFILER_PLUGIN |
プロファイラ プラグイン バイナリへのパスを指定します。 この設定を指定しない場合、NCCL は LD_LIBRARY_PATH で libnccl-profiler.so を探します。 |
|||||||||||
NCCL_PROFILER_SUMMARY_FILE |
集計された概要ファイルのパスを指定します。たとえば、/tmp/summary-%p.txt のようになります。システムは、名前の %p をプロセス ID(pid)に置き換えます。ファイルベースのエクスポートを無効にするには、この変数の設定を解除します。 |
|||||||||||
NCCL_PROFILER_SUMMARY_INTERVAL |
概要レポートの期間を指定します。例: 10s、1m。d、h、m、s、ms、us、ns をサポート |
1m |
||||||||||
NCCL_PROFILER_TRACK_INTERPROCESS_PROXYOP |
プロセス間の NCCL プロキシ オペレーションのモニタリングを有効(true)または無効(false)にします。 |
true |
||||||||||
NCCL_PROFILER_TRACK_NCCLOP |
グループ通信とポイントツーポイント通信の両方を含む NCCL オペレーションのトラッキングとレポートを有効(true)または無効(false)にします。 |
true |
||||||||||
NCCL_PROFILER_TRACK_PROXYOP |
プロキシ オペレーションのトラッキングとレポートを有効(true)または無効(false)にします。 |
false |
||||||||||
NCCL_PROFILER_TRACK_STEPS |
ネットワーク チャンク オペレーションのトラッキングとレポートを有効(true)または無効(false)にします。 |
false |
||||||||||
NCCL_TELEMETRY_MODE |
NCCL テレメトリー データのエクスポート場所を制御します。次のオプションがあります。
|
3 |
次のステップ
- 詳しくは、CoMMA に関する問題のトラブルシューティングをご覧ください。
- 遅延を検出して解決する方法を確認する。