GPU インスタンスに Elastic RDMA Interface (ERI) をアタッチすると、インスタンスは VPC 内での高速な相互接続のために RDMA パススルーを使用できます。従来の RDMA と比較して、Elastic Remote Direct Memory Access (eRDMA) はより効率的なデータ転送を提供します。これにより、GPU インスタンス間の通信効率が向上し、タスクの処理時間が短縮されます。このトピックでは、GPU インスタンスで eRDMA を有効にする方法について説明します。
制限事項
制限事項 | 説明 |
インスタンスタイプ | 次のインスタンスタイプが ERI をサポートしています:
|
イメージ | 次のいずれかのイメージがサポートされています:
|
eRDMA デバイスの数 |
|
ネットワークの制限 |
|
操作手順
サポートされているインスタンスで eRDMA 機能を使用するには、eRDMA ソフトウェアスタックがインストールされていること、および Elastic RDMA Interface 機能が有効になっている NIC がアタッチされていることの2つの条件を満たす必要があります。
インスタンス購入時の eRDMA の設定
ERI をサポートする GPU インスタンスを作成します。
作成プロセス中に、次の設定項目に注意してください。その他のパラメーターについては、「カスタム起動タブでインスタンスを作成」をご参照ください。
インスタンス:「制限事項」をご参照ください。このトピックでは、ebmgn8is を例として使用します。
イメージ: パブリックイメージを選択すると、[GPU ドライバーの自動インストール] と eRDMA ソフトウェアスタックの自動インストールのオプションがデフォルトで選択されます。インスタンスが作成されると、システムは GPU ドライバー、CUDA、cuDNN、および eRDMA ソフトウェアスタックを自動的にインストールします。

(任意) ジャンボフレームの有効化:選択したインスタンスがジャンボフレームをサポートしている場合、この機能を有効にして
eRDMAの通信パフォーマンスを向上させることができます。ジャンボフレームを有効にすると、より大きな MTU を設定できます。NCCL と LL128 低レイテンシープロトコルを使用して通信する場合、MTU は 8500 である必要があります。ジャンボフレームが有効でない場合、MTU は 1400 である必要があります。MTU 設定が正しくないと、データ整合性の問題が発生します。
ENI: GPU インスタンスを作成すると、[ネットワークとセキュリティグループ] ページで、デフォルトで eRDMA プライマリ NIC と eRDMA セカンダリ ENI が作成されます。プライマリ NIC とセカンダリ ENI については、eRDMA インターフェイス オプションが自動的に選択されます。
説明GPU インスタンスの実行後、単一の ENI に対して Elastic RDMA 機能を有効または無効にすることはできません。
Elastic RDMA 機能が有効になっている2つの NIC は、自動的に異なるチャネルにアタッチされます。チャネルを指定する必要はありません。
プライマリ NIC は GPU インスタンスからデタッチできません。インスタンスと共に作成およびリリースされることしかできません。
作成したインスタンスの詳細ページに移動し、[ENI] タブをクリックして、インスタンスの NIC タイプを表示します。
プライマリ NIC またはセカンダリ ENI の NIC タイプが次の図のように表示されている場合、Elastic RDMA Interface 機能が有効になっている ENI がインスタンスにアタッチされています。

既存の GPU インスタンスに対する eRDMA の設定
ECS コンソールにログインします。
対象のインスタンスを見つけ、インスタンス詳細ページに移動し、[ENI] タブを選択して、Elastic RDMA Interface 機能が有効になっている NIC がインスタンスにアタッチされているかどうかを確認します。

有効になっている場合 (上の図を参照)、以下の手順はスキップしてください。
有効になっていない場合は、次の手順に従ってプライマリ NIC またはセカンダリ ENI の eRDMA を設定します。
プライマリ NIC またはセカンダリ ENI の eRDMA を設定します。
説明ジャンボフレームをサポートするインスタンスタイプでは、ジャンボフレームを有効にすることで
eRDMAの通信パフォーマンスを向上させることができます。ジャンボフレームを有効にすると、より大きな MTU を設定できます。NCCL と LL128 低レイテンシープロトコルを使用して通信する場合、MTU は 8500 である必要があります。ジャンボフレームが有効でない場合、MTU は 1400 である必要があります。MTU 設定が正しくないと、データ整合性の問題が発生します。
プライマリ NIC またはセカンダリ ENI の [eRDMA インターフェイス] オプションを選択せずに GPU インスタンスを作成した場合、インスタンスの作成後に eRDMA 対応のセカンダリ ENI を 2 つ作成してアタッチできます。
GPU インスタンスを作成し、1 つの ENI のみに対して [eRDMA インターフェイス] オプションを選択した場合、インスタンスの作成後、追加で作成およびアタッチできる eRDMA が有効なセカンダリ ENI は 1 つのみです。
(任意) インスタンスに Elastic RDMA Interface (ERI) ソフトウェアスタックをインストールします。
パブリックイメージを選択する際に [eRDMA ソフトウェアスタックの自動インストール] オプションを選択しなかった場合は、必要に応じてスクリプトを使用するか手動で eRDMA ソフトウェアスタックをインストールしてください。これにより、ERI 機能を起動して使用できます。
スクリプトによるインストール
GPU インスタンスの作成後、スクリプトを使用して eRDMA ソフトウェアスタック、GPU ドライバー、CUDA、cuDNN などのソフトウェアを個別にインストールできます。以下のスクリプトは一例です。
#!/bin/sh #Specify the versions to install DRIVER_VERSION="570.133.20" CUDA_VERSION="12.8.1" CUDNN_VERSION="9.8.0.87" IS_INSTALL_eRDMA="TRUE" IS_INSTALL_RDMA="FALSE" INSTALL_DIR="/root/auto_install" #Use the .run file to install the driver and CUDA auto_install_script="auto_install_v4.0.sh" script_download_url=$(curl http://100.100.100.200/latest/meta-data/source-address | head -1)"/opsx/ecs/linux/binary/script/${auto_install_script}" echo $script_download_url rm -rf $INSTALL_DIR mkdir -p $INSTALL_DIR cd $INSTALL_DIR && wget -t 10 --timeout=10 $script_download_url && bash ${INSTALL_DIR}/${auto_install_script} $DRIVER_VERSION $CUDA_VERSION $CUDNN_VERSION $IS_INSTALL_RDMA $IS_INSTALL_eRDMA手動インストール
GPU インスタンスを作成した後、OFED、eRDMA、GPU ドライバーを手動でインストールし、
nv_peer_memサービスコンポーネントを次のようにロードできます。GPU インスタンスにリモート接続します。
詳細については、「Workbench を使用した Linux インスタンスへの接続」をご参照ください。
OFED ドライバーをインストールします。
次のコマンドを実行して依存関係をインストールします。
Alibaba Cloud Linux 3
yum install rpm-build flex iptables-devel systemd-devel gdb-headless elfutils-devel python3-Cython bison numactl-devel libmnl-devel libnl3-devel libdb-devel libselinux-devel perl-generators elfutils-libelf-devel kernel-rpm-macros valgrind-devel cmake lsof -yCentOS 8.5/8.4/7.9
CentOS 8.5/8.4
wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/centos8/python3-Cython-0.29.32-3.16.x86_64.rpm yum install python3-Cython-0.29.32-3.16.x86_64.rpm -y yum install kernel-rpm-macros perl-generators libmnl-devel valgrind-devel rpm-build systemd-devel libdb-devel iptables-devel lsof elfutils-devel bison libnl3-devel libselinux-devel flex cmake numactl-devel -yCentOS 7.9
sudo yum install python-devel python3-Cython kernel-rpm-macros perl-generators libmnl-devel valgrind-devel rpm-build systemd-devel libdb-devel iptables-devel lsof elfutils-devel bison libnl3-devel libselinux-devel flex cmake numactl-devel -y
Ubuntu 24.04/22.04/20.04/18.04
Ubuntu 24.04
sudo apt-get update -y sudo apt-get install -y pkg-configUbuntu 22.04
sudo apt-get update -y sudo apt-get install -y pkg-configUbuntu 20.04
sudo apt-get update -y sudo apt-get install -y pkg-configUbuntu 18.04
sudo apt-get update sudo apt-get install -y pkg-config sudo apt install -y make dh-python libdb-dev libselinux1-dev flex dpatch swig graphviz chrpath quilt python3-distutils bison libmnl-dev libelf-dev gcc sudo python3
次のコマンドを実行して、OFED パッケージ設定ファイルをダウンロードします。
Alibaba Cloud Linux 3
sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/MLNX_OFED_SRC-5.4-3.5.8.0.tgz sudo tar -xvf MLNX_OFED_SRC-5.4-3.5.8.0.tgz && cd MLNX_OFED_SRC-5.4-3.5.8.0/ sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/alibaba_cloud3/3/ofed_alibaba_cloud3.conf sudo rm -rf SRPMS/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.src.rpm sudo wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.egs.1.src.rpm -O SRPMS/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.egs.1.src.rpmCentOS 8.5/8.4/7.9
CentOS 8.5/8.4
cd /root wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/MLNX_OFED_SRC-5.4-3.5.8.0.tgz tar -xvf MLNX_OFED_SRC-5.4-3.5.8.0.tgz && cd MLNX_OFED_SRC-5.4-3.5.8.0/ wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/alibaba_cloud3/3/ofed_alibaba_cloud3.conf rm -rf SRPMS/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.src.rpm wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.egs.1.src.rpm -O SRPMS/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.egs.1.src.rpmCentOS 7.9
sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/MLNX_OFED_SRC-5.4-3.5.8.0.tgz sudo tar -xvf MLNX_OFED_SRC-5.4-3.5.8.0.tgz && cd MLNX_OFED_SRC-5.4-3.5.8.0/ sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/alibaba_cloud3/3/ofed_alibaba_cloud3.conf sudo rm -rf SRPMS/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.src.rpm sudo wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.egs.1.src.rpm -O SRPMS/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.egs.1.src.rpm
Ubuntu 24.04/22.04/20.04/18.04
Ubuntu 24.04/22.04/20.04
sudo wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/deb/MLNX_OFED_SRC-debian-24.10-3.2.5.0.tgz sudo tar -xvf MLNX_OFED_SRC-debian-24.10-3.2.5.0.tgz && cd MLNX_OFED_SRC-24.10-3.2.5.0 && curl -O http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/deb/ofed_debian.conf sudo rm -rf SOURCES/mlnx-ofed-kernel_24.10.OFED.24.10.3.2.5.1.orig.tar.gz wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/deb/mlnx-ofed-kernel_24.10.egs.1.OFED.24.10.3.2.5.1.orig.tar.gz -O SOURCES/mlnx-ofed-kernel_24.10.egs.1.OFED.24.10.3.2.5.1.orig.tar.gzUbuntu 18.04
sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/MLNX_OFED_SRC-debian-5.4-3.6.8.1.tgz sudo tar -xvf MLNX_OFED_SRC-debian-5.4-3.6.8.1.tgz && cd MLNX_OFED_SRC-5.4-3.6.8.1 && curl -O http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/deb/ofed_debian.conf sudo rm -rf SOURCES/mlnx-ofed-kernel_5.4.orig.tar.gz sudo wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/deb/mlnx-ofed-kernel_5.4.egs.orig.tar.gz -O SOURCES/mlnx-ofed-kernel_5.4.egs.orig.tar.gz
お使いのオペレーティングシステムに対応するコマンドを実行して、OFED ドライバーをインストールします。
Alibaba Cloud Linux 3
sudo ./install.pl --config ./ofed_alibaba_cloud3.conf --distro RHEL8 sudo dracut -fCentOS 8.5/8.4/7.9
CentOS 8.5/8.4
./install.pl --config ./ofed_alibaba_cloud3.conf --distro RHEL8CentOS 7.9
sudo ./install.pl --config ./ofed_alibaba_cloud3.conf --distro RHEL7
Ubuntu 24.04/22.04/20.04/18.04
${VERSION_ID}をお使いの Ubuntu システムのバージョン (例:24.04) に置き換えてください。sudo curl -O http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/deb/ofed_debian.conf sudo ./install.pl --config ./ofed_debian.conf --without-dkms --build-only --kernel-only sudo /usr/bin/dpkg -i --force-confmiss DEBS/ubuntu`lsb_release -s -r`/x86_64/*.deb update-initramfs -u次のコマンドを実行して、
/usr/src/ofa_kernel/`uname -r`ディレクトリが存在するかどうかを確認します。ディレクトリが存在する場合は、次のステップに進みます。
ls /usr/src/ofa_kernel/`uname -r`ディレクトリが存在しない場合は、次のコマンドを実行してシンボリックリンクを作成し、次のステップに進みます。
sudo ln -s /usr/src/ofa_kernel/default /usr/src/ofa_kernel/`uname -r`
インスタンスを再起動します。
OFED ドライバーのインストール後、新しいカーネルモジュールを有効にするためにインスタンスを再起動する必要があります。詳細については、「インスタンスの再起動」をご参照ください。
eRDMA ドライバーをインストールします。
eRDMA ドライバーをダウンロードしてインストールします。
Ubuntu 24.04 の場合は、次のコマンドを実行します。
rm -rf /lib/modules/`uname -r`/updates/dkms/erdma.ko curl -O http://mirrors.cloud.aliyuncs.com/erdma/env_setup.sh && bash env_setup.sh --url "http://mirrors.cloud.aliyuncs.com/erdma/erdma_installer-1.4.3.tar.gz"その他のオペレーティングシステムの場合は、次のコマンドを実行します。
sudo wget http://mirrors.cloud.aliyuncs.com/erdma/env_setup.sh sudo bash env_setup.sh --egs
次のコマンドを実行して eadm ツールを使用し、eRDMA ドライバーが正しくインストールされていることを確認します。
eadm ver次のような結果が返された場合、ドライバーは正しくインストールされています。
説明このトピックでは、ドライバーバージョン 0.2.35 を例として使用します。コマンドが見つからない、または実行に失敗した場合は、eRDMA ドライバーを再インストールしてください。
GPU ドライバーをインストールします。
詳細については、「GPU コンピューティング最適化インスタンス (Linux) への Tesla ドライバーの手動インストール」をご参照ください。
nv_peer_mem サービスコンポーネントをロードします。
(推奨) GPU ドライバーバージョン 470.xx.xx 以降の場合
GPU Direct RDMA を有効にするには、nv_peer_mem サービスコンポーネントをロードする必要があります。NVIDIA はこれらのドライバーバージョンにこのサービスコンポーネントをプリインストールしているため、GPU ドライバーバージョン 470.xx.xx 以降を使用してください。次の手順で nvidia_peermem モジュールを直接ロードできます。
sudo modprobe nvidia_peermem # lsmod|grep nvidia を実行して、nvidia_peermem がロードされているか確認できます。説明インスタンスが再起動された場合、nvidia_peermem モジュールを再ロードする必要があります。
GPU ドライバーバージョン 470.xx.xx より前の場合
対応するサービスコンポーネントを手動でダウンロードしてインストールする必要があります。ダウンロードとコンパイルのインストール方法は次のとおりです。
sudo git clone https://github.com/Mellanox/nv_peer_memory.git # nv_peer_mem.ko をコンパイルしてインストールします cd nv_peer_memory && make cp nv_peer_mem.ko /lib/modules/$(uname -r)/kernel/drivers/video depmod -a modprobe nv_peer_mem # lsmod|grep nv_peer_mem を実行して確認できます。 service nv_peer_mem start
帯域幅の検証
GPU インスタンスにリモート接続します。
詳細については、「Workbench を使用した Linux インスタンスへの接続」をご参照ください。
次のコマンドを実行して、2つの eRDMA NIC が正しく動作しているか確認します。
sudo ibv_devinfoeRDMA ドライバーのインストールスクリプトは、デフォルトで最新のドライバーバージョンをインストールします。以前のバージョンの eRDMA ドライバーをインストールするには、チケットを送信してサポートを依頼してください。
このトピックでは、eRDMA ドライバーバージョン 0.2.37 以降を例として使用します。次のような結果が返された場合、2つの eRDMA NIC は正しく動作しています。両方の eRDMA デバイスのポートの
stateがPORT_ACTIVEであれば、eRDMA NIC は正しく動作しています。
説明eRDMA デバイスのポートの
stateがinvalid stateの場合、eRDMA NIC は正しく動作していません。セカンダリ ENI が正しく設定されているか確認してください。例えば、ifconfigコマンドを実行して、すべての NIC 設定と IP アドレスが存在することを確認します。次のコマンドを実行して perftest ツールをインストールします。
sudo yum install perftest -y次のコマンドを実行して、RDMA ネットワーク帯域幅がハードウェアの期待値を満たしているかテストします。
サーバー側で、次のコマンドを実行してクライアントからの接続リクエストを待ちます。
sudo ib_write_bw -d erdma_0 -F -q 16 --run_infinitely --report_gbits -p 18515クライアント側で、次のコマンドを実行して接続リクエストとパケットを送信します。
sudo ib_write_bw -d erdma_0 -F -q 16 --run_infinitely --report_gbits -p 18515 server_ipコマンド内の
server_ipは、サーバー側の ECS インスタンスで eRDMA がアタッチされている ENI に対応するプライベート IP アドレスです。IP アドレスの取得方法については、「IP アドレスの表示」をご参照ください。
説明上記の perftest テストでは、通信に1つの NIC を使用します。サービスで2つの NIC を介した通信が必要な場合は、同時に2つの perftest プロセスを開始する必要があります。
-dパラメーターを使用して各プロセスに eRDMA NIC を指定し、-pパラメーターを使用して異なる通信ポートを指定します。詳細については、「perftest の詳細」をご参照ください。テスト結果には平均帯域幅が含まれます。次のような結果が返された場合、eRDMA 通信は正常です。
テストと検証
実際のアプリケーションで eRDMA ネットワークを持つ GPU インスタンスのパフォーマンスをテストおよび検証するために、このトピックでは nccl-tests を例として、サービスで eRDMA を使用する方法を示します。nccl-tests の詳細については、「nccl-tests」をご参照ください。
次のコマンドを実行して NCCL をインストールします。
ソースコードをダウンロードしてコンパイルすることで NCCL をインストールします:
説明または、公式の NVIDIA NCCL ウェブサイトからインストールパッケージをダウンロードしてインストールすることもできます。
このテストでは、NCCL のインストールパスとして
/usr/local/ncclを使用します。必要に応じて NCCL のインストール先パスを指定できます。# build nccl cd /root git clone https://github.com/NVIDIA/nccl.git cd nccl/ make -j src.lib PREFIX=/usr/local/nccl make install PREFIX=/usr/local/nccl次のコマンドを実行して、nccl と libnccl.so ライブラリがインストールされているか確認します。
# Check nccl ls /usr/local/nccl # Check the libnccl.so library ls /usr/local/nccl/lib次のコマンドを実行して OpenMPI とコンパイラをインストールします。
wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.3.tar.gz tar -xzf openmpi-4.1.3.tar.gz cd openmpi-4.1.3 ./configure --prefix=/usr/local/openmpi make -j && make install次のコマンドを実行して環境変数を設定します。
NCCL_HOME=/usr/local/nccl CUDA_HOME=/usr/local/cuda MPI_HOME=/usr/local/openmpi export LD_LIBRARY_PATH=${NCCL_HOME}/lib:${CUDA_HOME}/lib64:${MPI_HOME}/lib:$LD_LIBRARY_PATH export PATH=${CUDA_HOME}/bin:${MPI_HOME}/bin:$PATH上記のコマンドでは、
NCCL_HOMEは NCCL のインストールパス (/usr/local/nccl) を、CUDA_HOMEは CUDA のインストールパス (/usr/local/cuda) を、MPI_HOMEは OpenMPI のインストールパス (/usr/local/openmpi) を指します。実際のインストールパスに置き換えてください。コマンドを編集した後、インスタンスの
~/.bashrcファイルに移動し、PATHとLD_LIBRARY_PATHを設定してから、次のコマンドを実行して環境変数の設定を有効にします。source ~/.bashrc次のコマンドを実行してテストコードをダウンロードし、コンパイルします。
git clone https://github.com/NVIDIA/nccl-tests cd nccl-tests/ make MPI=1 CUDA_HOME=/usr/local/cuda MPI_HOME=/usr/local/openmpi次のコマンドを実行して、SSH 経由でインスタンス間の相互信頼を確立します。
host1 で公開鍵を生成し、host2 にコピーして、SSH 経由でインスタンス間の相互信頼を確立します。
#host1 で実行 ssh-keygen ssh-copy-id -i ~/.ssh/id_rsa.pub ${host2} ssh root@{host2} # host1 で実行して、パスワードなしで host2 に接続できるかテストします。接続できれば、インスタンス間で SSH 経由の相互信頼が確立されています。次のコマンドを実行して、NCCL all_reduce のパフォーマンスをテストします。
# host1 と host2 を対応する IP アドレスに置き換えます mpirun --allow-run-as-root -np 16 -npernode 8 -H host1:8,host2:8 \ --bind-to none \ -mca btl_tcp_if_include eth0 \ -x NCCL_SOCKET_IFNAME=eth0 \ -x NCCL_GIN_TYPE=0 \ -x NCCL_DEBUG=INFO \ -x LD_LIBRARY_PATH \ -x PATH \ ./build/all_reduce_perf -b 4M -e 4M -f 2 -g 1 -t 1 -n 20
参考資料
エンタープライズレベルの ECS インスタンスで eRDMA を設定して、サービスのネットワークトポロジーを変更することなく、既存のネットワーク上で超低レイテンシー、高スループット、高弾力性を提供する高性能 RDMA ネットワークを使用できます。詳細については、「エンタープライズレベルのインスタンスで eRDMA を有効にする」をご参照ください。
コンテナ内で大規模なデータ転送と高性能なネットワーク通信を必要とするアプリケーションシナリオでは、コンテナ (Docker) 環境で eRDMA 機能を使用できます。これにより、コンテナアプリケーションはオペレーティングシステムのカーネルをバイパスし、ホスト上の物理 eRDMA デバイスに直接アクセスできるため、より高速なデータ転送と高い通信効率が提供されます。詳細については、「コンテナ (Docker) で eRDMA を有効にする」をご参照ください。
eRDMA を監視または診断するには、eRDMA の実行ステータスをリアルタイムで監視できます。詳細については、「eRDMA の監視と診断」をご参照ください。


