Todos los productos
Search
Centro de documentos

Elastic Compute Service:Enable eRDMA on GPU instances

Última actualización: Sep 18, 2026

Después de conectar una interfaz Elastic RDMA (ERI) a una instancia GPU, las instancias GPU dentro de la misma VPC utilizan el paso directo de RDMA para acelerar la interconectividad. eRDMA mejora el RDMA tradicional al ofrecer una transferencia de datos más eficiente, optimizar la comunicación entre instancias GPU y reducir el tiempo de procesamiento de tareas. En este tema se explica cómo habilitar eRDMA en una instancia GPU.

Límites

Elemento

Descripción

Tipo de instancia

La interfaz Elastic RDMA es compatible con los siguientes tipos de instancia:

  • gn8is, ebmgn8is, gn8v, ebmgn8v

  • gn9g, gn9gc, ebmgn9g, ebmgn9gc, ebmgn9ge

Imagen

Utilice una de las siguientes imágenes:

  • (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 interfaces Elastic RDMA

  • Las instancias de las familias gn8is, gn8v, gn9g y gn9gc admiten únicamente una interfaz Elastic RDMA.

  • Las ECS Bare Metal Instances ebmgn8is, ebmgn8v, ebmgn9g, ebmgn9gc y ebmgn9ge admiten dos interfaces Elastic RDMA.

Límites de red

  • Una interfaz de red elástica no admite direcciones IPv6 si la interfaz Elastic RDMA está habilitada.

  • La comunicación mediante Elastic RDMA entre dos instancias no puede pasar por componentes de red intermedios, como Server Load Balancer (SLB).

Procedimiento

Para utilizar eRDMA en una instancia compatible, se deben cumplir dos requisitos: instalar la pila de software de eRDMA y conectar una interfaz de red elástica (ENI) con la interfaz Elastic RDMA (ERI) habilitada.

Configurar eRDMA durante la creación de la instancia

  1. Vaya a la página Custom Launch en la consola de ECS.

  2. Cree una instancia GPU que admita ERI.

    Durante la creación de la instancia, preste atención a la siguiente configuración. Para obtener información sobre otros parámetros, consulte Create an instance by using the wizard.

    • Instance Type: seleccione un tipo de instancia compatible con ERI. Para obtener más información, consulte Limits. En este tema se utiliza ebmgn8is como ejemplo.

    • Images: al seleccionar una imagen pública, las opciones Auto-install GPU Driver y Install eRDMA Software Stack se seleccionan de forma predeterminada. Una vez creada la instancia, el sistema instala automáticamente el controlador de GPU, CUDA, cuDNN y la pila de software de eRDMA.

      En este ejemplo, el sistema operativo es Alibaba Cloud Linux 3.2104 LTS 64-bit y la versión del controlador de GPU es CUDA Version 12.4.1 / Driver Version 550.127.08 / CUDNN Version 9.2.0.82.

      Notas sobre la instalación de la pila de software de eRDMA

      • En la pestaña Public Image, si selecciona un sistema operativo y una versión de imagen compatibles con Install eRDMA Software Stack (es decir, la opción Install eRDMA Software Stack Install eRDMA Software Stack se puede seleccionar), pero no marca dicha opción, puede instalar la pila de software de eRDMA by using a script or by manual installation después de crear la instancia.

      • En la pestaña Public Image, si selecciona un sistema operativo y una versión de imagen que no admiten Install eRDMA Software Stack (lo que significa que no puede seleccionar la opción Install eRDMA Software Stack), no podrá habilitar ni utilizar la interfaz de red eRDMA tras crear la instancia, ya sea mediante un script o mediante una instalación manual.

      • En la pestaña Public Image, si desmarca la opción Install eRDMA Software Stack, habrá más sistemas operativos y versiones de imagen disponibles.

    • (Opcional) Jumbo Frames: si la instancia seleccionada admite jumbo frames, habilite esta función para mejorar el rendimiento de la comunicación eRDMA.

      Habilitar tramas jumbo permite establecer una unidad máxima de transmisión (MTU) mayor. Cuando utilice NCCL y el protocolo de baja latencia LL128 para la comunicación, la MTU debe ser 8500. Si las tramas jumbo no están habilitadas, la MTU debe ser 1400. Una configuración incorrecta de la MTU puede provocar problemas de coherencia en los datos.
    • ENIs: cuando crea una instancia GPU y configura las ENI en la página Bandwidths & Security Groups del asistente de configuración, se crean de forma predeterminada una NIC principal y una NIC secundaria compatibles con eRDMA. El sistema selecciona automáticamente la opción eRDMA Interface para ambas tarjetas de red.

      Nota
      • No es posible habilitar ni deshabilitar la capacidad ERI de una sola ENI mientras la instancia GPU se está ejecutando.

      • Las dos tarjetas de red con ERI habilitado se vinculan automáticamente a canales distintos. No necesita especificar los canales manualmente.

      • La NIC principal no se puede desconectar de la instancia GPU. Se crea y se libera junto con la instancia.

  3. Vaya a la página de detalles de la instancia creada y haga clic en la pestaña ENIs para consultar el tipo de tarjeta de red de la instancia.

    Si el tipo de la NIC principal o de una ENI secundaria incluye "Elastic RDMA Interface", significa que la ENI tiene ERI habilitado.

Configurar eRDMA en una instancia GPU existente

  1. Inicie sesión en la consola de ECS.

  2. Busque la instancia de destino, vaya a su página de detalles y haga clic en la pestaña ENIs para comprobar si ERI está habilitado.

    Si una ENI tiene ERI habilitado, la columna ENI Type mostrará Primary ENI (Elastic RDMA Interface) o Secondary ENI (Elastic RDMA Interface).

    • Si ERI ya está habilitado, omita los pasos siguientes.

    • Si ERI no está habilitado, siga estos pasos para configurar eRDMA en la NIC principal o en una ENI secundaria.

  3. Configure eRDMA en la NIC principal o en una ENI secundaria.

    Nota
    • Para instance types that support jumbo frames, puede enable jumbo frames con el fin de mejorar el rendimiento de la comunicación eRDMA.

      Habilitar tramas jumbo permite establecer una MTU mayor. Cuando utilice NCCL y el protocolo de baja latencia LL128 para la comunicación, la MTU debe ser 8500. Si las tramas jumbo no están habilitadas, la MTU debe ser 1400. Una configuración incorrecta de la MTU puede provocar problemas de coherencia en los datos.
    • Si no seleccionó la opción eRDMA Interface para la NIC principal ni para la secundaria al crear la instancia GPU, puede crear y habilitar dos ENI secundarias con ERI después de crear la instancia.

    • Si no seleccionó la opción eRDMA Interface para una de las dos tarjetas de red (principal o secundaria) al crear la instancia GPU, solo podrá crear y habilitar una ENI secundaria adicional con ERI después de crear la instancia.

    • Configurar eRDMA en la NIC principal

      Utilice openapi para configurar eRDMA en la NIC principal. Para obtener más información, consulte ModifyNetworkInterfaceAttribute.

      Parámetros clave

      Parámetro

      Descripción

      RegionId

      El identificador de la región donde se encuentra la NIC principal.

      NetworkInterfaceId

      El identificador de la NIC principal.

      NetworkInterfaceTrafficMode

      El modo de comunicación de la NIC principal. Valores válidos:

      • Standard: modo de comunicación TCP.

      • HighPerformance: modo de comunicación RDMA con la interfaz Elastic RDMA (ERI) habilitada.

      En este paso, establezca el valor en HighPerformance.

    • Configurar eRDMA en una ENI secundaria

      Cuando crea y conecta una ENI con ERI habilitado desde la consola, no es posible vincularla a un canal específico. Esta limitación puede reducir a la mitad el ancho de banda total si utiliza dos ENI con ERI habilitado. Por lo tanto, se recomienda conectar las ENI con ERI habilitado mediante openapi.

      OpenAPI (recomendado)

      • Método 1: crear y conectar una ENI con ERI habilitado

        Cada instancia GPU admite un máximo de dos tarjetas de red eRDMA. Debe vincularlas a canales distintos mediante el parámetro NetworkCardIndex.

        1. Cree una ENI con ERI habilitado.

          Para obtener más información, consulte CreateNetworkInterface.

          Parámetros clave

          Parámetro

          Descripción

          RegionId

          El identificador de la región donde desea crear la ENI.

          VSwitchId

          El sistema selecciona la dirección IP privada de la ENI entre las direcciones IP disponibles dentro del bloque CIDR del vSwitch.

          SecurityGroupId

          El identificador del security group de la ENI. El security group y la ENI deben estar en la misma VPC.

          NetworkInterfaceTrafficMode

          El modo de comunicación de la ENI. Valores válidos:

          • Standard: modo de comunicación TCP.

          • HighPerformance: modo de comunicación RDMA con la interfaz Elastic RDMA (ERI) habilitada.

          En este paso, establezca el valor en HighPerformance.

          Si la llamada se ejecuta correctamente, registre el identificador de ENI devuelto, que corresponde al valor de NetworkInterfaceId.

        2. Conecte la ENI con ERI habilitado.

          Para obtener más información, consulte AttachNetworkInterface.

          Parámetros clave

          Parámetro

          Descripción

          RegionId

          El identificador de la región donde se encuentra la instancia.

          NetworkInterfaceId

          El identificador de la ENI con ERI habilitado que creó.

          InstanceId

          El identificador de la instancia.

          NetworkCardIndex

          El índice de la NIC física a la que vincula la ENI.

          Cuando conecta una ENI con ERI habilitado a una instancia, debe especificar manualmente un canal (índice de la NIC física). Los valores válidos son 0 y 1. Si conecta dos ENI con ERI habilitado, asigne un valor distinto a cada una.

          Nota

          Para alcanzar el ancho de banda de red máximo, debe vincular las dos tarjetas de red con ERI habilitado a canales distintos.

          Una vez conectada la ENI correctamente, podrá consultarla en la pestaña ENIs de la página de detalles de la instancia. El tipo de la ENI conectada se muestra como Secondary ENI (Elastic RDMA Interface) y su estado es InUse.

      • Método 2: modificar los atributos de una ENI existente

        Nota

        Este método no permite especificar el parámetro NetworkCardIndex (el índice de la NIC física). Si utiliza este método para configurar una ENI secundaria cuando hay dos tarjetas de red con ERI habilitado conectadas, es posible que no alcance el ancho de banda máximo.

        Para obtener más información, consulte ModifyNetworkInterfaceAttribute.

        Parámetros clave

        Parámetro

        Descripción

        RegionId

        El identificador de la región donde se encuentra la ENI secundaria.

        NetworkInterfaceId

        El identificador de la ENI secundaria.

        NetworkInterfaceTrafficMode

        El modo de comunicación de la ENI secundaria. Valores válidos:

        • Standard: modo de comunicación TCP.

        • HighPerformance: modo de comunicación RDMA con la interfaz Elastic RDMA (ERI) habilitada.

        En este paso, establezca el valor en HighPerformance.

        Si la llamada a la API se ejecuta correctamente, podrá consultar la ENI con ERI habilitado que conectó en la pestaña ENIs de la página de detalles de la instancia.

      Consola

      1. Cree una ENI secundaria.

        Para obtener más información, consulte Create and use an elastic network interface. Al crear la interfaz de red elástica secundaria, active el interruptor eRDMA Interface. La ERI comparte la configuración de esta interfaz de red elástica secundaria, como su dirección IP y las reglas del security group que se le aplican. En la página Create Elastic Network Interface, configure los campos Elastic Network Interface Name, VPC, vSwitch y Security Group. A continuación, active el interruptor Add Elastic RDMA Interface, configure la dirección IP privada principal y las direcciones IP privadas secundarias según sus necesidades, y haga clic en Create Network Interface.

      2. Conecte la ENI secundaria a la instancia GPU.

        Para obtener más información, consulte Attach a secondary ENI.

        Nota

        Puede conectar un máximo de dos ENI secundarias con ERI habilitado a una sola instancia.

        Para desconectar una ENI secundaria con ERI habilitado de una instancia GPU, primero debe detener la instancia. Para obtener más información, consulte Stop an instance.

      3. Conéctese a la instancia GPU.

        Para obtener más información, consulte Connect to a Linux instance by using Workbench.

      4. Ejecute el comando ifconfig para comprobar si la ENI recién conectada está disponible.

        Si la salida del comando no muestra la ENI secundaria recién conectada, debe configurarla. Para obtener más información, consulte Configure a secondary ENI on a Linux instance. De lo contrario, omita este paso.

        Nota

        Es posible que algunas imágenes no reconozcan automáticamente una ENI secundaria recién conectada. En esos casos, debe configurar la ENI secundaria desde el interior de la instancia.

  4. (Opcional) Instale la pila de software de eRDMA en la instancia.

    Si no seleccionó la opción Install eRDMA Software Stack al elegir la imagen pública, debe instalar la pila de software de eRDMA de forma manual o mediante un script para habilitar la capacidad de la interfaz Elastic RDMA (ERI).

    • Instalación mediante script

      Una vez creada la instancia GPU, puede utilizar el siguiente script de ejemplo para instalar por separado la pila de software de eRDMA, el controlador de GPU, CUDA y 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
    • Instalación manual

      Después de crear una instancia GPU, puede instalar manualmente el controlador OFED, el controlador eRDMA y el controlador de GPU; luego, cargue el componente de servicio nv_peer_mem. Siga estos pasos:

      1. Conéctese a la instancia GPU.

        Para obtener más información, consulte Connect to a Linux instance by using Workbench.

      2. Instale el controlador OFED.

        1. Ejecute el siguiente comando para instalar los paquetes necesarios.

          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. Ejecute el siguiente comando para descargar el archivo de configuración del paquete 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. Ejecute el comando correspondiente a su sistema operativo para instalar el controlador 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

          Reemplace ${VERSION_ID} con su versión de Ubuntu, por ejemplo, 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. Ejecute el siguiente comando para comprobar si existe el directorio /usr/src/ofa_kernel/.

          • Si el directorio existe, continúe con el siguiente paso.

            ls /usr/src/ofa_kernel/`uname -r`
          • Si el directorio no existe, ejecute el siguiente comando para crear un enlace simbólico y, a continuación, continúe con el siguiente paso.

            sudo ln -s /usr/src/ofa_kernel/default /usr/src/ofa_kernel/`uname -r`
        5. Reinicie la instancia.

          Después de instalar el controlador OFED, reinicie la instancia para que el nuevo módulo del kernel surta efecto. Para obtener más información, consulte Restart an instance.

      3. Instale el controlador eRDMA.

        1. Descargue e instale el controlador eRDMA.

          sudo wget http://mirrors.cloud.aliyuncs.com/erdma/env_setup.sh
          sudo bash env_setup.sh --egs
        2. Ejecute el siguiente comando para verificar la instalación del controlador eRDMA mediante la herramienta eadm:

          sudo eadm ver

          Una salida similar a la siguiente indica que la instalación se completó correctamente.

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

          En este tema se utiliza la versión 0.2.35 del controlador como ejemplo. Si el comando devuelve un error de "command not found" o no se ejecuta, vuelva a instalar el controlador eRDMA.

      4. Instale el controlador de GPU.

        Para obtener más información, consulte Manually install a Tesla driver (Linux) on a GPU instance.

      5. Cargue el componente de servicio nv_peer_mem.

        • (Recomendado) Controlador de GPU 470.xx.xx o posterior

          Para habilitar GPUDirect RDMA, debe cargar el componente de servicio nv_peer_mem. Se recomienda utilizar el controlador de GPU 470.xx.xx o posterior, ya que NVIDIA incluye este componente en dichas versiones. Puede ejecutar el siguiente comando para cargar el módulo nvidia_peermem.

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

          Si se reinicia la instancia, debe volver a cargar el módulo nvidia_peermem.

        • Controladores de GPU anteriores a 470.xx.xx

          Debe descargar e instalar manualmente el componente de servicio. El siguiente código muestra cómo descargar, compilar e instalar el 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. Compruebe el ancho de banda.

    1. Conéctese a la instancia GPU.

      Para obtener más información, consulte Connect to a Linux instance by using Workbench.

    2. Ejecute el siguiente comando para comprobar si las dos NIC eRDMA funcionan correctamente.

      sudo ibv_devinfo

      De forma predeterminada, el script de instalación del controlador eRDMA instala la versión más reciente. Si necesita instalar una versión anterior del controlador eRDMA, envíe un ticket para solicitar asistencia.

      Este tema toma como ejemplo la versión 0.2.37 o posterior del controlador eRDMA. La siguiente salida muestra dos dispositivos eRDMA que funcionan correctamente. Un dispositivo eRDMA funciona bien cuando el state de su puerto es 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

      Si el state del puerto es invalid state, el dispositivo no funciona correctamente. Se recomienda revisar primero la configuración de la ENI secundaria. Por ejemplo, ejecute el comando ifconfig para comprobar que cada NIC tenga la configuración y la dirección IP correctas.

    3. Ejecute el siguiente comando para instalar la herramienta perftest.

      sudo yum install perftest -y
    4. Ejecute los siguientes comandos para probar si el ancho de banda de la red RDMA cumple con lo esperado por el hardware.

      1. En el servidor, ejecute el siguiente comando para escuchar las solicitudes de conexión del cliente.

        sudo ib_write_bw -d erdma_0 -F -q 16 --run_infinitely --report_gbits -p 18515
      2. En el cliente, ejecute el siguiente comando para enviar las solicitudes de conexión y los paquetes de datos.

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

        En este comando, server_ip es la dirección IP privada de la ENI con ERI habilitado del servidor. Para consultar esta dirección IP, consulte View IP addresses.

      Nota

      La prueba de rendimiento de perftest anterior utiliza una sola NIC para la comunicación. Si su carga de trabajo requiere dos NIC, debe iniciar dos procesos de perftest. Luego, use el parámetro -d para especificar una NIC eRDMA distinta para cada proceso y el parámetro -p para indicar puertos de comunicación diferentes. Para obtener más información, consulte Detalles de perftest.

      Los resultados de la prueba incluyen el ancho de banda promedio. Una salida similar a la siguiente indica que la comunicación eRDMA es normal.

      Detalles de la salida del 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

Prueba y verificación

Este tema utiliza nccl-tests como ejemplo para demostrar cómo probar y verificar el rendimiento de las instancias GPU con eRDMA habilitado. Para obtener más información sobre nccl-tests, consulte nccl-tests.

  1. Ejecute los siguientes comandos para instalar NCCL.

    Compile e instale NCCL desde el código fuente:

    Nota

    También puede descargar e instalar el paquete desde el sitio web oficial de NVIDIA NCCL.

    Este ejemplo instala NCCL en el directorio /usr/local/nccl. Puede especificar una ruta de instalación diferente según sus necesidades.

    # 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. Ejecute los siguientes comandos para comprobar que NCCL y la biblioteca libnccl.so estén instalados.

    # Check for NCCL
    ls /usr/local/nccl
    # Check for the libnccl.so library
    ls /usr/local/nccl/lib
  3. Ejecute los siguientes comandos para instalar Open MPI y los compiladores necesarios.

    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. Ejecute los siguientes comandos para establecer las variables de entorno.

    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

    Los comandos anteriores utilizan las siguientes rutas de ejemplo: NCCL_HOME apunta a la ruta de instalación de NCCL (/usr/local/nccl), CUDA_HOME apunta a la ruta de instalación de CUDA (/usr/local/cuda) y MPI_HOME apunta a la ruta de instalación de Open MPI (/usr/local/openmpi). Reemplace estas rutas por sus rutas de instalación reales.

    Una vez que termine de editar el comando, edite el archivo ~/.bashrc en la instancia para configurar PATH y LD_LIBRARY_PATH. Después, ejecute el siguiente comando para que la configuración de las variables de entorno surta efecto.

    source ~/.bashrc
  5. Ejecute los siguientes comandos para descargar y compilar el código de prueba.

    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. Ejecute los siguientes comandos para configurar el acceso SSH sin contraseña entre las instancias.

    Para configurar el acceso SSH sin contraseña, genere una clave pública en host1 y cópiela a 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. Ejecute el siguiente comando para probar el rendimiento de all-reduce de 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

Verificación de la configuración de eRDMA

Después de completar la configuración básica de eRDMA, utilice la siguiente lista de comprobación para verificar su entorno y asegurarse de que eRDMA funcione correctamente.

Esta sección aplica a los siguientes tipos de instancias bare metal elásticas GPU compatibles con eRDMA: ebmgn9g, ebmgn9gc, ebmgn9ge, ebmgn8is y ebmgn8v.

Script de comprobación con un solo clic (recomendado)

Utilice este script de un solo clic para verificar rápidamente los siguientes elementos:

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

Si todas las comprobaciones muestran PASS, el entorno está configurado correctamente. Si necesita una salida en formato JSON, agregue el parámetro --json.

Nota

Actualmente, este script no comprueba si el ACS de la GPU está deshabilitado. Debe confirmarlo manualmente. También debe especificar de forma manual la variable de entorno NCCL_GRAPH_FILE durante la ejecución de NCCL.

Categoría

Elemento

Método de verificación

Descripción

Configuración de la interfaz de red

La instancia tiene dos interfaces de red eRDMA

Ejecute el comando ibv_devices y compruebe que la salida contenga los dispositivos erdma_0 y erdma_1.

Cuando crea una instancia desde la consola, se configuran dos interfaces de red eRDMA de forma predeterminada. No se requiere ninguna acción adicional.

El estado de la interfaz de red es PORT_ACTIVE

Ejecute el siguiente comando para comprobar que el estado de todos los puertos sea PORT_ACTIVE:

ibv_devinfo | grep state

Si la comprobación falla, ejecute el comando ifconfig para confirmar que el dispositivo Ethernet correspondiente a la interfaz de red eRDMA esté en estado UP.

Las dos interfaces de red están conectadas a nodos NUMA distintos

Ejecute el siguiente comando y compruebe que los valores devueltos sean 0 y 1, respectivamente:

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

Si ambos comandos devuelven 0, la interfaz de red secundaria está conectada a un nodo NUMA incorrecto. Para solucionarlo, siga estos pasos:

  1. Desconecte la interfaz de red secundaria.

  2. Llame a AttachNetworkInterface para volver a conectar la interfaz de red secundaria y establezca el parámetro NetworkCardIndex en 1.

Las tramas jumbo están habilitadas

Ejecute el siguiente comando y compruebe que la MTU de las interfaces de red sea 4096:

ibv_devinfo | grep mtu

Si la MTU no es 4096, enable jumbo frames y vuelva a ejecutar la comprobación.

El algoritmo de control de congestión MPCC está habilitado

Ejecute los siguientes comandos para comprobar el algoritmo de control de congestión:

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

El controlador eRDMA 1.5.6 y versiones posteriores utilizan el algoritmo MPCC de forma predeterminada.

Si MPCC no está habilitado, ejecute los siguientes comandos para habilitarlo manualmente:

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

No existen conflictos de direcciones IP en las interfaces de red eRDMA

Ejecute el comando show_gids para comprobar que cada interfaz de red eRDMA tenga una dirección IP única.

Este problema suele presentarse cuando se usa el complemento de red Terway de ACK. Si lo encuentra, consulte Configuración de la lista de permitidos de Terway para conocer las soluciones.

NCCL

Especifique el archivo de topología de NCCL
(obligatorio solo para los tipos de instancia ebmgn9g, ebmgn9gc y ebmgn9ge)















Guarde el archivo de topología (l20n.xml) en una ruta local de la instancia, como /root/l20n.xml.

Antes de iniciar una tarea de NCCL, establezca la siguiente variable de entorno:

export NCCL_GRAPH_FILE=/root/l20n.xml

URL de descarga del archivo de topología:

GPU

Deshabilite el ACS de la GPU (PCI Access Control Services) para mejorar el rendimiento de la comunicación P2P
(obligatorio solo para los tipos de instancia ebmgn9g, ebmgn9gc y ebmgn9ge)















Ejecute el siguiente comando para comprobar el estado del ACS:

lspci -vvv | grep ACSCtl

Si se muestra SrcValid-, significa que el ACS está deshabilitado y no se requiere ninguna acción.

Si se muestra SrcValid+, indica que el ACS no está desactivado. Ejecute el siguiente script para desactivarlo 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

Referencias

  • Configure eRDMA en una instancia de nivel empresarial para obtener un servicio de red RDMA elástico, de latencia ultrabaja y alto throughput, sin modificar su topología de red. Para obtener más información, consulte Enable eRDMA on enterprise-level instances.

  • Para aplicaciones que requieren transferencias de datos a gran escala y comunicación de red de alto rendimiento en contenedores, puede integrar eRDMA en un entorno de contenedores (docker). Este proceso permite que las aplicaciones en contenedores omitan el kernel del sistema operativo y accedan directamente a los dispositivos eRDMA del host, lo que agiliza la transferencia de datos y hace más eficiente la comunicación. Para obtener más información, consulte Enable eRDMA in a container (Docker).

  • Para supervisar y diagnosticar eRDMA, consulte Monitor and diagnose eRDMA.