Todos os produtos
Search
Central de documentação

Elastic GPU Service:Improve network performance with an eRDMA image

Última atualização: Jun 27, 2026

A integração do eRDMA em um ambiente de contêiner (docker) permite que as aplicações ignorem o kernel do sistema operacional e acessem diretamente os dispositivos físicos de eRDMA do host. Isso acelera a transferência de dados e a comunicação, sendo ideal para aplicações conteinerizadas que exigem transferência de dados em grande escala e rede de alto desempenho. Este tópico descreve como usar uma imagem de contêiner eRDMA para configurar rapidamente o eRDMA em uma instância acelerada por gpu.

Nota

Se seus serviços exigirem recursos de rede RDMA em grande escala, anexe uma interface elástica RDMA (ERI) a um tipo de instância acelerada por gpu compatível. Para mais informações, consulte Visão geral do eRDMA.

Antes de começar

Antes de configurar a imagem de contêiner eRDMA em uma instância acelerada por gpu, obtenha seus detalhes. Conheça os tipos de instância acelerada por gpu suportados antes de criar a instância e verifique o endereço da imagem antes de baixá-la.

  1. Faça login no Console do Container Registry.

  2. No painel de navegação à esquerda, clique em Artifact Center.

  3. Na caixa de pesquisa Repository Name, insira erdma e selecione a imagem desejada egs/erdma.

    A imagem de contêiner eRDMA é atualizada aproximadamente a cada três meses. A tabela a seguir fornece detalhes sobre a imagem.

    Nome da imagem

    Informações da versão

    Endereço da imagem

    Instâncias suportadas

    Benefícios

    eRDMA

    • Python: 3.10.12

    • CUDA: 12.4.1

    • cuDNN: 9.1.0.70

    • NCCL: 2.21.5

    • Imagem base: Ubuntu 22.04

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

    A imagem de contêiner eRDMA suporta todas as instâncias aceleradas por gpu de 8ª geração, como ebmgn8is e gn8is.

    Nota

    Para mais informações sobre instâncias, consulte Famílias de instâncias otimizadas para computação com gpu.

    • Acesse a rede eRDMA da Alibaba Cloud diretamente de um contêiner.

    • Tenha uma experiência pronta para uso com eRDMA, drivers e CUDA compatíveis.

    eRDMA

    • Python: 3.10.12

    • CUDA: 12.1.1

    • cuDNN: 8.9.0.131

    • NCCL: 2.17.1

    • Imagem base: Ubuntu 22.04

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

Procedimento

Após instalar o docker em uma instância acelerada por gpu e ativar o eRDMA no ambiente docker, acesse diretamente os dispositivos eRDMA de dentro de um contêiner. Este procedimento usa o Ubuntu 20.04 como exemplo.

  1. Crie uma instância acelerada por gpu e configure o eRDMA.

    Para mais informações, consulte Ativar o eRDMA em uma instância acelerada por gpu.

    Recomendamos criar uma instância acelerada por gpu com uma placa de rede eRDMA no console ECS e selecionar as opções Install GPU Driver e Install eRDMA Software Stack.

    Nota

    Após a criação da instância acelerada por gpu, o sistema instala automaticamente o driver Tesla, CUDA, a biblioteca cuDNN e a pilha de software eRDMA. Esse processo é mais rápido do que a instalação manual.

    Na seção Image, selecione Ubuntu 20.04 64-bit. A instalação do driver da gpu leva aproximadamente de 10 a 20 minutos. A instalação estende o tempo de inicialização da instância e inclui uma reinicialização automática.

  2. Conecte-se à instância acelerada por gpu.

    Para instruções detalhadas, consulte Conectar-se a uma instância Linux usando o Workbench.

  3. Execute os comandos a seguir para instalar o docker na instância acelerada por gpu com Ubuntu.

    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. Verifique a instalação do docker com o comando a seguir.

    docker -v
  5. Instale o pacote NVIDIA Container Toolkit executando os comandos abaixo.

    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. Ative a inicialização automática do docker e reinicie o serviço docker.

    sudo systemctl enable docker
    sudo systemctl restart docker
  7. Baixe a imagem de contêiner eRDMA com o comando a seguir.

    sudo docker pull egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/erdma:cuda12.1.1-cudnn8-ubuntu22.04
  8. Inicie o contêiner eRDMA executando o comando abaixo.

     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

Verificar a configuração

Este exemplo utiliza duas instâncias aceleradas por gpu, denominadas host1 e host2. Um ambiente docker está instalado e um contêiner eRDMA está em execução com sucesso em cada instância.

  1. Nos contêineres do host1 e do host2, respectivamente, verifique se o adaptador de rede eRDMA funciona corretamente.

    1. Insira o ambiente do contêiner com o comando a seguir.

      sudo docker exec -it erdma bash
    2. Verifique os dispositivos de rede eRDMA dentro do contêiner.

      ibv_devinfo

      A saída mostra o estado de ambos os dispositivos de rede eRDMA como PORT_ACTIVE, indicando funcionamento correto.

      root@xxx:~/# ibv_devinfo
      hca_id: erdma_0
      	transport:			eRDMA (0)
      	fw_ver:				0.2.0
      	node_guid:			0216:3eff:fe2c:6aad
      	sys_image_guid:			0216:3eff:fe2c:6aad
      	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:fe16:58b6
      	sys_image_guid:			0216:3eff:fe16:58b6
      	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
  2. Execute o nccl-test nos contêineres do host1 e do host2.

    1. Baixe o código do nccl-tests com o comando a seguir.

      git clone https://github.com/NVIDIA/nccl-tests.git
    2. Compile o nccl-tests executando os comandos abaixo.

      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. Estabeleça uma conexão sem senha entre o host1 e o host2 e configure o SSH para conectar pela porta 12345.

      Após configurar a conexão SSH, teste a conexão sem senha entre os dois contêineres executando o comando ssh -p 12345 ${host2} de dentro do contêiner.

      1. No contêiner do host1, gere uma chave SSH e copie a chave pública para o contêiner do host2.

        ssh-keygen
        ssh-copy-id -i ~/.ssh/id_rsa.pub ${host2}
      2. No contêiner do host2, instale o serviço SSH e defina a porta de escuta do servidor SSH como 12345.

        apt-get update && apt-get install ssh -y
        mkdir /run/sshd
        /usr/sbin/sshd -p 12345 
      3. No contêiner do host1, teste a conexão sem senha com o contêiner do host2.

        ssh root@${host2} -p 12345
    4. No contêiner do host1, execute o teste 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

      A saída será semelhante à seguinte:

      iZ2zei2cgn3427b89ubkfvZ:2732:2765 [7] NCCL INFO comm 0x562feba84040 rank 7 nranks 16 cudaDev 7 busId f1000 commId 0x89cad9815cd2a14b - Init COMPLETE
      iZ2zei2cgn3427b89ubkfvZ:2728:2770 [5] NCCL INFO comm 0x55d55c96d340 rank 5 nranks 16 cudaDev 5 busId ea000 commId 0x89cad9815cd2a14b - Init COMPLETE
      #
      #                                                              out-of-place                       in-place
      #       size         count      type   redop    root     time   algbw   busbw #wrong     time   algbw   busbw #wrong
      #        (B)    (elements)                               (us)  (GB/s)  (GB/s)            (us)  (GB/s)  (GB/s)
        1073741824     268435456     float     sum      -1   158061    6.79   12.74      0   156821    6.85   12.84      0
      iZ2zeiwklcnbixy8g0r8grZ:4068:4068 [2] NCCL INFO comm 0x563b4653f3c0 rank 10 nranks 16 cudaDev 2 busId 71000 - Destroy COMPLETE
      iZ2zei2cgn3427b89ubkfvZ:2724:2724 [2] NCCL INFO comm 0x55c35266a000 rank 2 nranks 16 cudaDev 2 busId 71000 - Destroy COMPLETE
      iZ2zeiwklcnbixy8g0r8grZ:4071:4071 [5] NCCL INFO comm 0x563a86fc7210 rank 13 nranks 16 cudaDev 5 busId ea000 - Destroy COMPLETE
      iZ2zeiwklcnbixy8g0r8grZ:4067:4067 [1] NCCL INFO comm 0x559741cc9290 rank 9 nranks 16 cudaDev 1 busId 6a000 - Destroy COMPLETE
      iZ2zeiwklcnbixy8g0r8grZ:4075:4075 [7] NCCL INFO comm 0x55d60e86e170 rank 15 nranks 16 cudaDev 7 busId f1000 - Destroy COMPLETE
      iZ2zei2cgn3427b89ubkfvZ:2723:2723 [1] NCCL INFO comm 0x5596ca34a0b0 rank 1 nranks 16 cudaDev 1 busId 6a000 - Destroy COMPLETE
      iZ2zei2cgn3427b89ubkfvZ:2728:2728 [5] NCCL INFO comm 0x55d55c96d340 rank 5 nranks 16 cudaDev 5 busId ea000 - Destroy COMPLETE
      iZ2zeiwklcnbixy8g0r8grZ:4072:4072 [6] NCCL INFO comm 0x5609dddc4170 rank 14 nranks 16 cudaDev 6 busId f0000 - Destroy COMPLETE
      iZ2zei2cgn3427b89ubkfvZ:2725:2725 [3] NCCL INFO comm 0x564411727220 rank 3 nranks 16 cudaDev 3 busId 72000 - Destroy COMPLETE
      iZ2zei2cgn3427b89ubkfvZ:2726:2726 [4] NCCL INFO comm 0x557b9ed258a0 rank 4 nranks 16 cudaDev 4 busId e9000 - Destroy COMPLETE
      iZ2zeiwklcnbixy8g0r8grZ:4069:4069 [3] NCCL INFO comm 0x55b879b75000 rank 11 nranks 16 cudaDev 3 busId 72000 - Destroy COMPLETE
      iZ2zeiwklcnbixy8g0r8grZ:4070:4070 [4] NCCL INFO comm 0x557580c1a5f0 rank 12 nranks 16 cudaDev 4 busId e9000 - Destroy COMPLETE
      iZ2zei2cgn3427b89ubkfvZ:2730:2730 [6] NCCL INFO comm 0x562b87361c0 rank 6 nranks 16 cudaDev 6 busId f0000 - Destroy COMPLETE
      iZ2zeiwklcnbixy8g0r8grZ:4066:4066 [0] NCCL INFO comm 0x558bf49799a0 rank 8 nranks 16 cudaDev 0 busId 69000 - Destroy COMPLETE
      iZ2zei2cgn3427b89ubkfvZ:2722:2722 [0] NCCL INFO comm 0x5589a9d7a980 rank 0 nranks 16 cudaDev 0 busId 69000 - Destroy COMPLETE
      iZ2zei2cgn3427b89ubkfvZ:2732:2732 [7] NCCL INFO comm 0x562feba84040 rank 7 nranks 16 cudaDev 7 busId f1000 - Destroy COMPLETE
      # Out of bounds values : 0 OK
      # Avg bus bandwidth    : 12.7876
      #
  3. No host (fora do contêiner), monitore o tráfego na rede eRDMA com o comando a seguir.

    eadm stat -d erdma_0 -l

    A saída indica tráfego na rede eRDMA.

    root@xxxZ:~# eadm stat -d erdma_0 -l
    Monitoring erdma_0...    (press CTRL-C to stop)
     14:53:00  rx:      5.50 GiB/s 4537261 p/s      tx:      5.49 GiB/s 4538210 p/s

Tópicos relacionados

  • Para ativar a interconectividade acelerada por RDMA entre instâncias na mesma virtual private cloud (VPC), configure o eRDMA em instâncias aceleradas por gpu. Para obter instruções, consulte Ativar o eRDMA em instâncias aceleradas por gpu.

  • Caso seu cenário envolva transferências de dados em grande escala e rede de alto desempenho, configure manualmente um ambiente docker em uma instância acelerada por gpu e ative o eRDMA para melhorar a eficiência. Para obter instruções, consulte Ativar o eRDMA em um contêiner docker.