CoMMA を有効化、無効化、構成する

このガイドでは、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-installerinitContainers として使用して、CoMMA バイナリをワークロード コンテナにインストールできます。コンテナはバイナリを /artifacts ディレクトリに保存します。

CoMMA インストーラ イメージを使用する手順は次のとおりです。

  1. NCCL 2.23 以降をインストールします

  2. 次のスニペットを 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-devbindgen が必要です。
  • CMake バージョン 3.10 以降

ソースからビルドするには、次の手順を行います。

  1. リポジトリとそのサブモジュールのクローンを作成します。

    git clone --recurse-submodules https://github.com/google/CoMMA
  2. Cargo を使用してバイナリをコンパイルします。

    cargo build --release

    Cargo はバイナリを target/release/libnccl_profiler.so に保存します。

  3. 次のいずれかの方法で NCCL を有効にして、CoMMA ライブラリを読み込みます。

    • コンパイルされた libnccl_profiler.soLD_LIBRARY_PATH のディレクトリにコピーします。名前を libnccl-profiler.so に変更します(アンダースコアではなくハイフンを使用します)。
    • 別の方法として、NCCL_PROFILER_PLUGIN 環境変数を設定して .so ファイルのパスを指定します。

インストールまたは有効化を確認する

NCCL が CoMMA ライブラリを読み込んでいることを確認するには、NCCL ログを確認します。

  1. NCCL デバッグ ロギングを有効にします。NCCL_DEBUG=INFO 環境変数を設定して、ロギングを有効にします。より詳細なデバッグレベルを指定することもできます。その他のデバッグ オプションについては、NVIDIA のドキュメントの NCCL_DEBUG セクションをご覧ください。
  2. デバッグする INIT サブシステムを指定します。NCCL_DEBUG_SUBSYS=INIT 環境変数を設定して、INIT を指定します。他のサブシステムを指定することもできます。サブシステムのその他のオプションについては、NCCL_DEBUG_SUBSYS セクションをご覧ください。
  3. 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 を無効にした後で再度有効にする手順は次のとおりです。

  1. NCCL_TELEMETRY_MODE 環境変数を 0 以外の値に設定します。たとえば、デフォルト モードを使用するには、NCCL_TELEMETRY_MODE=3 を指定します。

    オプションの完全なリストを確認するには、構成オプションの表の NCCL_TELEMETRY_MODE をご覧ください。

  2. CoMMA が機能していることを確認します

CoMMA NCCL テレメトリーを構成して表示する

環境で CoMMA が有効になっている場合は、データの粒度レベルを設定して、収集するテレメトリー データのタイプを構成できます。このセクションでは、データ粒度と使用可能なオプションを設定する方法について説明します。

また、CoMMA が収集したデータを確認して、組織のセキュリティ ポリシーに沿っていることを確認したり、独自の NCCL テレメトリー分析ツールで分析したりすることもできます。そのためには、未加工データをローカル ファイルにエクスポートします。

データの粒度を設定する

CoMMA は、さまざまな粒度レベルで NCCL テレメトリーを収集します。環境変数を使用して粒度レベルを構成します。CoMMA 環境変数を設定するには、環境変数を設定するをご覧ください。

  • デフォルトの動作: デフォルトでは、CoMMA は NCCL オペレーション(コレクティブとピアツーピアの両方を含む)、それらのオペレーションのメタデータ、完了時間を追跡します。次の環境変数を使用します。
    • NCCL_PROFILER_TRACK_NCCLOP=true
    • NCCL_PROFILER_AGGREGATE_STEPS=true
    • NCCL_PROFILER_TRACK_INTERPROCESS_PROXYOP=true
  • より詳細なレベルのデータ収集を有効にするには、次の環境変数を設定します。
    • NCCL_PROFILER_TRACK_PROXYOP=true を設定して、プロキシ オペレーションの完了時間を追跡します。
    • NCCL_PROFILER_TRACK_STEPS=true を設定して、各ネットワーキング I/O オペレーションに費やされた時間を追跡します。この設定では、最も細かい粒度が得られます。

環境変数の完全なリストについては、構成オプションをご覧ください。

データをローカル ファイルにエクスポートする

未加工データをローカル ファイルにエクスポートして表示します。データをローカル ファイルにエクスポートして出力を表示する手順は次のとおりです。

  1. NCCL_TELEMETRY_MODE1 または 4 に設定します。NCCL_TELEMETRY_MODE 環境変数については、構成オプションをご覧ください。
  2. 次のいずれかのエクスポート パスを設定します。

    • NCCL_PROFILER_LATENCY_FILE=PATH を設定して、詳細なイベント トレースをローカル ファイルにエクスポートします。PATH は、/tmp/latency-%p.txt などのパスに置き換えます。
    • 集計された概要統計情報をエクスポートするには、NCCL_PROFILER_SUMMARY_FILE=PATH を設定します。PATH は、/tmp/summary-%p.txt などのパスに置き換えます。

      システムは %p をプロセス ID に置き換えます。

  3. 出力を確認します。未加工の出力は 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_PATHlibnccl-profiler.so を探します。
NCCL_PROFILER_SUMMARY_FILE 集計された概要ファイルのパスを指定します。たとえば、/tmp/summary-%p.txt のようになります。システムは、名前の %p をプロセス ID(pid)に置き換えます。

ファイルベースのエクスポートを無効にするには、この変数の設定を解除します。
NCCL_PROFILER_SUMMARY_INTERVAL 概要レポートの期間を指定します。例: 10s1mdhmsmsusns をサポート 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 テレメトリー データのエクスポート場所を制御します。次のオプションがあります。

説明
0 NCCL テレメトリーの収集を無効にします。
1 NCCL テレメトリーをローカル ファイルにエクスポートします。この方法では、NCCL テレメトリーは Google で利用できません。
3 NCCL テレメトリーを Google サービスにエクスポートします。
4 NCCL テレメトリーをローカル ファイルと Google サービスの両方にエクスポートします。
3

次のステップ