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

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

最終更新日:Jun 05, 2026

Elastic RDMA Interface (ERI) を GPU 加速インスタンスにアタッチすると、仮想プライベートクラウド (VPC) 内の GPU 加速インスタンス間の通信を高速化するために、リモートダイレクトメモリアクセス (RDMA) を有効にできます。eRDMA は、従来の RDMA よりも効率的にデータを転送できるため、GPU 加速インスタンス間の通信を改善し、タスクの処理時間を短縮します。このトピックでは、GPU 加速インスタンスで eRDMA を有効にする方法について説明します。

制約

項目

説明

インスタンスタイプ

Elastic RDMA Interface (ERI) は、次のインスタンスタイプをサポートします:

  • gn8is、ebmgn8is、gn8v、ebmgn8v、ecs.ebmgn9g、ecs.ebmgn9gc、ecs.ebmgn9ge

イメージ

次のいずれかのイメージを使用します:

  • (推奨) Alibaba Cloud Linux 3

  • CentOS 8.5/8.4/7.9

  • Ubuntu 24.04/22.04/20.04/18.04

eRDMA デバイス数

  • gn8is および gn8v インスタンスファミリーは、1 つの Elastic RDMA Interface のみをサポートします。

  • ebmgn8is、ebmgn8v、ecs.ebmgn9g、ecs.ebmgn9gc、および ecs.ebmgn9ge の ECS ベアメタルインスタンスは、2 つの Elastic RDMA Interface をサポートします。

ネットワークの制約

  • Elastic Network Interface で Elastic RDMA Interface を有効化すると、そのインターフェースに IPv6 アドレスを割り当てることはできません。

  • ERI を使用する 2 つのインスタンス間の通信は、Server Load Balancer (SLB) などの中間ネットワークデバイスを経由できません。

操作手順

eRDMA 機能を使用するには、インスタンスに eRDMA ソフトウェアスタックがインストールされ、ERI が有効化された伸縮性ネットワークインターフェイスがアタッチされている必要があります。

インスタンス作成時の eRDMA の設定

  1. ECS コンソールの [カスタム起動] ページに移動します。

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

    インスタンスを作成する際は、次の設定に注意してください。その他のパラメーターについては、「ウィザードを使用したインスタンスの作成」をご参照ください。

    • [インスタンスタイプ]:ERI をサポートするインスタンスタイプを選択します。詳細については、「制約」をご参照ください。このトピックでは、 ebmgn8is を例として使用します。

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

      この例では、オペレーティングシステムは Alibaba Cloud Linux 3.2104 LTS 64 ビットで、GPU ドライバーのバージョンは Driver 570.133.20 / CUDA 12.8.1 / CUDNN 9.8.0.87 です。

      eRDMA ソフトウェアスタックのインストールに関する注意

      • 公開イメージ タブで、eRDMA ソフトウェアスタックのインストール をサポートするイメージのオペレーティングシステムとバージョンを選択し (この場合、eRDMA ソフトウェアスタックのインストール オプションが選択可能です)、eRDMA ソフトウェアスタックのインストール オプションを選択しなかった場合、インスタンスの作成後にスクリプトまたは手動インストールによって eRDMA ソフトウェアスタックをインストールできます。

      • 公開イメージ タブで、オペレーティングシステムとバージョンが eRDMA ソフトウェアスタックのインストール をサポートしていないイメージを選択した場合 (この場合、eRDMA ソフトウェアスタックのインストール オプションは選択できません)、インスタンス作成後にスクリプトや手動インストールを実行しても、eRDMA ネットワークインターフェイスを有効にして使用することはできません。

      • 公開イメージ タブで eRDMA ソフトウェアスタックのインストール オプションの選択を解除すると、より多くのオペレーティングシステムとバージョンが利用可能になります。

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

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

      説明
      • インスタンスの実行中に、伸縮性ネットワークインターフェイスの eRDMA を有効または無効にすることはできません。

      • eRDMA が有効化された 2 つの ENI は、自動的に異なるチャネルにバインドされます。チャネルを指定する必要はありません。

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

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

    プライマリ NIC またはセカンダリ ENI の NIC タイプに「(eRDMAインターフェイス)」が含まれている場合は、Elastic RDMA Interface (ERI) が有効化された ENI がインスタンスにアタッチされていることを示します。

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

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

  2. 対象のインスタンスを見つけて詳細ページに移動し、ENI タブをクリックして、Elastic RDMA Interface (ERI) が有効化された伸縮性ネットワークインターフェイスがインスタンスにアタッチされているかどうかを確認します。

    伸縮性ネットワークインターフェイスで eRDMA が有効になっている場合、[NICタイプ] 列に [プライマリNIC (eRDMAインターフェイス)] または [セカンダリNIC (eRDMAインターフェイス)] が表示されます。

    • ERI が有効になっている場合は、以降の手順をスキップします。

    • ERI が有効になっていない場合は、プライマリ NIC またはセカンダリ ENI に設定します。

  3. プライマリ NIC またはセカンダリ ENI に eRDMA を設定します。

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

      ジャンボフレームを有効にすると、より大きな MTU を設定できます。NCCL と LL128 低レイテンシープロトコルを通信に使用する場合、MTU は 8500 である必要があります。ジャンボフレームが有効でない場合、MTU は 1400 にする必要があります。MTU 設定が正しくないと、データの一貫性に問題が発生する可能性があります。
    • インスタンス作成時にプライマリ NIC またはセカンダリ ENI のいずれにも eRDMA インターフェース オプションを選択しなかった場合、インスタンス作成後に eRDMA が有効化されたセカンダリ ENI を 2 つ作成して有効にすることができます。

    • GPU インスタンスの作成時に、いずれか 1 つの NIC (プライマリまたはセカンダリ) のみで eRDMA インターフェース オプションを選択した場合、インスタンス作成後に追加で eRDMA が有効化されたセカンダリ ENI を 1 つだけ作成して有効にすることができます。

    • プライマリ NIC への eRDMA の設定

      ModifyNetworkInterfaceAttribute API を呼び出して、プライマリ NIC に eRDMA を設定します。

      主要パラメーター

      パラメーター

      説明

      RegionId

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

      NetworkInterfaceId

      プライマリ NIC の ID。

      NetworkInterfaceTrafficMode

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

      • Standard:TCP 通信モード。

      • HighPerformance:Elastic RDMA Interface (ERI) が有効化された RDMA 通信モード。

      この手順では、値を HighPerformance に設定します。

    • セカンダリ ENI への eRDMA の設定

      ECS コンソールから eRDMA 対応の ENI を作成してアタッチする場合、特定のチャネルにバインドすることはできません。この制約により、eRDMA 対応の 2 つの ENI の合計帯域幅が半分になる可能性があります。したがって、OpenAPI を使用して eRDMA 対応の ENI をアタッチすることを推奨します。

      OpenAPI

      • 方法1:eRDMA 対応 ENI の作成とアタッチ

        各 GPU アクセラレーションインスタンスは、最大 2 つの eRDMA デバイスをサポートします。NetworkCardIndex パラメーターを使用して、デバイスを異なるチャネルにバインドする必要があります。

        1. eRDMA 対応の ENI を作成します。

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

          主要パラメーター

          パラメーター

          説明

          RegionId

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

          VSwitchId

          Virtual Private Cloud (VPC) 内の vSwitch の ID。ENI には、vSwitch の CIDR ブロックからプライベート IP アドレスが割り当てられます。

          SecurityGroupId

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

          NetworkInterfaceTrafficMode

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

          • Standard:TCP 通信モード。

          • HighPerformance:Elastic RDMA Interface (ERI) が有効化された RDMA 通信モード。

          この手順では、値を HighPerformance に設定します。

          呼び出しが成功したら、返された弹性ネットワークインターフェイス ID を記録します。この ID は NetworkInterfaceId の値です。

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

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

          主要パラメーター

          パラメーター

          説明

          RegionId

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

          NetworkInterfaceId

          作成した eRDMA 対応 ENI の ID。

          InstanceId

          インスタンスの ID。

          NetworkCardIndex

          ENI がバインドされる物理 NIC のインデックス。

          eRDMA 対応の ENI をインスタンスにアタッチする場合、チャネル (物理 NIC インデックス) を手動で指定する必要があります。有効な値は 0 と 1 です。eRDMA 対応の ENI を 2 つアタッチする場合は、各 ENI に異なる値を割り当てます。

          説明

          最大のネットワーク帯域幅を達成するには、2 つの eRDMA 対応 ENI を異なるチャネルにバインドする必要があります。

          API 呼び出しが成功し、ENI がアタッチされると、インスタンス詳細ページの ENI タブでバインドされた 2 つの ENI を表示できます。[NICタイプ] には [セカンダリNIC (eRDMAインターフェイス)]、ステータスには [バインド済み] と表示されます。

      • 方法2:既存の ENI の属性の変更

        説明

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

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

        主要パラメーター

        パラメーター

        説明

        RegionId

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

        NetworkInterfaceId

        セカンダリネットワークインターフェイスの ID。

        NetworkInterfaceTrafficMode

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

        • Standard:TCP 通信モード。

        • HighPerformance:Elastic RDMA Interface (ERI) が有効化された RDMA 通信モード。

        この手順では、値を HighPerformance に設定します。

        API 呼び出しが成功すると、GPU インスタンス詳細ページの ENI タブでアタッチされた eRDMA 対応 ENI を表示できます。

      コンソール

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

        詳細については、「ENIの作成」をご参照ください。セカンダリ ENI を作成して ERI を有効にする場合は、eRDMA インターフェース スイッチをオンにします。ERI は、IP アドレスや適用されるセキュリティグループルールなど、セカンダリ ENI の設定を使用します。[ENIの作成] ページで、[ENI名][VPC][vSwitch]、および [セキュリティグループ] を設定します。[eRDMAインターフェイス] スイッチをオンにし、必要に応じてプライマリおよびセカンダリのプライベート IP アドレスを設定してから、[ENIの作成] をクリックします。

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

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

        説明

        1 つのインスタンスに、ERI が有効化されたセカンダリ ENI を最大 2 つまでアタッチできます。

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

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

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

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

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

        説明

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

  4. (オプション) インスタンスへの Elastic RDMA Interface (ERI) ソフトウェアスタックのインストール

    パブリックイメージを選択したときに eRDMA ソフトウェアスタックのインストール オプションを選択しなかった場合は、スクリプトを使用するか手動で、eRDMA ソフトウェアスタックをインストールする必要があります。

    • スクリプトベースのインストール

      GPU インスタンスの作成後、次のサンプルスクリプトを使用して、eRDMA ソフトウェアスタック、GPU ドライバー、CUDA、および cuDNN をインストールできます:

      #!/bin/sh
      # インストールするバージョンを指定してください
      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"
      # .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
    • 手動インストール

      nv_peer_memGPU インスタンスを作成した後、OFED ドライバー、eRDMA ドライバー、GPU ドライバーを手動でインストールし、 サービスコンポーネントをロードできます。

      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/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.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 ドライバーをダウンロードしてインストールします。

          sudo wget http://mirrors.cloud.aliyuncs.com/erdma/env_setup.sh
          sudo bash env_setup.sh --egs
        2. eadm ツールを使用して、次のコマンドを実行し、eRDMA ドライバーのインストールを検証します。

          eadm ver

          次のような出力は、インストールが成功したことを示します。

          [root@xxx ~]# eadm ver
          Query kernel driver version: 0.2.35
          説明

          このトピックでは、ドライバーバージョン 0.2.35 を例として使用します。「command not found」エラーが返されたり、コマンドの実行に失敗した場合は、eRDMA ドライバーを再インストールしてください。

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

        詳細については、「LinuxインスタンスへのNVIDIA GPUドライバーの手動インストール」をご参照ください。

      5. 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
          depmod -a
          modprobe nv_peer_mem
          # lsmod|grep nv_peer_mem コマンドを実行して結果を確認できます。
          service nv_peer_mem start
  1. 帯域幅の検証

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

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

    2. 次のコマンドを実行して、2 つの eRDMA デバイスが期待どおりに動作しているか確認します。

      sudo ibv_devinfo

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

      このトピックでは、eRDMA ドライバー バージョン 0.2.37 以降を例として使用します。次の出力は、2 つの eRDMA デバイスが正常に動作していることを示しています。ポートの statePORT_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
      説明

      eRDMA デバイスのポートの stateinvalid state の場合、デバイスは異常な状態です。まず、セカンダリ 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 はサーバーインスタンス上の eRDMA が有効化された ENI のプライベート IP アドレスです。この IP アドレスを確認するには、「IP アドレスの表示」をご参照ください。

      説明

      前述の perftest ベンチマークでは、通信に 1 つの NIC を使用します。お使いのサービスで通信に 2 つの NIC が必要な場合は、2 つの perftest プロセスを開始する必要があります。その後、-d パラメーターを使用して各プロセスに 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

テストと検証

このトピックでは、nccl-tests を例として、eRDMA ネットワークを備えた GPU インスタンスのアプリケーションパフォーマンスをテストする方法を示します。詳細については、「nccl-tests」をご参照ください。

  1. 次のコマンドで NCCL をインストールします。

    説明

    公式の NVIDIA NCCL Web サイトからインストールパッケージをダウンロードしてインストールすることもできます。

    この例では、NCCL を /usr/local/nccl にインストールします。要件に応じて、別のパスを指定できます。

    # 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 ライブラリの存在を確認します。

    # NCCL の確認
    ls /usr/local/nccl
    # libnccl.so ライブラリの確認
    ls /usr/local/nccl/lib
  3. 次のコマンドで Open MPI と必要なコンパイラをインストールします。

    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 は Open MPI のインストールパス (/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 アクセスを設定します。

    パスワードなしの SSH アクセスを設定するには、host1 で公開鍵を生成し、それを host2 にコピーします。

    # host1 上で
    ssh-keygen
    ssh-copy-id -i ~/.ssh/id_rsa.pub ${host2}
    # host1 上で、このコマンドを実行して接続をテストします。パスワードの入力なしでログインできれば、設定は成功です。
    ssh root@${host2}
  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_GRAPH_FILE \
    -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 対応 GPU Elastic Bare Metal Instance タイプに適用されます:ecs.ebmgn9g、ecs.ebmgn9gc、ecs.ebmgn9ge、ecs.ebmgn8is、ecs.ebmgn8v。

ワンクリックチェックスクリプト (推奨)

このワンクリックスクリプトを使用して、以下のすべての項目をすばやく検証できます。

wget http://mirrors.cloud.aliyuncs.com/erdma/tools/env_check.py
python3 env_check.py -s egs_l20n

すべてのチェックで PASS が返された場合、環境は正しく設定されています。出力を JSON フォーマットで取得するには、--json パラメーターを追加してください。

説明

このスクリプトは、GPU アクセス制御サービス (ACS) が無効になっているかどうかをチェックしません。これは手動で検証する必要があります。さらに、NCCL を実行する際には NCCL_GRAPH_FILE 環境変数を設定する必要があります。

カテゴリ

項目

検証方法

説明

ネットワークインターフェース設定

インスタンスに 2 つの eRDMA ネットワークインターフェースがあること

ibv_devices コマンドを実行し、出力に 2 つのデバイス erdma_0erdma_1 が含まれていることを確認します。

コンソールからインスタンスを作成すると、デフォルトで 2 つの eRDMA ネットワークインターフェースが設定されます。追加の操作は不要です。

ネットワークインターフェースの状態が PORT_ACTIVE であること

次のコマンドを実行し、すべてのポートの状態が PORT_ACTIVE であることを確認します。

ibv_devinfo | grep state

チェックに失敗した場合は、ifconfig コマンドを実行して、対応するイーサネットデバイスが UP 状態であることを確認します。

2 つのネットワークインターフェースが異なる NUMA ノードにアタッチされていること

次のコマンドを実行し、戻り値が 01 であることを確認してください:

cat /sys/class/infiniband/erdma_0/device/numa_node
cat /sys/class/infiniband/erdma_1/device/numa_node

両方のコマンドが 0 を返した場合、セカンダリネットワークインターフェースが間違った NUMA ノードにアタッチされています。これを修正するには、次の手順に従います:

  1. セカンダリネットワークインターフェースをデタッチします。

  2. AttachNetworkInterface API を呼び出してセカンダリネットワークインターフェースを再アタッチし、NetworkCardIndex パラメーターを 1 に設定します。

ジャンボフレームが有効になっていること

次のコマンドを実行し、ネットワークインターフェースの MTU が 4096 であることを確認します。

ibv_devinfo | grep mtu

MTU が 4096 でない場合は、ジャンボフレームを有効にしてから、再度確認してください。

MPCC 輻輳制御アルゴリズムが有効になっていること

次のコマンドを実行して、輻輳制御アルゴリズムを確認します。

eadm conf -d erdma_0 -t cc
eadm conf -d erdma_1 -t cc

eRDMA ドライバー 1.5.6 以降のバージョンでは、デフォルトで MPCC アルゴリズムが使用されます。

そうでない場合は、次のコマンドを実行して有効にしてください。

eadm conf -d erdma_0 -t cc -v 4
eadm conf -d erdma_1 -t cc -v 4

eRDMA ネットワークインターフェースに IP アドレスの競合が存在しないこと

show_gids コマンドを実行し、eRDMA ネットワークインターフェースの IP アドレスが一意であることを確認します。

この問題は、ACK に Terway ネットワークプラグインを使用している場合によく発生します。この問題が発生した場合は、「Terway ホワイトリスト設定」をご参照ください。

NCCL

NCCL トポロジファイルを指定する (ecs.ebmgn9g、ecs.ebmgn9gc、ecs.ebmgn9ge インスタンスタイプでのみ必須)

トポロジーファイル(l20n.xml)を、/root/l20n.xml などのインスタンス上のローカルパスに保存します。

NCCL タスクを開始する前に、次の環境変数を設定します。

export NCCL_GRAPH_FILE=/root/l20n.xml

トポロジファイルのダウンロード URL:

  • パブリックダウンロード URL:l20n.xml

  • 内部ネットワークダウンロードアドレス:l20n.xml

GPU

GPU ACS を無効にして P2P コミュニケーションを改善する (ecs.ebmgn9g、ecs.ebmgn9gc、ecs.ebmgn9ge インスタンスタイプでのみ)

次のコマンドを実行して ACS の状態を確認します。

lspci -vvv | grep ACSCtl

SrcValid- が表示された場合、ACS は無効になっており、操作は不要です。

SrcValid+ が表示された場合、次のスクリプトを実行して手動で ACS を無効にしてください。

for BDF in $(lspci -d "*:*:*" | awk '{print $1}'); do
  sudo setpci -v -s ${BDF} ECAP_ACS+0x6.w > /dev/null 2>&1
  if [ $? -ne 0 ]; then
    continue
  fi
  sudo setpci -v -s ${BDF} ECAP_ACS+0x6.w=0000
done

関連ドキュメント

  • エンタープライズレベルの Elastic Compute Service (ECS) インスタンスで eRDMA を設定し、ビジネスネットワークを変更することなく、超低レイテンシー、高スループット、かつ伸縮性のある RDMA ネットワークサービスを実現します。詳細については、「エンタープライズレベルのインスタンスで eRDMA を有効にする」をご参照ください。

  • コンテナ内で大規模なデータ転送と高性能なネットワーク通信を必要とするアプリケーションの場合、eRDMA をコンテナ (Docker) 環境に統合できます。これにより、コンテナ化されたアプリケーションは OS カーネルをバイパスしてホストの物理 eRDMA デバイスに直接アクセスでき、より高速なデータ転送と効率的な通信が可能になります。詳細については、「コンテナ (Docker) で eRDMA を有効にする」をご参照ください。

  • eRDMA を監視または診断し、そのリアルタイムステータスを追跡するには、「eRDMA の監視と診断」をご参照ください。