GPU インスタンスに Elastic RDMA Interface (ERI) をアタッチすると、同じ VPC 内の GPU インスタンスは RDMA パススルーを使用して相互接続を高速化します。eRDMA は、より効率的なデータ転送を実現し、GPU インスタンス間の通信効率を向上させ、タスク処理時間を短縮することで、従来の RDMA を改良します。このトピックでは、GPU インスタンスで eRDMA を有効化する方法について説明します。
制限事項
|
項目 |
説明 |
|
インスタンスタイプ |
Elastic RDMA インターフェイスは、次のインスタンスタイプに対応しています。
|
|
イメージ |
次のいずれかのイメージを使用します。
|
|
Elastic RDMA インターフェイスの数 |
|
|
ネットワークの制限 |
|
手順
eRDMA 対応インスタンスで eRDMA を使用するには、eRDMA ソフトウェアスタックがインストール済みであること、およびElastic RDMA Interface (ERI) が有効化された Elastic Network Interface (ENI) がアタッチ済みであることが必要です。
インスタンス作成時の eRDMA の設定
-
ECS コンソールの カスタム起動 ページに移動します。
-
ERI をサポートする GPU インスタンスを作成します。
インスタンスを作成する際は、以下の設定に注意してください。その他のパラメータについては、ウィザードを使用したインスタンスの作成をご参照ください。
-
[インスタンスタイプ]: ERI 対応のインスタンスタイプを選択します。 詳細については、「制限」をご参照ください。 このトピックでは、ebmgn8is を例として使用します。
-
[イメージ]: パブリックイメージを選択すると、デフォルトで GPU ドライバーの自動インストール および eRDMA ソフトウェアスタックのインストール オプションが選択されます。 インスタンスが作成されると、システムによって GPU ドライバー、CUDA、cuDNN、および eRDMA ソフトウェアスタックが自動的にインストールされます。
この例では、オペレーティングシステムは Alibaba Cloud Linux 3.2104 LTS 64-bit で、GPU ドライバーのバージョンは CUDA Version 12.4.1 / Driver Version 550.127.08 / CUDNN Version 9.2.0.82 です。
-
(オプション) ジャンボフレーム: 選択したインスタンスが ジャンボフレーム に対応している場合、この機能を有効にすることで
eRDMAの通信パフォーマンスを向上させることができます。ジャンボフレームを有効化すると、より大きな最大伝送単位 (MTU) を設定できます。NCCL と LL128 低遅延プロトコルを使用して通信する場合、MTU は 8500 にする必要があります。ジャンボフレームが有効化されていない場合、MTU は 1400 にする必要があります。MTU の設定が正しくないと、データ整合性の問題が発生する可能性があります。
-
[ENI]: GPU インスタンスを作成し、設定ウィザードの 帯域幅とセキュリティグループ ページで ENI を設定すると、eRDMA 対応のプライマリ NIC とセカンダリ NIC がデフォルトで作成されます。システムは、プライマリ NIC とセカンダリ NIC の eRDMA インターフェース オプションを自動的に選択します。
説明-
GPU インスタンスの実行中に、個々の ENI に対して eRDMA 機能を有効化または無効化することはできません。
-
ERI が有効化された 2 つの NIC は、自動的に異なるチャネルにバインドされます。チャネルを手動で指定する必要はありません。
-
プライマリ NIC は GPU インスタンスからデタッチできません。プライマリ NIC はインスタンスと共に作成され、リリースされます。
-
-
-
作成したインスタンスの詳細ページに移動し、ENI タブをクリックして、インスタンスの NIC タイプを確認します。
プライマリ NIC またはセカンダリ ENI の NIC タイプに "Elastic RDMA Interface" が含まれている場合、その ENI では ERI が有効化されています。
既存の GPU インスタンスでの eRDMA の設定
-
ECS コンソールにログインします。
-
対象のインスタンスを見つけ、詳細ページに移動し、ENI タブをクリックして ERI が有効になっているか確認します。
ERI が有効な ENI では、[ENI タイプ] 列にプライマリ ENI (Elastic RDMA Interface) またはセカンダリ ENI (Elastic RDMA Interface) と表示されます。
-
ERI が有効になっている場合は、以降の手順をスキップします。
-
ERI が有効になっていない場合は、次の手順に従ってプライマリ NIC またはセカンダリ ENI の ERI を設定します。
-
-
プライマリ NIC またはセカンダリ ENI の ERI を設定します。
説明-
ジャンボフレームをサポートするインスタンスタイプの場合、ジャンボフレームを有効にすることで
ERIの通信パフォーマンスを向上させることができます。ジャンボフレームを有効にすると、より大きな MTU を設定できます。NCCL と LL128 低遅延プロトコルを使用して通信する場合、MTU は 8500 にする必要があります。ジャンボフレームが有効でない場合、MTU は 1400 にする必要があります。MTU の設定が正しくないと、データ整合性の問題が発生する可能性があります。
-
GPU インスタンスの作成時にプライマリ NIC またはセカンダリ NIC のいずれにもeRDMA インターフェース オプションを選択しなかった場合、インスタンス作成後に ERI が有効なセカンダリ ENI を 2 つ作成して有効にすることができます。
-
GPU インスタンスの作成時に 2 つの NIC (プライマリまたはセカンダリ) のうち 1 つにeRDMA インターフェース オプションを選択しなかった場合、インスタンス作成後に ERI が有効なセカンダリ ENI をもう 1 つだけ作成して有効にすることができます。
-
-
(オプション) インスタンスに eRDMA ソフトウェアスタックをインストールします。
パブリックイメージを選択する際にeRDMA ソフトウェアスタックのインストール オプションを選択しなかった場合、Elastic RDMA Interface (ERI) 機能を有効にするには、手動かスクリプトで eRDMA ソフトウェアスタックをインストールする必要があります。
-
スクリプトによるインストール
GPU インスタンスの作成後、次のサンプルスクリプトを使用して、eRDMA ソフトウェアスタック、GPU ドライバー、CUDA、cuDNN を個別にインストールできます。
#!/bin/sh #インストールするバージョンを入力してください DRIVER_VERSION="530.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" # .run を使用してドライバーと 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 4
sudo yum install -y perl-File-Find perl-File-Copy perl-sigtrap perl-File-Compare sudo yum install --enablerepo=alinux4-devel libdb-devel valgrind-devel -y sudo yum install -y libselinux-devel autoconf iptables-devel patch elfutils-devel rpm-build kernel-devel-$(uname -r) libmnl-devel flex bison automake lsofAlibaba Cloud Linux 3
sudo 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
sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/centos8/python3-Cython-0.29.32-3.16.x86_64.rpm sudo 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 -y -
CentOS 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-config -
Ubuntu 22.04
sudo apt-get update -y sudo apt-get install -y pkg-config -
Ubuntu 20.04
sudo apt-get update -y sudo apt-get install -y pkg-config -
Ubuntu 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 4
sudo echo '%rhel 10' > /usr/lib/rpm/macros.d/macros.alinux-compat sudo wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/MLNX_OFED_SRC-26.04-0.8.5.0.tgz sudo tar -xf MLNX_OFED_SRC-26.04-0.8.5.0.tgz && cd MLNX_OFED_SRC-26.04-0.8.5.0/ sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/alibaba_cloud4/4/ofed_alibaba_cloud4.conf sudo rm -rf SRPMS/mlnx-ofa_kernel-26.04-OFED.26.04.0.8.5.1.src.rpm sudo wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/mlnx-ofa_kernel-26.04-OFED.26.04.0.8.5.1.egs.1.src.rpm -O SRPMS/mlnx-ofa_kernel-26.04-OFED.26.04.0.8.5.1.egs.1.src.rpmAlibaba Cloud Linux 3
sudo wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/MLNX_OFED_SRC-24.10-3.2.5.0.tgz sudo tar -xvf MLNX_OFED_SRC-24.10-3.2.5.0.tgz && cd MLNX_OFED_SRC-24.10-3.2.5.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-24.10-OFED.24.10.3.2.5.1.src.rpm sudo wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/mlnx-ofa_kernel-24.10-OFED.24.10.3.2.5.1.egs.1.src.rpm -O SRPMS/mlnx-ofa_kernel-24.10-OFED.24.10.3.2.5.1.egs.1.src.rpmCentOS 8.5/8.4/7.9
-
CentOS 8.5/8.4
cd /root 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 -
CentOS 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 sudo 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.gz -
Ubuntu 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
-
-
お使いの OS に対応するコマンドを実行して、OFED ドライバーをインストールします。
Alibaba Cloud Linux 4
sudo ./install.pl --config ./ofed_alibaba_cloud4.conf --distro RHEL8 --without-depcheck --without-dkms sudo dracut -fAlibaba 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
sudo ./install.pl --config ./ofed_alibaba_cloud3.conf --distro RHEL8 -
CentOS 7.9
sudo ./install.pl --config ./ofed_alibaba_cloud3.conf --distro RHEL7
Ubuntu 24.04/22.04/20.04/18.04
お使いの Ubuntu のバージョン (24.04 など) に応じて、
${VERSION_ID}を置き換えてください。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 sudo 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 ドライバーをダウンロードしてインストールします。
sudo wget http://mirrors.cloud.aliyuncs.com/erdma/env_setup.sh sudo bash env_setup.sh --egs -
次のコマンドを実行し、eadm ツールを使用して eRDMA ドライバーのインストールを検証してください。
sudo eadm ver次のような出力が表示された場合、インストールは成功です。
[root@xxx ~]# sudo eadm ver Query kernel driver version: 0.2.35説明このトピックでは、ドライバーバージョン 0.2.35 を例とします。コマンドが「command not found」エラーを返したり、実行に失敗したりした場合は、eRDMA ドライバーを再インストールしてください。
-
-
GPU ドライバーをインストールします。
詳細については、「GPU インスタンスへの Tesla ドライバーの手動インストール (Linux)」をご参照ください。
-
nv_peer_mem サービスコンポーネントをロードします。
-
(推奨) GPU ドライバー 470.xx.xx 以降
GPUDirect RDMA を有効にするには、nv_peer_mem サービスコンポーネントをロードする必要があります。NVIDIA はこれらのドライバーバージョンにこのコンポーネントを含めているため、GPU ドライバー 470.xx.xx 以降を使用することを推奨します。次のコマンドを実行して、nvidia_peermem モジュールをロードできます。
sudo modprobe nvidia_peermem # lsmod|grep nvidia を実行して、nvidia_peermem がロードされているか確認します。説明インスタンスを再起動した場合は、nvidia_peermem モジュールを再ロードする必要があります。
-
470.xx.xx より前の GPU ドライバー
サービスコンポーネントを手動でダウンロードしてインストールする必要があります。次のコードは、コンポーネントをダウンロード、コンパイル、インストールする方法の例です。
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 sudo depmod -a sudo modprobe nv_peer_mem # lsmod|grep nv_peer_mem を実行して結果を確認します。 sudo service nv_peer_mem start
-
-
-
-
帯域幅を検証します。
-
GPU インスタンスに接続します。
詳細については、「ワークベンチを使用して Linux インスタンスに接続」をご参照ください。
-
次のコマンドを実行して、2 つの eRDMA NIC が期待どおりに動作しているかどうかを確認します。
sudo ibv_devinfoデフォルトでは、eRDMA ドライバーのインストールスクリプトは最新バージョンのドライバーをインストールします。以前のバージョンの eRDMA ドライバーをインストールする必要がある場合は、チケットを送信してサポートにお問い合わせください。
このトピックでは、eRDMA ドライバーバージョン 0.2.37 以降を例として使用します。次の出力は、2 つの eRDMA デバイスが正常に動作していることを示しています。eRDMA デバイスは、そのポートの
stateがPORT_ACTIVEの場合に正常に動作します。[ecs-xxx...xxx4gnd0hZ ~]$ sudo ibv_devinfo hca_id: erdma_0 transport: eRDMA (0) fw_ver: 0.2.0 node_guid: 0216:3eff:fe36:1eb4 sys_image_guid: 0216:3eff:fe36:1eb4 vendor_id: 0x1ded vendor_part_id: 4223 hw_ver: 0x0 phys_port_cnt: 1 port: 1 state: PORT_ACTIVE (4) max_mtu: 1024 (3) active_mtu: 1024 (3) sm_lid: 0 port_lid: 0 port_lmc: 0x00 link_layer: Ethernet hca_id: erdma_1 transport: eRDMA (0) fw_ver: 0.2.0 node_guid: 0216:3eff:fe43:9c2a sys_image_guid: 0216:3eff:fe43:9c2a vendor_id: 0x1ded vendor_part_id: 4223 hw_ver: 0x0 phys_port_cnt: 1 port: 1 state: PORT_ACTIVE (4) max_mtu: 1024 (3) active_mtu: 1024 (3) sm_lid: 0 port_lid: 0 port_lmc: 0x00 link_layer: Ethernet説明ポートの
stateがinvalid stateの場合、デバイスは正常に動作していません。まず、セカンダリ 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は、ERI が有効な、サーバーの ENI のプライベート IP アドレスです。この IP アドレスを確認するには、「IP アドレスの表示」をご参照ください。
説明前述の perftest ベンチマークでは、通信に 1 つの NIC を使用します。お使いのワークロードで通信に 2 つの NIC が必要な場合は、2 つの perftest プロセスを開始する必要があります。次に、
-dパラメーターを使用して各プロセスに eRDMA NIC を指定し、-pパラメーターを使用して異なる通信ポートを指定します。詳細については、「perftest の詳細」をご参照ください。テスト結果には平均帯域幅が含まれます。次のような出力は、eRDMA 通信が正常であることを示します。
-
-
テストと検証
このトピックでは、nccl-tests を例に、eRDMA 対応の GPU インスタンスのパフォーマンスをテストおよび検証する方法を説明します。nccl-tests の詳細については、「nccl-tests」をご参照ください。
-
次のコマンドを実行して NCCL をインストールします。
ソースコードから NCCL をコンパイルしてインストールします。
説明公式のNVIDIA NCCL ウェブサイトからパッケージをダウンロードしてインストールすることもできます。
この例では、NCCL を
/usr/local/ncclディレクトリにインストールします。要件に応じて、別のインストールパスを指定できます。# NCCL のビルド cd /root sudo git clone https://github.com/NVIDIA/nccl.git cd nccl/ sudo make -j src.lib PREFIX=/usr/local/nccl sudo make install PREFIX=/usr/local/nccl -
次のコマンドを実行して、NCCL と libnccl.so ライブラリがインストールされていることを確認します。
# NCCL の確認 ls /usr/local/nccl # libnccl.so ライブラリの確認 ls /usr/local/nccl/lib -
次のコマンドを実行して Open MPI と必要なコンパイラをインストールします。
sudo wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.3.tar.gz sudo tar -xzf openmpi-4.1.3.tar.gz cd openmpi-4.1.3 sudo ./configure --prefix=/usr/local/openmpi sudo 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は Open MPI のインストールパス (/usr/local/openmpi) を指します。これらのパスを実際のインストールパスに置き換えてください。コマンドの編集が完了したら、インスタンスの
~/.bashrcファイルを編集してPATHとLD_LIBRARY_PATHを設定します。次に、次のコマンドを実行して環境変数の設定を有効にします。source ~/.bashrc -
次のコマンドを実行してテストコードをダウンロードし、コンパイルします。
sudo git clone https://github.com/NVIDIA/nccl-tests cd nccl-tests/ sudo make MPI=1 CUDA_HOME=/usr/local/cuda MPI_HOME=/usr/local/openmpi -
次のコマンドを実行して、インスタンス間のパスワードレス SSH アクセスを設定します。
パスワードレス SSH アクセスを設定するには、host1 で公開鍵を生成し、host2 にコピーします。
# host1 上 ssh-keygen ssh-copy-id -i ~/.ssh/id_rsa.pub ${host2} ssh root@${host2} # host1 でこのコマンドを実行して接続をテストします。パスワードのプロンプトなしでログインに成功すれば、設定は完了です。 -
次のコマンドを実行して、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_DEBUG=INFO \ -x LD_LIBRARY_PATH \ -x PATH \ ./build/all_reduce_perf -b 4M -e 4M -f 2 -g 1 -t 1 -n 20
eRDMA 設定の検証
基本的な eRDMA 設定が完了したら、次のチェックリストを使用して環境を検証し、eRDMA が正しく機能することを確認してください。
このセクションは、次の eRDMA 対応 GPU Elastic ベアメタルインスタンスタイプに適用されます:ebmgn9g、ebmgn9gc、ebmgn9ge、ebmgn8is、ebmgn8v。
|
カテゴリ |
項目 |
検証方法 |
説明 |
|
ネットワークインターフェイスの設定 |
インスタンスに 2 つの eRDMA ネットワークインターフェイスがあること |
|
コンソールからインスタンスを作成すると、デフォルトで 2 つの eRDMA ネットワークインターフェイスが設定されます。追加の操作は不要です。 |
|
ネットワークインターフェイスの状態が PORT_ACTIVE であること |
次のコマンドを実行して、すべてのポートのステータスが
|
チェックに失敗した場合は、 |
|
|
2 つのネットワークインターフェイスが異なる NUMA ノードにアタッチされていること |
次のコマンドを実行し、戻り値がそれぞれ
|
両方のコマンドが 0 を返す場合、セカンダリネットワークインターフェースが誤った NUMA ノードにアタッチされています。これを修正するには、次の手順に従ってください。
|
|
|
ジャンボフレームが有効になっていること |
次のコマンドを実行し、ネットワークインターフェイスの MTU が 4096 であることを確認してください。
|
MTU が 4096 でない場合は、ジャンボフレームを有効にしてから再度チェックを実行してください。 |
|
|
MPCC 輻輳制御アルゴリズムが有効になっていること |
次のコマンドを実行して、輻輳制御アルゴリズムを確認してください。
|
eRDMA ドライバー 1.5.6 以降では、デフォルトで MPCC アルゴリズムが使用されます。 MPCC が有効になっていない場合は、次のコマンドを実行して手動で有効にしてください。
|
|
|
eRDMA ネットワークインターフェイスに IP アドレスの競合が存在しないこと |
|
この問題は、ACK Terway ネットワークプラグインを使用している場合によく発生します。この問題が発生した場合は、「Terwayホワイトリストの設定」で解決策をご参照ください。 |
|
|
NCCL |
NCCL トポロジーファイルを指定する |
トポロジーファイル (l20n.xml) をインスタンスのローカルパス (例: NCCL タスクを開始する前に、次の環境変数を設定してください。
|
トポロジーファイルのダウンロードURL:
|
|
GPU |
GPU ACS (PCI Access Control Services) を無効にして P2P 通信パフォーマンスを向上させること |
次のコマンドを実行して ACS のステータスを確認してください。
|
|
関連ドキュメント
-
エンタープライズレベルのインスタンスで eRDMA を設定することで、ネットワークトポロジーを変更することなく、超低レイテンシー、高スループット、かつ伸縮性のある RDMA ネットワークサービスを実現できます。詳細については、「エンタープライズレベルのインスタンスでのeRDMAの有効化」をご参照ください。
-
コンテナ内で大規模なデータ転送と高性能なネットワーク通信を必要とするアプリケーションの場合、eRDMA をコンテナ (Docker) 環境に統合できます。このプロセスにより、コンテナ化されたアプリケーションは OS カーネルをバイパスしてホストの eRDMA デバイスに直接アクセスできるようになり、より高速なデータ転送と効率的な通信が可能になります。詳細については、「コンテナ (Docker) でのeRDMAの有効化」をご参照ください。
-
eRDMA を監視および診断するには、「eRDMAの監視と診断」をご参照ください。