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

Elastic GPU Service:eRDMAコンテナイメージを使用してeRDMAを設定し、ネットワークパフォーマンスを向上させる

最終更新日:Jan 02, 2025

Elastic Remote Direct Memory Access (eRDMA) は、Dockerコンテナーで使用できる高性能ネットワークテクノロジーで、コンテナーアプリケーションがカーネルをバイパスしてホスト上の物理eRDMAデバイスに直接アクセスできるようにします。 eRDMAは、データ転送と通信の効率を向上させ、コンテナでの大規模なデータ転送と高性能ネットワーク通信を伴うシナリオに適しています。 このトピックでは、eRDMAコンテナイメージを使用して、GPUアクセラレーションインスタンスでeRDMAを効率的に設定する方法について説明します。

説明

ビジネスで大規模なRDMAネットワークサービス機能が必要な場合は、elastic RDMAインターフェイス (ERI) を作成し、eRDMAをサポートするインスタンスタイプのGPUアクセラレーションインスタンスにアタッチできます。 詳細については、「概要」をご参照ください。

始める前に

便利な方法でGPUアクセラレーションインスタンスのコンテナイメージを構成するには、eRDMAコンテナイメージの詳細を取得する必要があります。 たとえば、GPU高速化インスタンスを作成する前に、コンテナイメージが使用可能なGPU高速化インスタンスタイプを決定し、コンテナイメージをプルする前にイメージアドレスを決定する必要があります。

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

  2. 左側のナビゲーションウィンドウで、[アーティファクトセンター] をクリックします。

  3. [リポジトリ名] 検索ボックスにerdmaと入力し、Enterキーを押します。 egs/erdmaコンテナーイメージを見つけてクリックします。

    画像は約3か月ごとに更新されます。 次の表に、eRDMAコンテナイメージの詳細を示します。

    イメージ名

    バージョン情報

    画像アドレス

    利用可能なGPU高速化インスタンス

    メリット

    eRDMA

    • Python: 3.10.12

    • CUDA: 12.4.1

    • cuDNN: 9.1.0.70

    • NCCL: 2.21.5

    • ベースイメージ: Ubuntu 22.04

    egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/erdma:cuda12.4.1-cudnn9-ubuntu22.04

    eRDMAコンテナイメージは、

    ebmgn8isやgn8isインスタンスなど、第8世代のGPUアクセラレーションインスタンス。

    説明

    GPU高速化インスタンスの詳細については、「GPU高速化コンピューティング最適化インスタンスファミリー (gn、ebm、sccシリーズ) 」をご参照ください。

    • コンテナーからAlibaba Cloud eRDMAネットワークに直接アクセスできます。

    • Alibaba Cloudは、既存の機能をサポートするために、一致するeRDMA、ドライバー、およびCUDAを提供しています。

    eRDMA

    • Python: 3.10.12

    • CUDA: 12.1.1

    • cuDNN: 8.9.0.131

    • NCCL: 2.17.1

    • ベースイメージ: Ubuntu 22.04

    egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/erdma:cuda12.1.1-cudnn8-ubuntu22.04

手順

GPU高速化インスタンスにDockerをインストールし、DockerコンテナでeRDMAを使用した後、コンテナからeRDMAデバイスに直接アクセスできます。 この例では、Ubuntu 20.04オペレーティングシステムが使用されています。

  1. GPU高速化インスタンスを作成し、eRDMAを設定します。

    操作の詳細については、「GPUアクセラレーションインスタンスでのeRDMAの設定」をご参照ください。

    Elastic Compute Service (ECS) コンソールに移動して、ERIsが設定されているGPU高速化インスタンスを作成することを推奨します。 操作を実行するときは、[GPUドライバーの自動インストール] および [eRDMAソフトウェアスタックの自動インストール] を選択します。

    説明

    GPU高速化インスタンスを作成すると、システムは自動的にTeslaドライバー、CUDA、cuDNNライブラリ、およびeRDMAソフトウェアスタックをインストールします。 この方法は、手動インストールよりも高速です。

    Dingtalk_20241203101142.jpg

  2. GPU高速化インスタンスに接続します。

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

  3. 次のコマンドを実行して、GPU高速化UbuntuインスタンスにDockerをインストールします。

    sudo apt-get update
    sudo apt-get -y install ca-certificates curl
    
    sudo install -m 0755 -d /etc/apt/keyrings
    sudo curl -fsSL http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
    sudo chmod a+r /etc/apt/keyrings/docker.asc
    
    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu \
      $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
    sudo apt-get update
    sudo apt-get install -y docker-ce docker-ce-cli containerd.io
  4. 次のコマンドを実行して、Dockerがインストールされているかどうかを確認します。

    docker -v
  5. 次のコマンドを実行して、nvidia-container-toolkitソフトウェアパッケージをインストールします。

    curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
      && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
        sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
        sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
    sudo apt-get update
    sudo apt-get install -y nvidia-container-toolkit
  6. 次のコマンドを順番に実行して、システム起動時にDockerを起動し、Dockerサービスを再起動します。

    sudo systemctl enable docker
    sudo systemctl restart docker
  7. 次のコマンドを実行して、eRDMAコンテナイメージをプルします。

    sudo docker pull egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/erdma:cuda12.1.1-cudnn8-ubuntu22.04
  8. 次のコマンドを実行して、eRDMAコンテナを実行します。

     sudo docker run -d -t --network=host --gpus all \
      --privileged \
      --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 \
      --name erdma \
      -v /root:/root \
      egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/erdma:cuda12.1.1-cudnn8-ubuntu22.04

eRDMAのテストと検証

このセクションでは、host1とhost2という名前の2つのGPUアクセラレーションインスタンスでeRDMAをテストする方法の例を示します。 この例では、Dockerはインスタンスにインストールされ、eRDMAコンテナはDockerで期待どおりに実行されます。

  1. host1とhost2のコンテナ内のeRDMAデバイスが期待どおりに動作するかどうかを個別に確認します。

    1. 次のコマンドを実行して、コンテナにアクセスします。

      sudo docker exec -it erdma bash
    2. 次のコマンドを実行して、コンテナ内のeRDMAデバイスに関する情報を表示します。

      ibv_devinfo

      次の出力は、2つのeRDMAデバイスがPORT_ACTIVE状態であることを示しています。 これは、デバイスが期待どおりに動作することを示します。

      查看eRDMA网卡设备.jpg

  2. コンテナー内のhost1およびhost2のnccl-testファイルでテストコードを実行します。

    1. 次のコマンドを実行して、nccl-testファイル内のテストコードをダウンロードします。

      git clone https://github.com/NVIDIA/nccl-tests.git
    2. 次のコマンドを実行して、テストコードをコンパイルします。

      apt update
      apt install openmpi-bin libopenmpi-dev -y
      cd nccl-tests && make MPI=1 CUDA_HOME=/usr/local/cuda NCCL_HOME=/usr/local/cuda MPI_HOME=/usr/lib/x86_64-linux-gnu/openmpi
    3. host1とhost2の間にパスワードなしの接続を確立し、ポート12345でSSH接続を設定します。

      SSH接続が設定されるまで待ちます。 次に、コンテナーでssh -p 12345 ipコマンドを実行して、host1とhost2の間にパスワードなしで接続できるかどうかをテストします。

      1. host1のコンテナーで次のコマンドを実行してSSHキーを生成し、公開キーをhost2のコンテナーにコピーします。

        ssh-keygen
        ssh-copy-id -i ~/.ssh/id_rsa.pub ${host2}
      2. host2のコンテナーで次のコマンドを実行してSSHサービスをインストールし、SSHサーバーのリスニングポートを12345に設定します。

        apt-get update && apt-get install ssh -y
        mkdir /run/sshd
        /usr/sbin/sshd -p 12345 
      3. host1のコンテナで次のコマンドを実行して、host2のコンテナへのパスワードなしの接続が確立できるかどうかをテストします。

        ssh root@{host2}  -p 12345
    4. host1のコンテナでall_reduce_perfファイルのテストコードを実行します。

      mpirun --allow-run-as-root -np 16 -npernode 8 -H 172.16.15.237:8,172.16.15.235:8 \
       --bind-to none -mca btl_tcp_if_include eth0 \
       -x NCCL_SOCKET_IFNAME=eth0 \
       -x NCCL_IB_DISABLE=0 \
       -x NCCL_IB_GID_INDEX=1 \
       -x NCCL_NET_GDR_LEVEL=5 \
       -x NCCL_DEBUG=INFO \
       -x NCCL_ALGO=Ring -x NCCL_P2P_LEVEL=3 \
       -x LD_LIBRARY_PATH -x PATH \
       -mca plm_rsh_args "-p 12345" \
       /workspace/nccl-tests/build/all_reduce_perf -b 1G -e 1G -f 2 -g 1 -n 20

      次の図に出力を示します。

      测试记录.jpg

  3. 次のコマンドを実行して、トラフィックがホスト (コンテナの外部) のeRDMAネットワーク経由で送信されるかどうかを確認します。

    eadm stat -d erdma_0 -l

    次の出力は、トラフィックがeRDMAネットワークを介して送信されることを示します。

    监控流量.jpg

関連ドキュメント

  • 仮想プライベートクラウド (VPC) 内のGPUアクセラレーションインスタンスがRDMAに基づいて互いにすばやく接続できるように、GPUアクセラレーションインスタンスでeRDMAを設定できます。 操作の詳細については、「GPUアクセラレーションインスタンスでのeRDMAの設定」をご参照ください。

  • 大規模なデータ転送と高性能ネットワーク通信を伴うシナリオでは、データ転送と通信効率を向上させるために、GPUアクセラレーションインスタンスのDockerコンテナでeRDMAを使用する必要があります。 詳細については、「DockerコンテナーでのeRDMAの使用」をご参照ください。