Elastic Remote Direct Memory Access (eRDMA) は、Alibaba Cloud のクラウドベースの弾性 RDMA ネットワークです。PAI 一般計算資源として利用可能な特定の GPU インスタンスタイプは、eRDMA をサポートしています。この機能を使用するには、これらの GPU インスタンスタイプ用の特定のイメージを使用して DLC ジョブを送信します。システムはコンテナーに eRDMA ネットワークインターフェイスカードを自動的にマウントし、分散トレーニングプロセスを高速化します。
制限事項
このトピックは、サブスクリプションベースの一般計算資源を使用して送信されるトレーニングジョブにのみ適用されます。
この機能には、NCCL バージョン 2.19 以降が必要です。
次の表に、PAI-DLC プラットフォームで eRDMA をサポートする GPU インスタンスタイプと、各タイプで利用可能な eRDMA ネットワークインターフェイスカードの数を示します。
GPU インスタンスタイプ
eRDMA ネットワークインターフェイスカードの数
ecs.ebmgn7v.32xlarge
2
ecs.ebmgn8v.48xlarge
2
ecs.ebmgn8is.32xlarge
2
ecs.ebmgn8i.32xlarge
4
ecs.gn8is.2xlarge
1
ecs.gn8is.4xlarge
1
ecs.gn8is-2x.8xlarge
1
ecs.gn8is-4x.16xlarge
1
ecs.gn8is-4x.16xlarge
1
プリセット環境変数
PAI は、eRDMA をサポートするインスタンスタイプに対して eRDMA 機能を自動的に有効にし、デフォルトの NCCL 環境変数を設定します。トレーニングフレームワーク、通信フレームワーク、およびモデルの特性に基づいてこれらの変数を調整できます。最適なパフォーマンスを得るには、プラットフォームが提供するデフォルトの変数を使用してください。
パブリック環境変数
環境変数 | 値 |
PYTHONUNBUFFERED | 1 |
TZ | 現在のジョブが実行されるリージョンに基づいて設定されます。値は通常「Asia/Shanghai」です。 |
eRDMA パフォーマンス専有型ネットワーク変数
ハイフン (-) は、環境変数が対応する環境に適用できないことを示します。
環境変数 | 値 |
NCCL_DEBUG | INFO |
NCCL_SOCKET_IFNAME | eth0 |
NCCL_IB_TC | - |
NCCL_IB_SL | - |
NCCL_IB_GID_INDEX | 1 |
NCCL_IB_HCA | erdma |
NCCL_IB_TIMEOUT | - |
NCCL_IB_QPS_PER_CONNECTION | 8 |
NCCL_MIN_NCHANNELS | 16 |
NCCL_NET_PLUGIN | none |
カスタムイメージの設定
eRDMA をサポートする一般計算資源を使用するトレーニングジョブを送信する場合、カスタムイメージをビルドして使用できます。カスタムイメージは、次の要件を満たす必要があります。
環境要件
CUDA 12.1 以降
NCCL 2.19 以降
Python 3
eRDMA ライブラリのインストール
eRDMA ライブラリのインストールプロセスは、イメージの Linux ディストリビューションによって異なります。次の例では、Ubuntu 22.04 に eRDMA ライブラリをインストールする方法を示します。
# PGP 署名を追加します。
wget -qO - http://mirrors.cloud.aliyuncs.com/erdma/GPGKEY | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/erdma.gpg
# apt ソースを追加します。
mkdir -p /etc/apt/sources.list.d
echo "deb [ ] http://mirrors.cloud.aliyuncs.com/erdma/apt/ubuntu jammy/erdma main" | sudo tee /etc/apt/sources.list.d/erdma.list
# eRDMA ユーザーモードドライバーパッケージを更新してインストールします。
sudo apt update
sudo apt install -y libibverbs1 ibverbs-providers ibverbs-utils librdmacm1他のディストリビューションでのインストールプロセスの詳細については、「Docker コンテナーで eRDMA を使用する」をご参照ください。
Dockerfile の例
# ${user_docker_image_url} を既存の Docker イメージに置き換えます。
FROM ${user_docker_image_url}
# RDMA ライブラリがイメージにすでにインストールされている場合は、まずアンインストールします。
RUN rm /etc/apt/sources.list.d/mellanox_mlnx_ofed.list && \
apt remove -y libibverbs1 ibverbs-providers ibverbs-utils librdmacm1
RUN wget -qO - http://mirrors.aliyun.com/erdma/GPGKEY | gpg --dearmour -o /etc/apt/trusted.gpg.d/erdma.gpg && \
echo "deb [ ] http://mirrors.aliyun.com/erdma/apt/ubuntu jammy/erdma main" | tee /etc/apt/sources.list.d/erdma.list && \
apt update && apt install -y libibverbs1 ibverbs-providers ibverbs-utils librdmacm1MPIJob を使用して NCCL テストを実行する
MPIJob フレームワークを使用するトレーニングジョブを送信するには、次の主要なパラメーターを設定します。その他のパラメーターの詳細については、「MPIJob トレーニングジョブの送信」をご参照ください。
パラメーター | 説明 | |
環境情報 | ノードイメージ | [イメージアドレス] タブで、準備したカスタムイメージを入力します。 PAI-DLC が提供する NCCL テストイメージを使用できます。このイメージには、eRDMA の依存関係がプリインストールされています:
|
起動コマンド | | |
リソース情報 | リソースソース | [リソースクォータ] を選択します。 |
リソースクォータ | 作成された一般計算資源クォータ (ecs.ebmgn8v.48xlarge インスタンスタイプなど) を選択します。リソースクォータの作成方法の詳細については、「一般計算資源クォータ」をご参照ください。 | |
フレームワーク | [MPIJob] を選択します。 | |
ジョブリソース | 次のパラメーターを設定します。
| |
次の図は、eRDMA ネットワーク帯域幅の NCCL テストのサンプル結果を示しています。