Todos os produtos
Search
Central de documentação

Elastic Compute Service:Enable eRDMA on GPU instances

Última atualização: Aug 25, 2026

Após anexar uma Elastic RDMA Interface (ERI) a uma instância GPU, as instâncias GPU na mesma VPC usam passthrough de RDMA para acelerar a interconectividade. O eRDMA aprimora o RDMA tradicional ao oferecer transferência de dados mais eficiente, melhorar a comunicação entre instâncias GPU e reduzir o tempo de processamento de tarefas. Este tópico explica como ativar o eRDMA em uma instância GPU.

Limitações

Item

Descrição

Tipo de instância

A Elastic RDMA Interface é compatível com os seguintes tipos de instância:

  • gn8is, ebmgn8is, gn8v, ebmgn8v

  • gn9g, gn9gc, ebmgn9g, ebmgn9gc, ebmgn9ge

Imagem

Use uma das seguintes imagens:

  • (Recomendado) Alibaba Cloud Linux 3

  • Alibaba Cloud Linux 4

  • CentOS 8.5/8,4/7,9

  • Ubuntu 24.04/22,04/20,04/18,04

Número de Elastic RDMA Interfaces

  • As instâncias das famílias gn8is, gn8v, gn9g e gn9gc suportam apenas uma Elastic RDMA Interface.

  • As ECS Bare Metal Instances ebmgn8is, ebmgn8v, ebmgn9g, ebmgn9gc e ebmgn9ge suportam duas Elastic RDMA Interfaces.

Limitações de rede

  • Uma Elastic Network Interface não suporta endereços IPv6 quando a Elastic RDMA Interface está ativada.

  • A comunicação Elastic RDMA entre duas instâncias não pode passar por componentes de rede intermediários, como o Server Load Balancer (SLB).

Procedimento

Para usar o eRDMA em uma instância compatível, dois requisitos devem ser atendidos: a pilha de software eRDMA deve estar instalada e uma Elastic Network Interface (ENI) com a Elastic RDMA Interface (ERI) ativada deve estar anexada.

Configurar o eRDMA durante a criação da instância

  1. Acesse a página Custom Launch no console ECS.

  2. Crie uma instância GPU compatível com ERI.

    Ao criar a instância, observe as configurações a seguir. Para obter informações sobre outros parâmetros, consulte Create an instance by using the wizard.

    • Instance Type: Selecione um tipo de instância compatível com ERI. Para mais informações, consulte Limits. Este tópico usa ebmgn8is como exemplo.

    • Images: Ao selecionar uma imagem pública, as opções Auto-install GPU Driver e Install eRDMA Software Stack são selecionadas por padrão. Após a criação da instância, o sistema instala automaticamente o driver da GPU, CUDA, cuDNN e a pilha de software eRDMA.

      Neste exemplo, o sistema operacional é Alibaba Cloud Linux 3.2104 LTS 64-bit e a versão do driver da GPU é CUDA Version 12.4.1 / Driver Version 550.127.08 / CUDNN Version 9.2.0.82.

      Observações sobre a instalação da pilha de software eRDMA

      • Na aba Public Image, se você selecionar um sistema operacional e versão de imagem compatíveis com Install eRDMA Software Stack (ou seja, a opção Install eRDMA Software Stack está disponível), mas não marcar essa opção Install eRDMA Software Stack, poderá instalar a pilha de software eRDMA by using a script or by manual installation após a criação da instância.

      • Na aba Public Image, se você escolher um sistema operacional e versão de imagem incompatíveis com Install eRDMA Software Stack (impedindo a seleção da opção Install eRDMA Software Stack), não será possível ativar e usar a interface de rede eRDMA após a criação da instância, nem por script nem por instalação manual.

      • Ainda na aba Public Image, desmarcar a opção Install eRDMA Software Stack torna disponíveis mais sistemas operacionais e versões de imagem.

    • (Opcional) Jumbo Frames: Se a instância selecionada suportar jumbo frames, ative esse recurso para melhorar o desempenho da comunicação eRDMA.

      A ativação de jumbo frames permite definir uma unidade máxima de transmissão (MTU) maior. Ao usar NCCL e o protocolo de baixa latência LL128 para comunicação, a MTU deve ser 8500. Sem os jumbo frames ativados, a MTU deve ser 1400. Uma configuração incorreta de MTU pode causar problemas de consistência de dados.
    • ENIs: Ao criar uma instância GPU e configurar ENIs na página Bandwidths & Security Groups do assistente de configuração, uma NIC primária e uma NIC secundária compatíveis com eRDMA são criadas por padrão. O sistema seleciona automaticamente a opção eRDMA Interface para as NICs primária e secundária.

      Nota
      • Não é possível ativar ou desativar a capacidade ERI para uma única ENI enquanto a instância GPU estiver em execução.

      • As duas NICs com ERI ativado são vinculadas automaticamente a canais diferentes. Não é necessário especificar os canais manualmente.

      • A NIC primária não pode ser desanexada da instância GPU. Ela é criada e liberada junto com a instância.

  3. Acesse a página de detalhes da instância criada e clique em na aba ENIs para visualizar o tipo de NIC da instância.

    Se o tipo da NIC primária ou de uma ENI secundária incluir "Elastic RDMA Interface", a ENI tem o ERI ativado.

Configurar o eRDMA para uma instância GPU existente

  1. Faça login no console ECS.

  2. Localize a instância desejada, acesse sua página de detalhes e clique em na aba ENIs para verificar se o ERI está ativado.

    Caso uma ENI tenha o ERI ativado, a coluna ENI Type exibirá Primary ENI (Elastic RDMA Interface) ou Secondary ENI (Elastic RDMA Interface).

    • Se o ERI já estiver ativado, pule as etapas seguintes.

    • Caso o ERI não esteja ativado, siga estas etapas para configurar o eRDMA na NIC primária ou em uma ENI secundária.

  3. Configure o eRDMA para a NIC primária ou para uma ENI secundária.

    Nota
    • Para instance types that support jumbo frames, você pode enable jumbo frames para melhorar o desempenho da comunicação eRDMA.

      A ativação de jumbo frames permite definir uma MTU maior. Ao usar NCCL e o protocolo de baixa latência LL128 para comunicação, a MTU deve ser 8500. Sem os jumbo frames ativados, a MTU deve ser 1400. Uma configuração incorreta de MTU pode causar problemas de consistência de dados.
    • Se você não selecionou a opção eRDMA Interface para a NIC primária ou secundária durante a criação da instância GPU, poderá criar e ativar duas ENIs secundárias com ERI ativado após a criação da instância.

    • Caso não tenha selecionado a opção eRDMA Interface para uma das duas NICs (primária ou secundária) ao criar a instância GPU, será possível criar e ativar apenas mais uma ENI secundária com ERI ativado após a criação da instância.

    • Configurar o eRDMA para a NIC primária

      Use a OpenAPI para configurar o eRDMA na NIC primária. Para mais informações, consulte ModifyNetworkInterfaceAttribute.

      Parâmetros principais

      Parâmetro

      Descrição

      RegionId

      ID da região onde a NIC primária está localizada.

      NetworkInterfaceId

      ID da NIC primária.

      NetworkInterfaceTrafficMode

      Modo de comunicação da NIC primária. Valores válidos:

      • Standard: Modo de comunicação TCP.

      • HighPerformance: Modo de comunicação RDMA com a Elastic RDMA Interface (ERI) ativada.

      Nesta etapa, defina o valor como HighPerformance.

    • Configurar o eRDMA para uma ENI secundária

      Ao criar e anexar uma ENI com ERI ativado pelo console, não é possível vinculá-la a um canal específico. Essa limitação pode reduzir pela metade a largura de banda total se você usar duas ENIs com ERI ativado. Por isso, recomendamos anexar ENIs com ERI ativado usando a OpenAPI.

      OpenAPI (recommended)

      • Método 1: Criar e anexar uma ENI com ERI ativado

        Cada instância GPU suporta no máximo duas NICs eRDMA. Vincule as NICs a canais diferentes usando o parâmetro NetworkCardIndex.

        1. Crie uma ENI com ERI ativado.

          Para mais informações, consulte CreateNetworkInterface.

          Parâmetros principais

          Parâmetro

          Descrição

          RegionId

          ID da região onde você deseja criar a ENI.

          VSwitchId

          O sistema seleciona o endereço IP privado da ENI dentre os endereços IP disponíveis no bloco CIDR do vSwitch.

          SecurityGroupId

          ID do grupo de segurança da ENI. O grupo de segurança e a ENI devem estar na mesma VPC.

          NetworkInterfaceTrafficMode

          Modo de comunicação da ENI. Valores válidos:

          • Standard: Modo de comunicação TCP.

          • HighPerformance: Modo de comunicação RDMA com a Elastic RDMA Interface (ERI) ativada.

          Nesta etapa, defina o valor como HighPerformance.

          Se a chamada for bem-sucedida, anote o ID da ENI retornado, que corresponde ao valor de NetworkInterfaceId.

        2. Anexe a ENI com ERI ativado.

          Para mais informações, consulte AttachNetworkInterface.

          Parâmetros principais

          Parâmetro

          Descrição

          RegionId

          ID da região onde a instância está localizada.

          NetworkInterfaceId

          ID da ENI com ERI ativado que você criou.

          InstanceId

          ID da instância.

          NetworkCardIndex

          Índice da NIC física à qual você vinculará a ENI.

          Ao anexar uma ENI com ERI ativado a uma instância, especifique manualmente um canal (índice da NIC física). Os valores válidos são 0 e 1. Se anexar duas ENIs com ERI ativado, atribua um valor diferente a cada ENI.

          Nota

          Para atingir a largura de banda de rede máxima, vincule as duas NICs com ERI ativado a canais diferentes.

          Após anexar a ENI com sucesso, visualize-a na aba ENIs da página de detalhes da instância. O tipo da ENI anexada será exibido como Secondary ENI (Elastic RDMA Interface) e seu status como InUse.

      • Método 2: Modificar os atributos de uma ENI existente

        Nota

        Este método não suporta a especificação do parâmetro NetworkCardIndex (índice da NIC física). Se usar este método para configurar uma ENI secundária quando duas NICs com ERI ativado estiverem anexadas, talvez você não atinja a largura de banda máxima.

        Para mais informações, consulte ModifyNetworkInterfaceAttribute.

        Parâmetros principais

        Parâmetro

        Descrição

        RegionId

        ID da região onde a ENI secundária está localizada.

        NetworkInterfaceId

        ID da ENI secundária.

        NetworkInterfaceTrafficMode

        Modo de comunicação da ENI secundária. Valores válidos:

        • Standard: Modo de comunicação TCP.

        • HighPerformance: Modo de comunicação RDMA com a Elastic RDMA Interface (ERI) ativada.

        Nesta etapa, defina o valor como HighPerformance.

        Se a chamada de API for bem-sucedida, visualize a ENI com ERI ativado anexada na aba ENIs da página de detalhes da instância.

      Console

      1. Crie uma ENI secundária.

        Para mais informações, consulte Create and use an elastic network interface. Ao criar a Elastic Network Interface secundária, ative a chave eRDMA Interface. A ERI compartilha as configurações desta Elastic Network Interface secundária, como seu endereço IP e as regras do grupo de segurança aplicadas. Na página Create Elastic Network Interface, defina Elastic Network Interface Name, VPC, vSwitch e Security Group. Em seguida, ative a chave Add Elastic RDMA Interface, configure o endereço IP privado primário e os endereços IP privados secundários conforme necessário e clique em Create Network Interface.

      2. Anexe a ENI secundária à instância GPU.

        Para mais informações, consulte Attach a secondary ENI.

        Nota

        É possível anexar no máximo duas ENIs secundárias com ERI ativado a uma única instância.

        Para desanexar uma ENI secundária com ERI ativado de uma instância GPU, pare a instância primeiro. Para mais informações, consulte Stop an instance.

      3. Conecte-se à instância GPU.

        Para mais informações, consulte Connect to a Linux instance by using Workbench.

      4. Execute o comando ifconfig para verificar se a ENI recém-anexada está disponível.

        Caso a saída do comando não mostre a ENI secundária recém-anexada, configure-a. Para mais informações, consulte Configure a secondary ENI on a Linux instance. Caso contrário, pule esta etapa.

        Nota

        Algumas imagens podem não reconhecer automaticamente uma ENI secundária recém-anexada. Nesses casos, configure a ENI secundária de dentro da instância.

  4. (Opcional) Instale a pilha de software eRDMA na instância.

    Se você não selecionou a opção Install eRDMA Software Stack ao escolher a imagem pública, instale a pilha de software eRDMA manualmente ou via script para ativar a capacidade da Elastic RDMA Interface (ERI).

    • Instalação por script

      Após a criação da instância GPU, use o script de exemplo abaixo para instalar separadamente a pilha de software eRDMA, o driver da GPU, CUDA e cuDNN.

      #!/bin/sh
      #Please input version 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"
      #using .run to install 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
    • Instalação manual

      Após criar uma instância GPU, instale manualmente o driver OFED, o driver eRDMA e o driver da GPU e, em seguida, carregue o componente de service nv_peer_mem. Siga estas etapas:

      1. Conecte-se à instância GPU.

        Para mais informações, consulte Connect to a Linux instance by using Workbench.

      2. Instale o driver OFED.

        1. Execute o comando a seguir para instalar os pacotes necessários.

          Alibaba Cloud Linux 4

          sudo yum install -y perl-File-Find perl-File-Copy perl-sigtrap perl-File-Compare
          sudo yum install --enablerepo=alinux4-devel libdb-devel valgrind-devel -y
          sudo yum install -y libselinux-devel autoconf iptables-devel patch elfutils-devel rpm-build kernel-devel-$(uname -r) libmnl-devel flex bison automake lsof

          Alibaba Cloud Linux 3

          sudo yum install rpm-build flex iptables-devel systemd-devel gdb-headless elfutils-devel python3-Cython bison numactl-devel libmnl-devel libnl3-devel libdb-devel libselinux-devel perl-generators elfutils-libelf-devel kernel-rpm-macros valgrind-devel cmake lsof -y

          CentOS 8.5/8,4/7,9

          • CentOS 8.5/8,4

            sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/centos8/python3-Cython-0.29.32-3.16.x86_64.rpm
            sudo yum install python3-Cython-0.29.32-3.16.x86_64.rpm -y
            cyum 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. Execute o comando a seguir para baixar o arquivo de configuração do pacote OFED.

          Alibaba Cloud Linux 4

          sudo echo '%rhel 10' > /usr/lib/rpm/macros.d/macros.alinux-compat
          sudo wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/MLNX_OFED_SRC-26.04-0.8.5.0.tgz
          sudo tar -xf MLNX_OFED_SRC-26.04-0.8.5.0.tgz && cd MLNX_OFED_SRC-26.04-0.8.5.0/
          sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/alibaba_cloud4/4/ofed_alibaba_cloud4.conf
          sudo rm -rf SRPMS/mlnx-ofa_kernel-26.04-OFED.26.04.0.8.5.1.src.rpm
          sudo wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/mlnx-ofa_kernel-26.04-OFED.26.04.0.8.5.1.egs.1.src.rpm  -O SRPMS/mlnx-ofa_kernel-26.04-OFED.26.04.0.8.5.1.egs.1.src.rpm

          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
            sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/MLNX_OFED_SRC-5.4-3.5.8.0.tgz
            sudo tar -xvf MLNX_OFED_SRC-5.4-3.5.8.0.tgz && cd MLNX_OFED_SRC-5.4-3.5.8.0/
            sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/alibaba_cloud3/3/ofed_alibaba_cloud3.conf
            sudo rm -rf SRPMS/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.src.rpm
            sudo wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.egs.1.src.rpm  -O SRPMS/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.egs.1.src.rpm
          • CentOS 7,9

            sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/MLNX_OFED_SRC-5.4-3.5.8.0.tgz
            sudo tar -xvf MLNX_OFED_SRC-5.4-3.5.8.0.tgz && cd MLNX_OFED_SRC-5.4-3.5.8.0/
            sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/alibaba_cloud3/3/ofed_alibaba_cloud3.conf
            sudo rm -rf SRPMS/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.src.rpm
            sudo wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.egs.1.src.rpm  -O SRPMS/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.egs.1.src.rpm

          Ubuntu 24.04/22,04/20,04/18,04

          • Ubuntu 24.04/22,04/20,04

            sudo wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/deb/MLNX_OFED_SRC-debian-24.10-3.2.5.0.tgz
            sudo tar -xvf MLNX_OFED_SRC-debian-24.10-3.2.5.0.tgz && cd MLNX_OFED_SRC-24.10-3.2.5.0 && curl -O http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/deb/ofed_debian.conf
            sudo rm -rf SOURCES/mlnx-ofed-kernel_24.10.OFED.24.10.3.2.5.1.orig.tar.gz
            sudo wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/deb/mlnx-ofed-kernel_24.10.egs.1.OFED.24.10.3.2.5.1.orig.tar.gz -O SOURCES/mlnx-ofed-kernel_24.10.egs.1.OFED.24.10.3.2.5.1.orig.tar.gz
          • Ubuntu 18,04

            sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/MLNX_OFED_SRC-debian-5.4-3.6.8.1.tgz
            sudo tar -xvf MLNX_OFED_SRC-debian-5.4-3.6.8.1.tgz && cd MLNX_OFED_SRC-5.4-3.6.8.1 && curl -O http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/deb/ofed_debian.conf
            sudo rm -rf SOURCES/mlnx-ofed-kernel_5.4.orig.tar.gz
            sudo wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/deb/mlnx-ofed-kernel_5.4.egs.orig.tar.gz -O SOURCES/mlnx-ofed-kernel_5.4.egs.orig.tar.gz
        3. Execute o comando correspondente ao seu SO para instalar o driver OFED.

          Alibaba Cloud Linux 4

          sudo ./install.pl --config ./ofed_alibaba_cloud4.conf --distro RHEL8 --without-depcheck --without-dkms
          sudo dracut -f

          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

            sudo ./install.pl --config ./ofed_alibaba_cloud3.conf --distro RHEL8 
          • CentOS 7,9

            sudo ./install.pl --config ./ofed_alibaba_cloud3.conf --distro RHEL7 

          Ubuntu 24.04/22,04/20,04/18,04

          Substitua ${VERSION_ID} pela sua versão do Ubuntu, como 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
          sudo update-initramfs -u
        4. Execute o comando a seguir para verificar se o diretório /usr/src/ofa_kernel/ existe.

          • Se o diretório existir, prossiga para a próxima etapa.

            ls /usr/src/ofa_kernel/`uname -r`
          • Caso o diretório não exista, execute o comando a seguir para criar um link simbólico e depois prossiga para a próxima etapa.

            sudo ln -s /usr/src/ofa_kernel/default /usr/src/ofa_kernel/`uname -r`
        5. Reinicie a instância.

          Após instalar o driver OFED, reinicie a instância para que o novo módulo do kernel entre em vigor. Para mais informações, consulte Restart an instance.

      3. Instale o driver eRDMA.

        1. Baixe e instale o driver eRDMA.

          sudo wget http://mirrors.cloud.aliyuncs.com/erdma/env_setup.sh
          sudo bash env_setup.sh --egs
        2. Execute o comando a seguir para verificar a instalação do driver eRDMA usando a ferramenta eadm:

          sudo eadm ver

          Uma saída semelhante à seguinte indica uma instalação bem-sucedida.

          [root@xxx ~]# sudo eadm ver
          Query kernel driver version: 0.2.35
          Nota

          Este tópico usa a versão 0.2.35 do driver como exemplo. Se o comando retornar um erro "command not found" ou falhar ao executar, reinstale o driver eRDMA.

      4. Instale o driver da GPU.

        Para mais informações, consulte Manually install a Tesla driver (Linux) on a GPU instance.

      5. Carregue o componente de service nv_peer_mem.

        • (Recomendado) Driver da GPU 470.xx.xx ou posterior

          Para ativar o GPUDirect RDMA, carregue o componente de service nv_peer_mem. Recomendamos o uso do driver da GPU 470.xx.xx ou posterior, pois a NVIDIA inclui esse componente nessas versões. Execute o comando a seguir para carregar o módulo nvidia_peermem.

          sudo modprobe nvidia_peermem
          # You can run lsmod|grep nvidia to check whether nvidia_peermem is loaded.
          Nota

          Se a instância for reiniciada, recarregue o módulo nvidia_peermem.

        • Drivers da GPU anteriores a 470.xx.xx

          Baixe e instale manualmente o componente de service. O código a seguir mostra como baixar, compilar e instalar o componente.

          sudo git clone https://github.com/Mellanox/nv_peer_memory.git
          # Compile and install nv_peer_mem.ko.
          cd nv_peer_memory && make
          cp nv_peer_mem.ko /lib/modules/$(uname -r)/kernel/drivers/video
          sudo depmod -a
          sudo modprobe nv_peer_mem
          # You can run lsmod|grep nv_peer_mem to check the result.
          sudo service nv_peer_mem start
  1. Verifique a largura de banda.

    1. Conecte-se à instância GPU.

      Para mais informações, consulte Connect to a Linux instance by using Workbench.

    2. Execute o comando a seguir para verificar se as duas NICs eRDMA estão funcionando conforme o esperado.

      sudo ibv_devinfo

      Por padrão, o script de instalação do driver eRDMA instala a versão mais recente do driver. Se precisar instalar uma versão anterior do driver eRDMA, abra um ticket para obter assistência.

      Este tópico usa a versão 0.2.37 ou posterior do driver eRDMA como exemplo. A saída a seguir mostra dois dispositivos eRDMA funcionando corretamente. Um dispositivo eRDMA está funcionando corretamente se o state de sua porta for PORT_ACTIVE.

      [ecs-xxx...xxx4gnd0hZ ~]$ sudo ibv_devinfo
      hca_id:	erdma_0
      	transport:			eRDMA (0)
      	fw_ver:				0.2.0
      	node_guid:			0216:3eff:fe36:1eb4
      	sys_image_guid:			0216:3eff:fe36:1eb4
      	vendor_id:			0x1ded
      	vendor_part_id:			4223
      	hw_ver:				0x0
      	phys_port_cnt:			1
      		port:	1
      			state:			PORT_ACTIVE (4)
      			max_mtu:		1024 (3)
      			active_mtu:		1024 (3)
      			sm_lid:			0
      			port_lid:		0
      			port_lmc:		0x00
      			link_layer:		Ethernet
      hca_id:	erdma_1
      	transport:			eRDMA (0)
      	fw_ver:				0.2.0
      	node_guid:			0216:3eff:fe43:9c2a
      	sys_image_guid:			0216:3eff:fe43:9c2a
      	vendor_id:			0x1ded
      	vendor_part_id:			4223
      	hw_ver:				0x0
      	phys_port_cnt:			1
      		port:	1
      			state:			PORT_ACTIVE (4)
      			max_mtu:		1024 (3)
      			active_mtu:		1024 (3)
      			sm_lid:			0
      			port_lid:		0
      			port_lmc:		0x00
      			link_layer:		Ethernet
      Nota

      Se o state da porta for invalid state, o dispositivo não está funcionando corretamente. Recomendamos verificar primeiro a configuração da ENI secundária. Por exemplo, execute o comando ifconfig para confirmar que cada NIC possui a configuração e o endereço IP corretos.

    3. Execute o comando a seguir para instalar a ferramenta perftest.

      sudo yum install perftest -y
    4. Execute os comandos a seguir para testar se a largura de banda da rede RDMA atende às expectativas de hardware.

      1. No servidor, execute o comando a seguir para ouvir solicitações de conexão do cliente.

        sudo ib_write_bw -d erdma_0 -F -q 16 --run_infinitely --report_gbits -p 18515
      2. No cliente, execute o comando a seguir para enviar solicitações de conexão e pacotes de dados.

        sudo ib_write_bw -d erdma_0 -F -q 16 --run_infinitely --report_gbits -p 18515 server_ip

        Neste comando, server_ip é o endereço IP privado da ENI com ERI ativado do servidor. Para encontrar esse endereço IP, consulte View IP addresses.

      Nota

      O benchmark perftest anterior usa uma NIC para comunicação. Se sua carga de trabalho exigir duas NICs para comunicação, inicie dois processos perftest. Em seguida, use o parâmetro -d para especificar uma NIC eRDMA para cada processo e o parâmetro -p para especificar portas de comunicação diferentes. Para mais informações, consulte Detalhes do perftest.

      Os resultados do teste incluem a largura de banda média. Uma saída semelhante à seguinte indica que a comunicação eRDMA está normal.

      Detalhes da saída do comando

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

Teste e verificação

Este tópico usa o nccl-tests como exemplo para demonstrar como testar e verificar o desempenho de instâncias GPU com eRDMA ativado. Para mais informações sobre o nccl-tests, consulte nccl-tests.

  1. Execute os comandos a seguir para instalar o NCCL.

    Compile e instale o NCCL a partir do código-fonte:

    Nota

    Você também pode baixar e instalar o pacote no site oficial do NVIDIA NCCL.

    Este exemplo instala o NCCL no diretório /usr/local/nccl. Especifique um caminho de instalação diferente conforme suas necessidades.

    # build nccl
    cd /root
    sudo git clone https://github.com/NVIDIA/nccl.git
    cd nccl/
    sudo make -j src.lib PREFIX=/usr/local/nccl
    sudo make install PREFIX=/usr/local/nccl
  2. Execute os comandos a seguir para verificar se o NCCL e a biblioteca libnccl.so estão instalados.

    # Check for NCCL
    ls /usr/local/nccl
    # Check for the libnccl.so library
    ls /usr/local/nccl/lib
  3. Execute os comandos a seguir para instalar o Open MPI e os compiladores necessários.

    sudo wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.3.tar.gz
    sudo tar -xzf openmpi-4.1.3.tar.gz
    cd openmpi-4.1.3
    sudo ./configure --prefix=/usr/local/openmpi
    sudo make -j && make install
  4. Execute os comandos a seguir para definir as variáveis de ambiente.

    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

    Os comandos acima usam os seguintes caminhos de exemplo: NCCL_HOME aponta para o caminho de instalação do NCCL (/usr/local/nccl), CUDA_HOME aponta para o caminho de instalação do CUDA (/usr/local/cuda) e MPI_HOME aponta para o caminho de instalação do Open MPI (/usr/local/openmpi). Substitua esses caminhos pelos seus caminhos de instalação reais.

    Após terminar de editar o comando, edite o arquivo ~/.bashrc na instância para definir PATH e LD_LIBRARY_PATH. Em seguida, execute o comando a seguir para que as configurações das variáveis de ambiente entrem em vigor.

    source ~/.bashrc
  5. Execute os comandos a seguir para baixar e compilar o código de teste.

    sudo git clone https://github.com/NVIDIA/nccl-tests
    cd nccl-tests/
    sudo make MPI=1 CUDA_HOME=/usr/local/cuda MPI_HOME=/usr/local/openmpi
  6. Execute os comandos a seguir para configurar o acesso SSH sem senha entre as instâncias.

    Para configurar o acesso SSH sem senha, gere uma chave pública no host1 e copie-a para o host2.

    # On host1
    ssh-keygen
    ssh-copy-id -i ~/.ssh/id_rsa.pub ${host2}
    ssh root@${host2}   # On host1, run this command to test the connection. A successful login without a password prompt confirms that the setup is complete.
  7. Execute o comando a seguir para testar o desempenho all-reduce do NCCL.

    # Replace host1 and host2 with the IP addresses of your instances.
    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

Verificação da configuração do eRDMA

Após concluir a configuração básica do eRDMA, use a lista de verificação a seguir para validar seu ambiente e garantir que o eRDMA funcione corretamente.

Esta seção aplica-se aos seguintes tipos de instância elastic bare metal GPU compatíveis com eRDMA: ebmgn9g, ebmgn9gc, ebmgn9ge, ebmgn8is e ebmgn8v.

Script de verificação com um clique (Recomendado)

Use este script de um clique para verificar rapidamente os seguintes itens:

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

Se todas as verificações exibirem PASS, o ambiente está configurado corretamente. Caso precise de saída formatada em JSON, adicione o parâmetro --json.

Nota

Atualmente, este script não verifica se o GPU ACS está desativado. Confirme isso manualmente. Você também deve especificar manualmente a variável de ambiente NCCL_GRAPH_FILE durante a execução do NCCL.

Categoria

Item

Método de verificação

Descrição

Configuração da interface de rede

A instância possui duas interfaces de rede eRDMA

Execute o comando ibv_devices e verifique se a saída contém os dispositivos erdma_0 e erdma_1.

Ao criar uma instância pelo console, duas interfaces de rede eRDMA são configuradas por padrão. Nenhuma ação adicional é necessária.

O estado da interface de rede é PORT_ACTIVE

Execute o comando a seguir para verificar se o status de todas as portas é PORT_ACTIVE:

ibv_devinfo | grep state

Se a verificação falhar, execute o comando ifconfig para confirmar que o dispositivo Ethernet correspondente à interface de rede eRDMA está no estado UP.

As duas interfaces de rede estão anexadas a nós NUMA diferentes

Execute o comando a seguir e verifique se os valores retornados são 0 e 1, respectivamente:

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

Se ambos os comandos retornarem 0, a interface de rede secundária está anexada a um nó NUMA incorreto. Para corrigir isso, siga estas etapas:

  1. Desanexe a interface de rede secundária.

  2. Chame AttachNetworkInterface para reanexar a interface de rede secundária e defina o parâmetro NetworkCardIndex como 1.

Jumbo frames estão ativados

Execute o comando a seguir e verifique se a MTU das interfaces de rede é 4096:

ibv_devinfo | grep mtu

Se a MTU não for 4096, enable jumbo frames e execute a verificação novamente.

O algoritmo de controle de congestionamento MPCC está ativado

Execute os comandos a seguir para verificar o algoritmo de controle de congestionamento:

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

O driver eRDMA 1.5.6 e posteriores usam o algoritmo MPCC por padrão.

Se o MPCC não estiver ativado, execute os comandos a seguir para ativá-lo manualmente:

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

Não há conflitos de endereço IP nas interfaces de rede eRDMA

Execute o comando show_gids para verificar se cada interface de rede eRDMA possui um endereço IP único.

Esse problema ocorre frequentemente ao usar o plug-in de rede ACK Terway. Se encontrar esse problema, consulte Configuração da lista de permissões do Terway para soluções.

NCCL

Especificar o arquivo de topologia do NCCL
(necessário apenas para os tipos de instância ebmgn9g, ebmgn9gc e ebmgn9ge)















Salve o arquivo de topologia (l20n.xml) em um caminho local na instância, como /root/l20n.xml.

Antes de iniciar uma tarefa NCCL, defina a seguinte variável de ambiente:

export NCCL_GRAPH_FILE=/root/l20n.xml

URLs de download do arquivo de topologia:

GPU

Desativar o GPU ACS (PCI Access Control Services) para melhorar o desempenho da comunicação P2P
(necessário apenas para os tipos de instância ebmgn9g, ebmgn9gc e ebmgn9ge)















Execute o comando a seguir para verificar o status do ACS:

lspci -vvv | grep ACSCtl

Se SrcValid- for exibido, significa que o ACS está desativado e nenhuma ação é necessária.

Se SrcValid+ for exibido, indica que o ACS não está desligado. Execute o script a seguir para desligá-lo manualmente:

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

Referências

  • Configure o eRDMA em uma instância de nível empresarial para obter um service de rede RDMA elástico, de alto throughput e latência ultrabaixa, sem alterar sua topologia de rede. Para mais informações, consulte Enable eRDMA on enterprise-level instances.

  • Para aplicações que exigem transferências de dados em grande escala e comunicação de rede de alto desempenho em contêineres, integre o eRDMA a um ambiente de contêiner (docker). Esse processo permite que aplicações em contêiner contornem o kernel do SO e acessem diretamente os dispositivos eRDMA do host, possibilitando transferência de dados mais rápida e comunicação mais eficiente. Para mais informações, consulte Enable eRDMA in a container (Docker).

  • Para monitorar e diagnosticar o eRDMA, consulte Monitor and diagnose eRDMA.