すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:ACCL: Alibaba Cloudが開発した高性能集団コミュニケーションライブラリ

最終更新日:Nov 12, 2024

Alibaba Collective Communication Library (ACCL) は、Nvidia collective communication library (NCCL) に基づいてAlibaba Cloudによって開発された集団コミュニケーションライブラリです。 大規模モデルジョブの通信最適化におけるAlibaba Cloudのネットワーク機能と深い専門知識を活用し、ジョブの通信パフォーマンスを向上させます。 ACCLは、故障診断と自己回復も備えています。 このトピックでは、ACCLの主な機能とそのインストール方法について説明します。

ACCLがサポートする拡張機能

ACCLは、環境変数を使用して有効または無効にできるさまざまな拡張機能をサポートしています。

  • NCCLの対応するオープンソースバージョンで見つかったFixsのバグ。

  • 集団通信のためのさまざまな演算子とメッセージサイズを最適化し、オープンソースNCCLに優れたパフォーマンスを提供します。

  • トレーニング中の集団通信の統計分析を提供し、デバイス障害によるスローダウンやハングの診断に役立ちます。 Alibaba Cloud PAIのAIMaster: ElasticフォールトトレランスエンジンC4D: モデルトレーニングジョブ診断ツールを併用すると、迅速な異常検出と自動フォールトトレランスが可能になります。

  • マルチパス送信と負荷分散をサポートし、不均一なハッシュによって引き起こされるトレーニングクラスターの輻輳を軽減または排除し、全体的なトレーニングスループットを向上させます。

制限事項

Lingjunリソースが利用可能なリージョンでLingjunリソースとカスタムイメージを使用してDLCジョブを送信する前に、ACCLをインストールする必要があります。

ACCLライブラリのインストール

Platform for AI (PAI) が提供する公式画像は、ACCLとともにプリインストールされています。 公式画像を使用してDLCジョブを送信する場合、以下の手順は必要ありません。

手順1: Pytorchが画像で使用するNCCLライブラリが動的かどうかを確認します

カスタムイメージコンテナでは、次の手順を実行します。

  1. PyTorchライブラリの場所を決定します。

    PyTorchがインストールされているパスがわかっている場合は、パス内で検索します。 たとえば、PyTorchが /usr/local/libにある場合は、次のコマンドを使用してlibtorch.soファイルを見つけます。

    find /usr/local/lib -name "libtorch*"
    # Example results:
    /usr/local/lib/python3.10/dist-packages/torch/lib/libtorchcuda.so
    /usr/local/lib/python3.10/dist-packages/torch/lib/libtorch.so
    /usr/local/lib/python3.10/dist-packages/torch/lib/libtorchbindtest.so
  2. lddコマンドを使用して、PyTorchライブラリのNCCLライブラリへの依存関係を確認します。

    ldd libtorch.so | grep nccl
    • 同様の結果が返された場合、NCCLライブラリは動的であり、ACCLのダウンロードとインストールに進むことができます。

      libnccl.so.2=>/usr/lib/x86_64-linux-gnu/libnccl.so.2(0x00007feab3b27000)
    • 結果が返されない場合、NCCLは静的であり、ACCLをインストールすることはできません。 公式のNVIDIA NGCイメージに基づいてカスタムイメージを作成するか、動的NCCLライブラリに依存するPyTorchバージョンに切り替える必要があります。

ステップ2: 画像で使用されているCUDAバージョンを確認する

カスタムイメージコンテナで、次のコマンドを使用してCUDAのバージョンを確認します。

nvidia-smi

以下の出力は、CUDAバージョンが12.2であることを示します。 コマンドによって返される実際のバージョンを参照してください。image

ステップ3: CUDAバージョンに対応するACCLをダウンロード

ACCLのダウンロードリンク:

CUDAバージョン

ACCLダウンロードリンク

12.3

https://accl-n.oss-cn-beijing.aliyuncs.com/cuda12.3/lib/libnccl.so.2

12.2

https://accl-n.oss-cn-beijing.aliyuncs.com/cuda12.2/lib/libnccl.so.2

12.1

https://accl-n.oss-cn-beijing.aliyuncs.com/cuda12.1/lib/libnccl.so.2

11.7

https://accl-n.oss-cn-beijing.aliyuncs.com/cuda11.7/lib/libnccl.so.2

11.4

https://accl-n.oss-cn-beijing.aliyuncs.com/cuda11.4/lib/libnccl.so.2

CUDAバージョンに対応するACCLをカスタムイメージコンテナにダウンロードするには、次のコマンドを使用します。 次の例では、CUDAのバージョンは12.3です。

wget http://accl-n.oss-cn-beijing.aliyuncs.com/cuda12.3/lib/libnccl.so.2

ステップ4: ACCLのインストール

ACCLをインストールする前に、NCCLがシステムにインストールされているかどうかを確認します。 次のコマンドを実行して、libnccl.so.2が存在するかどうかを確認します。

sudo find / -name "libnccl.so.2"

クエリの結果に応じて、次のいずれかのアクションを実行します。

  • libnccl.so.2ファイルが見つからない場合、またはシステムディレクトリ /usr/lib64または /lib64にある場合は、cpコマンドを使用して、新しくダウンロードしたlibnccl.so.2ファイルを適切なシステムディレクトリにコピーします。

    sudo cp -f ./libnccl.so.2 /usr/lib64
  • libnccl.so.2ファイルが /opt/xxx /などの非標準ディレクトリにある場合、これはカスタムNCCLインストールパスを示している可能性があります。 cpコマンドを使用して、新しくダウンロードしたlibnccl.so.2で既存のファイルを上書きします。

    sudo cp -f libnccl.so.2 /opt/xxx/

手順5: 動的ライブラリの更新

次のコマンドで動的ライブラリキャッシュを更新します。

sudo ldconfig

ステップ6: チェックACCLがロードされている

  1. カスタムイメージを使用してDLCジョブを送信します。 詳細については、「トレーニングジョブの送信」をご参照ください。

  2. ジョブログを確認します。 起動ログにACCLバージョン情報が表示される場合、ACCLライブラリがロードされます。 ジョブログの確認方法については、「トレーニングジョブの表示」をご参照ください。

    説明

    ログにaccl-n識別子が含まれていることを確認します。 それ以外の場合、ACCLはロードされません

    NCCL version 2.20.5.7-accl-n+cuda12.4, COMMIT_ID Zeaa6674c2f1f896e3a6bbd77e85231e0700****, BUILD_TIME 2024-05-10 15:40:56

推奨される環境変数の設定

PAIチームは、ACCLの豊富な経験に基づいて、さまざまな設定で通信スループットを向上させることができる環境変数のリストを作成します。

export NCCL_IB_TC=136
export NCCL_IB_SL=5
export NCCL_IB_GID_INDEX=3
export NCCL_SOCKET_IFNAME=eth
export NCCL_DEBUG=INFO
export NCCL_IB_HCA=mlx5
export NCCL_IB_TIMEOUT=22
export NCCL_IB_QPS_PER_CONNECTION=8
export NCCL_MIN_NCHANNELS=4
export NCCL_NET_PLUGIN=none
export ACCL_C4_STATS_MODE=CONN
export ACCL_IB_SPLIT_DATA_NUM=4
export ACCL_IB_QPS_LOAD_BALANCE=1
export ACCL_IB_GID_INDEX_FIX=1
export ACCL_LOG_TIME=1

次の表に、主要な環境変数を示します。

環境変数

説明

NCCL_IB_TC

Alibaba Cloudが使用するネットワークマッピングルールを指定します。 パラメータが設定されていないか無効である場合、ネットワークパフォーマンスが影響を受ける可能性があります。

NCCL_IB_GID_INDEX

RDMAプロトコルの使用のためのGID。 パラメーターが設定されていないか無効な場合、NCCLでエラーが発生する可能性があります。

NCCL_SOCKET_IFNAME

NCCLが接続を確立するためのポート。 異なる仕様は異なるポートを必要とする。 パラメータが設定されていないか無効な場合、NCCLは接続の確立に失敗する可能性があります。

NCCL_デバッグ

NCCLのログレベル。 より多くのログと効率的なトラブルシューティングのために、このパラメータをINFOに設定します。

NCCL_IB_HCA

RDMA通信用のネットワークインターフェースカード。 パラメータが設定されていないか無効である場合、ネットワークパフォーマンスが影響を受ける可能性があります。

NCCL_IB_タイムアウト

RDMA接続のタイムアウト時間。トレーニングジョブ中のフォールトトレランスを強化できます。 パラメータが設定されていないか無効である場合、中断が発生します。

NCCL_IB_QPS_PER_接続

接続ごとのキューペアの数。 数を適切に増やして、ネットワークスループットを大幅に向上させることができます。

NCCL_NET_プラグイン

NCCLのネットワークプラグイン。 パフォーマンスを確保するために他のプラグインがロードされないように、このパラメーターをnoneに設定することを推奨します。

ACCL_C4_STATS_MODE

ACCL統計情報の粒度。 このパラメーターをCONNに設定することを推奨します。これにより、接続ごとに統計が集計されます。

ACCL_IB_SPLIT_DATA_NUM

送信のためにデータを複数のキューペアに分割するかどうかを指定します。

ACCL_IB_QPS_LOAD_バランス

負荷分散を有効にするかどうかを指定します。

ACCL_IB_GID_INDEX_FIX

ジョブ開始前にGID異常を自動的にチェックしてバイパスするかどうかを指定します。 パラメーターを1に設定して有効にします。

ACCL_LOG_TIME

トラブルシューティングのためにログエントリに時間を追加するかどうかを指定します。 パラメーターを1に設定して有効にします。