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

Elastic Compute Service:GPU インスタンスでの eRDMA の有効化

最終更新日:Dec 06, 2025

GPU インスタンスに Elastic RDMA Interface (ERI) をアタッチすると、インスタンスは VPC 内での高速な相互接続のために RDMA パススルーを使用できます。従来の RDMA と比較して、Elastic Remote Direct Memory Access (eRDMA) はより効率的なデータ転送を提供します。これにより、GPU インスタンス間の通信効率が向上し、タスクの処理時間が短縮されます。このトピックでは、GPU インスタンスで eRDMA を有効にする方法について説明します。

制限事項

制限事項

説明

インスタンスタイプ

次のインスタンスタイプが ERI をサポートしています:

  • gn8is、ebmgn8is、gn8v、ebmgn8v

イメージ

次のいずれかのイメージがサポートされています:

  • (推奨) Alibaba Cloud Linux 3

  • CentOS 8.5/8.4/7.9

  • Ubuntu 24.04/22.04/20.04/18.04

eRDMA デバイスの数

  • gn8is および gn8v インスタンスファミリーは、1つの eRDMA ネットワークインターフェースカード (NIC) デバイスのみをサポートします。

  • ebmgn8is、および ebmgn8v の ECS ベアメタルインスタンスは、2つの eRDMA NIC デバイスをサポートします。

ネットワークの制限

  • NIC で Elastic RDMA Interface を有効にした後、それに IPv6 アドレスを割り当てることはできません。

  • 2つのインスタンスが ERI を介して通信する場合、通信リンク内で Server Load Balancer (SLB) などのネットワーク要素はサポートされません。

操作手順

サポートされているインスタンスで eRDMA 機能を使用するには、eRDMA ソフトウェアスタックがインストールされていること、および Elastic RDMA Interface 機能が有効になっている NIC がアタッチされていることの2つの条件を満たす必要があります。

インスタンス購入時の eRDMA の設定

  1. ECS コンソールにアクセスしてインスタンスを購入します。

  2. ERI をサポートする GPU インスタンスを作成します。

    作成プロセス中に、次の設定項目に注意してください。その他のパラメーターについては、「カスタム起動タブでインスタンスを作成」をご参照ください。

    • インスタンス:「制限事項」をご参照ください。このトピックでは、ebmgn8is を例として使用します。

    • イメージ: パブリックイメージを選択すると、[GPU ドライバーの自動インストール] と eRDMA ソフトウェアスタックの自動インストールのオプションがデフォルトで選択されます。インスタンスが作成されると、システムは GPU ドライバー、CUDA、cuDNN、および eRDMA ソフトウェアスタックを自動的にインストールします。

      image

      Elastic RDMA Interface (ERI) ソフトウェアスタックのインストールに関する注意

      • [公開イメージ] タブで、「eRDMA ソフトウェアスタックの自動インストール」をサポートするイメージを選択すると [eRDMA ソフトウェアスタックの自動インストール] オプションが利用可能になりますが、「eRDMA ソフトウェアスタックの自動インストール」オプションを選択しなかった場合、インスタンスの作成後に スクリプトまたは手動で eRDMA ソフトウェアスタックをインストールすることができます。

      • [パブリックイメージ] タブで、[eRDMA ソフトウェアスタックの自動インストール] をサポートしていないイメージと OS バージョンを選択した場合、[eRDMA ソフトウェアスタックの自動インストール] オプションは選択できません。この場合、インスタンスの作成後にソフトウェアスタックをインストールして eRDMA NIC を有効にすることはできません。

      • [パブリックイメージ] タブで、[eRDMA ソフトウェアスタックの自動インストール] オプションをクリアすると、より幅広いイメージと OS バージョンを選択できます。

    • (任意) ジャンボフレームの有効化選択したインスタンスがジャンボフレームをサポートしている場合、この機能を有効にして eRDMA の通信パフォーマンスを向上させることができます。

      ジャンボフレームを有効にすると、より大きな MTU を設定できます。NCCL と LL128 低レイテンシープロトコルを使用して通信する場合、MTU は 8500 である必要があります。ジャンボフレームが有効でない場合、MTU は 1400 である必要があります。MTU 設定が正しくないと、データ整合性の問題が発生します。
    • ENI: GPU インスタンスを作成すると、[ネットワークとセキュリティグループ] ページで、デフォルトで eRDMA プライマリ NIC と eRDMA セカンダリ ENI が作成されます。プライマリ NIC とセカンダリ ENI については、eRDMA インターフェイス オプションが自動的に選択されます。

      弹性网卡.jpg

      説明
      • GPU インスタンスの実行後、単一の ENI に対して Elastic RDMA 機能を有効または無効にすることはできません。

      • Elastic RDMA 機能が有効になっている2つの NIC は、自動的に異なるチャネルにアタッチされます。チャネルを指定する必要はありません。

      • プライマリ NIC は GPU インスタンスからデタッチできません。インスタンスと共に作成およびリリースされることしかできません。

  3. 作成したインスタンスの詳細ページに移動し、[ENI] タブをクリックして、インスタンスの NIC タイプを表示します。

    プライマリ NIC またはセカンダリ ENI の NIC タイプが次の図のように表示されている場合、Elastic RDMA Interface 機能が有効になっている ENI がインスタンスにアタッチされています。

    主辅助弹性网卡.jpg

既存の GPU インスタンスに対する eRDMA の設定

  1. ECS コンソールにログインします。

  2. 対象のインスタンスを見つけ、インスタンス詳細ページに移動し、[ENI] タブを選択して、Elastic RDMA Interface 機能が有効になっている NIC がインスタンスにアタッチされているかどうかを確認します。

    弹性网卡.jpg

    • 有効になっている場合 (上の図を参照)、以下の手順はスキップしてください。

    • 有効になっていない場合は、次の手順に従ってプライマリ NIC またはセカンダリ ENI の eRDMA を設定します。

  3. プライマリ 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 つのみです。

    • プライマリ NIC の eRDMA 設定

      OpenAPI を使用してプライマリ NIC の eRDMA を設定します。詳細については、「ModifyNetworkInterfaceAttribute」をご参照ください。

      主要なパラメーターの説明

      パラメーター

      説明

      RegionId

      プライマリ NIC が存在するリージョンの ID。

      NetworkInterfaceId

      プライマリ NIC の ID。

      NetworkInterfaceTrafficMode

      プライマリ NIC の通信モード。有効な値:

      • Standard:TCP 通信モードを使用します。

      • HighPerformance:ERI を有効にし、RDMA 通信モードを使用します。

      このステップでは、HighPerformance を選択します。

    • セカンダリ ENI の eRDMA 設定

      コンソールで eRDMA NIC を作成して GPU インスタンスにアタッチする場合、別のチャネルにアタッチすることはできません。これにより、2つの eRDMA NIC の合計帯域幅が半分に減少します。したがって、OpenAPI を使用して eRDMA NIC をアタッチしてください。

      (推奨) OpenAPI の使用

      • 方法 1:Elastic RDMA NIC の作成とアタッチ

        各 GPU インスタンスは最大2つの eRDMA NIC をサポートします。NetworkCardIndex パラメーターを使用して、それらを異なるチャネルにアタッチする必要があります。

        1. Elastic RDMA NIC を作成します。

          詳細については、「CreateNetworkInterface」をご参照ください。

          主要なパラメーターの説明

          パラメーター

          説明

          RegionId

          ENI を作成するリージョンの ID。

          VSwitchId

          VPC 内の vSwitch の ID。ENI のプライベート IP アドレスは、vSwitch の CIDR ブロック内の利用可能な IP アドレスから選択されます。

          SecurityGroupId

          ENI を追加するセキュリティグループの ID。セキュリティグループと ENI は同じ VPC 内にある必要があります。

          NetworkInterfaceTrafficMode

          ENI の通信モード。有効な値:

          • Standard:TCP 通信モードを使用します。

          • HighPerformance:ERI を有効にし、RDMA 通信モードを使用します。

          このステップでは、HighPerformance を選択します。

          呼び出しが成功した後、返されたデータから ENI ID (NetworkInterfaceId の戻り値) を記録します。

        2. eRDMA ENI をアタッチします。

          詳細については、「AttachNetworkInterface」をご参照ください。

          主要なパラメーターの説明

          パラメーター

          説明

          RegionId

          インスタンスが存在するリージョンの ID。

          NetworkInterfaceId

          ENI の ID。これは作成された Elastic RDMA NIC です。

          InstanceId

          インスタンス ID。

          NetworkCardIndex

          NIC がアタッチされている物理ネットワークカードのインデックス。

          Elastic RDMA NIC を作成する場合、インスタンスにアタッチする際に手動でチャネル (物理ネットワークカードのインデックス) を指定する必要があります。チャネル 0 または 1 を指定できます。2つの Elastic RDMA NIC には異なる値を指定してください。

          説明

          最大のネットワーク帯域幅を達成するには、2つの RDMA NIC を異なるチャネルにアタッチしてください。

          呼び出しが成功すると (ENI がアタッチされます)、GPU インスタンスの[ENI] タブで、アタッチされた Elastic RDMA NIC を確認できます。ENI

      • 方法 2:既存の ENI のプロパティを変更する

        説明

        この方法では、NetworkCardIndex パラメーター (NIC がアタッチされている物理ネットワークカードのインデックス) の指定はサポートされていません。2つの RDMA NIC を同時にアタッチする場合、この方法でセカンダリ ENI の eRDMA を設定すると、最大の帯域幅を達成できない可能性があります。

        詳細については、「ModifyNetworkInterfaceAttribute」をご参照ください。

        主要なパラメーターの説明

        パラメーター

        説明

        RegionId

        セカンダリ ENI が存在するリージョンの ID。

        NetworkInterfaceId

        セカンダリ ENI の ID。

        NetworkInterfaceTrafficMode

        セカンダリ ENI の通信モード。有効な値:

        • Standard:TCP 通信モードを使用します。

        • HighPerformance:ERI を有効にし、RDMA 通信モードを使用します。

        このステップでは、HighPerformance を選択します。

        呼び出しが成功すると (ENI がアタッチされます)、GPU インスタンスの [ENI] タブで、アタッチされた Elastic RDMA ネットワークインターフェイスカードを表示できます。

        网卡类型.jpg

      コンソールの使用

      1. セカンダリ ENI を作成します。

        詳細については、「ENI の作成と使用」をご参照ください。 ERI を使用してセカンダリ ENI を作成する場合は、[eRDMA インターフェイス] スイッチをオンにします。 ERI は、ENI の IP アドレスや ENI に適用されるセキュリティグループルールなど、セカンダリ ENI の設定を共有します。弹性ネットワークインターフェイス

      2. セカンダリ ENI を GPU インスタンスにアタッチします。

        詳細については、「セカンダリ ENI のアタッチ」をご参照ください。

        説明

        1つのインスタンスに最大2つの ERI 対応セカンダリ ENI をアタッチできます。

        ERI 対応のセカンダリ ENI を GPU インスタンスにアタッチした後、ENI をデタッチするにはインスタンスを停止する必要があります。詳細については、「インスタンスの停止 (通常停止)」をご参照ください。

      3. GPU インスタンスにリモート接続します。

        詳細については、「Workbench を使用した Linux インスタンスへの接続」をご参照ください。

      4. ifconfig コマンドを実行して、新しくアタッチされたセカンダリ ENI が存在するかどうかを確認します。

        新しくアタッチされたセカンダリ ENI が表示されない場合は、手動で NIC を設定します。詳細については、「セカンダリ ENI の設定」をご参照ください。それ以外の場合は、このステップをスキップします。

        説明

        一部のイメージでは、新しくアタッチされたセカンダリ ENI が自動的に検出されない場合があります。インスタンス上でセカンダリ ENI を設定する必要があります。

  4. (任意) インスタンスに 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 サービスコンポーネントを次のようにロードできます。

      1. GPU インスタンスにリモート接続します。

        詳細については、「Workbench を使用した Linux インスタンスへの接続」をご参照ください。

      2. OFED ドライバーをインストールします。

        1. 次のコマンドを実行して依存関係をインストールします。

          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 -y

          CentOS 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 -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
        2. 次のコマンドを実行して、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.rpm

          CentOS 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.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
            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
        3. お使いのオペレーティングシステムに対応するコマンドを実行して、OFED ドライバーをインストールします。

          Alibaba Cloud Linux 3

          sudo ./install.pl --config ./ofed_alibaba_cloud3.conf --distro RHEL8
          sudo dracut -f

          CentOS 8.5/8.4/7.9

          • CentOS 8.5/8.4

            ./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

          ${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
        4. 次のコマンドを実行して、/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`
        5. インスタンスを再起動します。

          OFED ドライバーのインストール後、新しいカーネルモジュールを有効にするためにインスタンスを再起動する必要があります。詳細については、「インスタンスの再起動」をご参照ください。

      3. eRDMA ドライバーをインストールします。

        1. 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
        2. 次のコマンドを実行して eadm ツールを使用し、eRDMA ドライバーが正しくインストールされていることを確認します。

          eadm ver

          次のような結果が返された場合、ドライバーは正しくインストールされています。driver

          説明

          このトピックでは、ドライバーバージョン 0.2.35 を例として使用します。コマンドが見つからない、または実行に失敗した場合は、eRDMA ドライバーを再インストールしてください。

      4. GPU ドライバーをインストールします。

        詳細については、「GPU コンピューティング最適化インスタンス (Linux) への Tesla ドライバーの手動インストール」をご参照ください。

      5. 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
  1. 帯域幅の検証

    1. GPU インスタンスにリモート接続します。

      詳細については、「Workbench を使用した Linux インスタンスへの接続」をご参照ください。

    2. 次のコマンドを実行して、2つの eRDMA NIC が正しく動作しているか確認します。

      sudo ibv_devinfo

      eRDMA ドライバーのインストールスクリプトは、デフォルトで最新のドライバーバージョンをインストールします。以前のバージョンの eRDMA ドライバーをインストールするには、チケットを送信してサポートを依頼してください。

      このトピックでは、eRDMA ドライバーバージョン 0.2.37 以降を例として使用します。次のような結果が返された場合、2つの eRDMA NIC は正しく動作しています。両方の eRDMA デバイスのポートの statePORT_ACTIVE であれば、eRDMA NIC は正しく動作しています。

      网卡.jpg

      説明

      eRDMA デバイスのポートの stateinvalid state の場合、eRDMA NIC は正しく動作していません。セカンダリ ENI が正しく設定されているか確認してください。例えば、ifconfig コマンドを実行して、すべての NIC 設定と IP アドレスが存在することを確認します。

    3. 次のコマンドを実行して perftest ツールをインストールします。

      sudo yum install perftest -y
    4. 次のコマンドを実行して、RDMA ネットワーク帯域幅がハードウェアの期待値を満たしているかテストします。

      1. サーバー側で、次のコマンドを実行してクライアントからの接続リクエストを待ちます。

        sudo ib_write_bw -d erdma_0 -F -q 16 --run_infinitely --report_gbits -p 18515
      2. クライアント側で、次のコマンドを実行して接続リクエストとパケットを送信します。

        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 通信は正常です。

      返された情報の詳細

      ---------------------------------------------------------------------------------------
                          RDMA_Write BW Test
       Dual-port       : OFF          Device         : erdma_0
       Number of qps   : 16           Transport type : IB
       Connection type : RC           Using SRQ      : OFF
       PCIe relax order: ON
       ibv_wr* API     : OFF
       TX depth        : 128
       CQ Moderation   : 1
       Mtu             : 1024[B]
       Link type       : Ethernet
       GID index       : 1
       Max inline data : 0[B]
       rdma_cm QPs     : OFF
       Data ex. method : Ethernet
      ---------------------------------------------------------------------------------------
       local address: LID 0000 QPN 0x0002 PSN 0xa66b22 RKey 0x000100 VAddr 0x007f09922fd000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x0003 PSN 0x3b9364 RKey 0x000100 VAddr 0x007f099230d000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x0004 PSN 0x6b1ade RKey 0x000100 VAddr 0x007f099231d000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x0005 PSN 0x8c83d5 RKey 0x000100 VAddr 0x007f099232d000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x0006 PSN 0x1335c4 RKey 0x000100 VAddr 0x007f099233d000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x0007 PSN 0xc451d6 RKey 0x000100 VAddr 0x007f099234d000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x0008 PSN 0x4edd7d RKey 0x000100 VAddr 0x007f099235d000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x0009 PSN 0x93d832 RKey 0x000100 VAddr 0x007f099236d000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x000a PSN 0x16d2ee RKey 0x000100 VAddr 0x007f099237d000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x000b PSN 0x6820d8 RKey 0x000100 VAddr 0x007f099238d000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x000c PSN 0x9419c RKey 0x000100 VAddr 0x007f099239d000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x000d PSN 0xedd7ff RKey 0x000100 VAddr 0x007f09923ad000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x000e PSN 0x70ff7f RKey 0x000100 VAddr 0x007f09923bd000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x000f PSN 0x8ccc0 RKey 0x000100 VAddr 0x007f09923cd000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x0010 PSN 0x33327e RKey 0x000100 VAddr 0x007f09923dd000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x0011 PSN 0x9b836a RKey 0x000100 VAddr 0x007f09923ed000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       remote address: LID 0000 QPN 0x0002 PSN 0x651666 RKey 0x000100 VAddr 0x007f5011099000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x0003 PSN 0xf99758 RKey 0x000100 VAddr 0x007f50110a9000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x0004 PSN 0xd001c2 RKey 0x000100 VAddr 0x007f50110b9000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x0005 PSN 0x23aae9 RKey 0x000100 VAddr 0x007f50110c9000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x0006 PSN 0xfad148 RKey 0x000100 VAddr 0x007f50110d9000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x0007 PSN 0xca210a RKey 0x000100 VAddr 0x007f50110e9000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x0008 PSN 0xe0cea1 RKey 0x000100 VAddr 0x007f50110f9000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x0009 PSN 0x8ddc86 RKey 0x000100 VAddr 0x007f5011109000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x000a PSN 0xde22b2 RKey 0x000100 VAddr 0x007f5011119000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x000b PSN 0x9f2f4c RKey 0x000100 VAddr 0x007f5011129000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x000c PSN 0x66a100 RKey 0x000100 VAddr 0x007f5011139000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x000d PSN 0x934d93 RKey 0x000100 VAddr 0x007f5011149000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x000e PSN 0xf70783 RKey 0x000100 VAddr 0x007f5011159000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x000f PSN 0xfdce74 RKey 0x000100 VAddr 0x007f5011169000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x0010 PSN 0xfca422 RKey 0x000100 VAddr 0x007f5011179000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x0011 PSN 0xaa3e3e RKey 0x000100 VAddr 0x007f5011189000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
      ---------------------------------------------------------------------------------------
       #bytes     #iterations    BW peak[Gb/sec]    BW average[Gb/sec]   MsgRate[Mpps]
       65536      910045           0.00               95.42              0.182003

テストと検証

実際のアプリケーションで eRDMA ネットワークを持つ GPU インスタンスのパフォーマンスをテストおよび検証するために、このトピックでは nccl-tests を例として、サービスで eRDMA を使用する方法を示します。nccl-tests の詳細については、「nccl-tests」をご参照ください。

  1. 次のコマンドを実行して 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
  2. 次のコマンドを実行して、nccl と libnccl.so ライブラリがインストールされているか確認します。

    # Check nccl
    ls /usr/local/nccl
    # Check the libnccl.so library
    ls /usr/local/nccl/lib
  3. 次のコマンドを実行して 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
  4. 次のコマンドを実行して環境変数を設定します。

    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 ファイルに移動し、PATHLD_LIBRARY_PATH を設定してから、次のコマンドを実行して環境変数の設定を有効にします。

    source ~/.bashrc
  5. 次のコマンドを実行してテストコードをダウンロードし、コンパイルします。

    git clone https://github.com/NVIDIA/nccl-tests
    cd nccl-tests/
    make MPI=1 CUDA_HOME=/usr/local/cuda MPI_HOME=/usr/local/openmpi
  6. 次のコマンドを実行して、SSH 経由でインスタンス間の相互信頼を確立します。

    host1 で公開鍵を生成し、host2 にコピーして、SSH 経由でインスタンス間の相互信頼を確立します。

    #host1 で実行
    ssh-keygen
    ssh-copy-id -i ~/.ssh/id_rsa.pub ${host2}
    
    ssh root@{host2}   # host1 で実行して、パスワードなしで host2 に接続できるかテストします。接続できれば、インスタンス間で SSH 経由の相互信頼が確立されています。
  7. 次のコマンドを実行して、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 の監視と診断」をご参照ください。