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

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

最終更新日:Mar 14, 2026

Elastic RDMA Interface (ERI) を GPU インスタンスにアタッチすると、インスタンスは RDMA パススルーを使用して VPC 内での高速な相互接続が可能になります。従来の 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 ネットワークインターフェースカードデバイスのみをサポートします。

  • ebmgn8is、および ebmgn8v の ECS Bare Metal インスタンスは、2 つの eRDMA ネットワークインターフェースカードデバイスをサポートします。

ネットワーク制限

  • ネットワークインターフェースカードに対して Elastic RDMA Interface を有効にした後、それに IPv6 アドレスを割り当てることはできません。

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

操作手順

サポートされているインスタンスで eRDMA 機能を使用するには、「eRDMA ソフトウェアスタックのインストール」と「Elastic RDMA Interface 機能が有効化されたネットワークインターフェースカードのアタッチ」という 2 つの条件を満たす必要があります。

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

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

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

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

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

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

      image

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

      • パブリックイメージ]タブで、eRDMA ソフトウェアスタックの自動インストールをサポートするイメージを選択した場合([ERDMA ソフトウェアスタックの自動インストール]オプションが利用可能になります)でも、eRDMA ソフトウェアスタックの自動インストールオプションを選択しない場合は、インスタンス作成後にスクリプトを使用するか手動インストールで eRDMA ソフトウェアスタックをインストールできます

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

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

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

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

      弹性网卡.jpg

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

      • Elastic RDMA 機能が有効になっている 2 つのネットワークインターフェースカードは、自動的に異なるチャネルにアタッチされます。チャネルを指定する必要はありません。

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

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

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

    主辅助弹性网卡.jpg

既存の GPU インスタンスでの eRDMA の設定

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

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

    弹性网卡.jpg

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

    • 有効になっていない場合は、以下の手順に従ってプライマリネットワークインターフェースカードまたはセカンダリ ENI の eRDMA を設定します。

  3. プライマリネットワークインターフェースカードまたはセカンダリ ENI の eRDMA を設定します。

    説明
    • ジャンボフレームをサポートするインスタンスタイプでは、ジャンボフレームを有効にすることで eRDMA の通信パフォーマンスを向上させることができます。

      ジャンボフレームを有効にすると、より大きな MTU を設定できます。NCCL と LL128 低レイテンシープロトコルを使用して通信する場合、MTU は 8500 である必要があります。ジャンボフレームが有効でない場合、MTU は 1400 である必要があります。MTU 設定が正しくないと、データ整合性の問題が発生します。
    • プライマリネットワークインターフェースカードまたはセカンダリ ENI の [eRDMA インターフェース] オプションを選択せずに GPU インスタンスを作成した場合、インスタンス作成後に 2 つの eRDMA 対応セカンダリ ENI を作成してアタッチできます。

    • GPU インスタンスを作成し、1 つの ENI のみで [eRDMA インターフェース] オプションを選択した場合、インスタンス作成後に追加で 1 つの eRDMA 対応セカンダリ ENI のみを作成してアタッチできます。

    • プライマリネットワークインターフェースカードの eRDMA 設定

      OpenAPI を使用して、プライマリネットワークインターフェースカードの eRDMA を設定します。詳細については、「ModifyNetworkInterfaceAttribute」をご参照ください。

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

      パラメーター

      説明

      RegionId

      プライマリネットワークインターフェースカードが存在するリージョンの ID。

      NetworkInterfaceId

      プライマリネットワークインターフェースカードの ID。

      NetworkInterfaceTrafficMode

      プライマリネットワークインターフェースカードの通信モード。有効な値:

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

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

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

    • セカンダリ ENI の eRDMA 設定

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

      (推奨) OpenAPI の使用

      • 方法 1:Elastic RDMA ネットワークインターフェースカードの作成とアタッチ

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

        1. Elastic RDMA ネットワークインターフェースカードを作成します。

          詳細については、「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 ネットワークインターフェースカードです。

          InstanceId

          インスタンス ID。

          NetworkCardIndex

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

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

          説明

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

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

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

        説明

        この方法では、NetworkCardIndex パラメーター (ネットワークインターフェースカードがアタッチされる物理ネットワークカードのインデックス) の指定はサポートされていません。同時に 2 つの RDMA ネットワークインターフェースカードをアタッチする場合、この方法でセカンダリ 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 のアタッチ」をご参照ください。

        説明

        ERI が有効になっているセカンダリ ENI は、1 つのインスタンスに最大 2 つまでアタッチできます。

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

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

        詳細については、「ワークベンチを使用して Linux インスタンスに接続する」をご参照ください。

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

        新しくアタッチされたセカンダリ ENI が表示されない場合は、ネットワークインターフェースカードを手動で設定します。詳細については、「セカンダリ 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 インスタンスにリモート接続します。

        詳細については、「ワークベンチを使用して 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 インスタンスにリモート接続します。

      詳細については、「ワークベンチを使用して Linux インスタンスに接続する」をご参照ください。

    2. 次のコマンドを実行して、2 つの eRDMA ネットワークインターフェースカードが正しく動作しているか確認します。

      sudo ibv_devinfo

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

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

      网卡.jpg

      説明

      eRDMA デバイスのポートの stateinvalid state の場合、eRDMA ネットワークインターフェースカードは正しく動作していません。セカンダリ ENI が正しく設定されているか確認してください。例えば、ifconfig コマンドを実行して、すべてのネットワークインターフェースカードの設定と 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 つのネットワークインターフェースカードを使用します。サービスで 2 つのネットワークインターフェースカードを介した通信が必要な場合は、同時に 2 つの perftest プロセスを開始する必要があります。-d パラメーターを使用して 2 つのプロセスそれぞれに eRDMA ネットワークインターフェースカードを指定し、-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 の監視と診断」をご参照ください。