Usar uma largura de banda da rede mais elevada

Esta página explica como criar instâncias A2, G2 e N1 que usam larguras de banda de rede mais elevadas. Para saber como usar larguras de banda de rede mais elevadas para outras séries de máquinas otimizadas para aceleradores, consulte o artigo Crie máquinas com GPU de largura de banda elevada.

Pode usar larguras de banda de rede mais elevadas, de 100 Gbps ou mais, para melhorar o desempenho das cargas de trabalho distribuídas executadas nas suas VMs de GPU. Estão disponíveis larguras de banda de rede mais elevadas para VMs A2, G2 e N1 com GPUs anexadas no Compute Engine da seguinte forma:

  • Para VMs de uso geral N1 com GPUs T4 e V100 anexadas, pode obter uma largura de banda de rede máxima de até 100 Gbps, com base na combinação de GPU e número de vCPUs.
  • Para VMs otimizadas para aceleradores A2 e G2, pode obter uma largura de banda de rede máxima de até 100 Gbps, com base no tipo de máquina.

Para rever as configurações ou os tipos de máquinas que suportam estas taxas de largura de banda de rede mais elevadas, consulte o artigo Larguras de banda de rede e GPUs.

Para ver informações gerais sobre a largura de banda da rede no Compute Engine, consulte o artigo Largura de banda da rede.

Vista geral

Para usar as larguras de banda de rede mais elevadas disponíveis para cada VM de GPU, conclua os seguintes passos recomendados:

  1. Crie a sua VM de GPU usando uma imagem do SO que suporte a NIC virtual da Google (gVNIC).
  2. Opcional: instale o Fast Socket. O Fast Socket melhora o desempenho da NCCL em redes de 100 Gbps ou superiores, reduzindo a contenção entre várias ligações TCP. Algumas imagens de VMs de aprendizagem avançada (DLVMs) têm o Fast Socket pré-instalado.

Use imagens de VMs de aprendizagem avançada

Pode criar as suas VMs com qualquer imagem suportada pela GPU do projeto Deep Learning VM Images. Todas as imagens DLVM suportadas pela GPU têm o controlador da GPU, o software de ML e o gVNIC pré-instalados. Para ver uma lista de imagens de DLVM, consulte o artigo Escolher uma imagem.

Se quiser usar o Fast Socket, pode escolher uma imagem de DLVM, como: tf-latest-gpu-debian-10 ou tf-latest-gpu-ubuntu-1804.

Crie VMs que usem larguras de banda de rede mais elevadas

Para larguras de banda de rede mais elevadas, recomenda-se que ative o NIC virtual da Google (gVNIC). Para mais informações, consulte o artigo Usar a NIC virtual da Google.

Para criar uma VM com GPUs anexadas e uma largura de banda de rede mais elevada, conclua o seguinte:

  1. Reveja a largura de banda da rede máxima disponível para cada tipo de máquina com GPUs anexadas.
  2. Crie a sua VM com GPU. Os exemplos seguintes mostram como criar instâncias A2 e N1 com VMs V100 anexadas.

    Nestes exemplos, as VMs são criadas através da CLI do Google Cloud. No entanto, também pode usar a Trusted Cloud console API Compute Engine para criar estas VMs. Para mais informações sobre como criar VMs de GPU, consulte o artigo Crie uma VM com GPUs anexadas.

    A2 (A100)

    Por exemplo, para criar uma VM com uma largura de banda máxima de 100 Gbps, com oito GPUs A100 anexadas e que usa a imagem DLVM, execute o seguinte comando:tf-latest-gpu

    gcloud compute instances create VM_NAME \
     --project=PROJECT_ID \
     --zone=ZONE \
     --machine-type=a2-highgpu-8g \
     --maintenance-policy=TERMINATE --restart-on-failure \
     --image-family=tf-latest-gpu \
     --image-project=deeplearning-platform-release \
     --boot-disk-size=200GB \
     --network-interface=nic-type=GVNIC \
     --metadata="install-nvidia-driver=True,proxy-mode=project_editors" \
     --scopes=https://www.googleapis.com/auth/cloud-platform
    

    Substitua o seguinte:

    • VM_NAME: o nome da sua VM
    • PROJECT_ID : o ID do seu projeto
    • ZONE: a zona da VM. Esta zona tem de suportar o tipo de GPU especificado. Para mais informações sobre as zonas, consulte a disponibilidade de regiões e zonas de GPUs.

    N1 (V100)

    Por exemplo, para criar uma VM com uma largura de banda máxima de 100 Gbps, oito GPUs V100 anexadas e que usa a imagem tf-latest-gpu DLVM, execute o seguinte comando:

    gcloud compute instances create VM_NAME \
     --project PROJECT_ID \
     --custom-cpu 96 \
     --custom-memory 624 \
     --image-project=deeplearning-platform-release \
     --image-family=tf-latest-gpu \
     --accelerator type=nvidia-tesla-v100,count=8 \
     --maintenance-policy TERMINATE \
     --metadata="install-nvidia-driver=True"  \
     --boot-disk-size 200GB \
     --network-interface=nic-type=GVNIC \
     --zone=ZONE
    
  3. Se não estiver a usar imagens de VMs de aprendizagem profunda suportadas por GPU ou o SO otimizado para contentores, instale os controladores de GPU. Para mais informações, consulte o artigo Instalar controladores de GPU.

  4. Opcional: na VM, instale o Fast Socket.

  5. Depois de configurar a VM, pode verificar a largura de banda da rede.

Instalação de tomadas rápidas

A NVIDIA Collective Communications Library (NCCL) é usada por frameworks de aprendizagem profunda, como o TensorFlow, o PyTorch e o Horovod, para a preparação com várias GPUs e vários nós.

O Fast Socket é um transporte de rede proprietário da Google para o NCCL. No Compute Engine, o Fast Socket melhora o desempenho do NCCL em redes de 100 Gbps, reduzindo a contenção entre várias ligações TCP. Para mais informações sobre como trabalhar com a NCCL, consulte o manual do utilizador da NCCL.

A avaliação atual mostra que o Fast Socket melhora o débito de redução total em 30% a 60%, consoante o tamanho da mensagem.

Para configurar um ambiente de Fast Socket, pode usar uma imagem de VM de aprendizagem profunda com o Fast Socket pré-instalado ou pode instalar manualmente o Fast Socket numa VM Linux. Para verificar se o Fast Socket está pré-instalado, consulte o artigo Verificar se o Fast Socket está ativado.

Antes de instalar o Fast Socket numa VM do Linux, tem de instalar o NCCL. Para ver instruções detalhadas, consulte a documentação da NVIDIA NCCL.

CentOS/RHEL

Para transferir e instalar o Fast Socket numa VM CentOS ou RHEL, conclua os seguintes passos:

  1. Adicione o repositório de pacotes e importe as chaves públicas.

    sudo tee /etc/yum.repos.d/google-fast-socket.repo << EOM
    [google-fast-socket]
    name=Fast Socket Transport for NCCL
    baseurl=https://packages.cloud.google.com/yum/repos/google-fast-socket
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
          https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    EOM
    
  2. Instale a tomada rápida.

    sudo yum install google-fast-socket
    
  3. Verifique se o Fast Socket está ativado.

SLES

Para transferir e instalar o Fast Socket numa VM SLES, conclua os seguintes passos:

  1. Adicione o repositório de pacotes.

    sudo zypper addrepo https://packages.cloud.google.com/yum/repos/google-fast-socket google-fast-socket
    
  2. Adicione chaves de repositório.

    sudo rpm --import https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    
  3. Instale a tomada rápida.

    sudo zypper install google-fast-socket
    
  4. Verifique se o Fast Socket está ativado.

Debian/Ubuntu

Para transferir e instalar o Fast Socket numa VM Debian ou Ubuntu, conclua os seguintes passos:

  1. Adicione o repositório de pacotes.

    echo "deb https://packages.cloud.google.com/apt google-fast-socket main" | sudo tee /etc/apt/sources.list.d/google-fast-socket.list
    
  2. Adicione chaves de repositório.

    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
    
  3. Instale a tomada rápida.

    sudo apt update && sudo apt install google-fast-socket
    
  4. Verifique se o Fast Socket está ativado.

Verificar se o Fast Socket está ativado

Na VM, conclua os seguintes passos:

  1. Localize o diretório inicial da NCCL.

    sudo ldconfig -p | grep nccl

    Por exemplo, numa imagem de DLVM, recebe o seguinte resultado:

    libnccl.so.2 (libc6,x86-64) => /usr/local/nccl2/lib/libnccl.so.2
    libnccl.so (libc6,x86-64) => /usr/local/nccl2/lib/libnccl.so
    libnccl-net.so (libc6,x86-64) => /usr/local/nccl2/lib/libnccl-net.so

    Isto mostra que o diretório inicial do NCCL é /usr/local/nccl2.

  2. Verifique se a NCCL carrega o plug-in Fast Socket. Para verificar, tem de transferir o pacote de teste da NCCL. Para transferir o pacote de teste, execute o seguinte comando:

    git clone https://github.com/NVIDIA/nccl-tests.git && \
    cd nccl-tests && make NCCL_HOME=NCCL_HOME_DIRECTORY

    Substitua NCCL_HOME_DIRECTORY pelo diretório base do NCCL.

  3. A partir do diretório nccl-tests, execute o processo all_reduce_perf:

    NCCL_DEBUG=INFO build/all_reduce_perf

    Se o Fast Socket estiver ativado, a mensagem FastSocket plugin initialized é apresentada no registo de saída.

    # nThread 1 nGpus 1 minBytes 33554432 maxBytes 33554432 step: 1048576(bytes) warmup iters: 5 iters: 20 validation: 1
    #
    # Using devices
    #   Rank  0 Pid  63324 on fast-socket-gpu device  0 [0x00] Tesla V100-SXM2-16GB
    .....
    fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket : Flow placement enabled.
    fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket : queue skip: 0
    fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket : Using [0]ens12:10.240.0.24
    fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket plugin initialized
    ......
    

Verifique a largura de banda da rede

Esta secção explica como verificar a largura de banda da rede para instâncias A3 Mega, A3 High, A3 Edge, A2, G2 e N1. Quando trabalhar com GPUs de largura de banda elevada, pode usar uma ferramenta de tráfego de rede, como o iperf2, para medir a largura de banda de rede.

Para verificar as velocidades da largura de banda, precisa de, pelo menos, duas VMs com GPUs anexadas e que ambas possam suportar a velocidade da largura de banda que está a testar.

Use o iPerf para realizar o teste de referência em sistemas baseados no Debian.

  1. Crie duas VMs que possam suportar as velocidades de largura de banda necessárias.

  2. Quando ambas as VMs estiverem em execução, use o SSH para estabelecer ligação a uma das VMs.

    gcloud compute ssh VM_NAME \
        --project=PROJECT_ID
    

    Substitua o seguinte:

    • VM_NAME: o nome da primeira VM
    • PROJECT_ID: o ID do seu projeto
  3. Na primeira VM, conclua os seguintes passos:

    1. Instale iperf.

      sudo apt-get update && sudo apt-get install iperf
      
    2. Obtenha o endereço IP interno desta VM. Anote-o para não se esquecer.

      ip a
      
    3. Inicie o servidor iPerf.

      iperf -s
      

      Isto inicia um servidor que escuta ligações para realizar o teste de referência. Deixe esta opção em execução durante o teste.

  4. A partir de um novo terminal de cliente, estabeleça ligação à segunda VM através do SSH.

    gcloud compute ssh VM_NAME \
       --project=PROJECT_ID
    

    Substitua o seguinte:

    • VM_NAME: o nome da segunda VM
    • PROJECT_ID: o ID do seu projeto
  5. Na segunda VM, conclua os seguintes passos:

    1. Instale o iPerf.

      sudo apt-get update && sudo apt-get install iperf
      
    2. Execute o teste iperf e especifique o endereço IP da primeira VM como destino.

      iperf -t 30 -c internal_ip_of_instance_1 -P 16
      

      Isto executa um teste de 30 segundos e produz um resultado semelhante ao seguinte resultado. Se o iPerf não conseguir alcançar a outra VM, pode ter de ajustar as definições de rede ou de firewall nas VMs ou, talvez, na Trusted Cloud consola.

Quando usa a largura de banda máxima disponível de 100 Gbps ou 1000 Gbps (A3 Mega, A3 High ou A3 Edge), tenha em atenção as seguintes considerações:

  • Devido às sobrecargas do cabeçalho de pacotes para protocolos de rede, como Ethernet, IP e TCP na pilha de virtualização, a taxa de transferência, conforme medido por netperf, satura-se a cerca de 90 Gbps ou 800 Gbps (A3 Mega, A3 High ou A3 Edge). Geralmente conhecido como goodput.

    O TCP consegue atingir a velocidade de rede de 100 ou 1000 Gbps. Outros protocolos, como o UDP, são mais lentos.

  • Devido a fatores como a sobrecarga do protocolo e o congestionamento da rede, o desempenho global das streams de dados pode ser ligeiramente inferior.

  • Tem de usar várias streams TCP para alcançar a largura de banda máxima entre instâncias de VMs. A Google recomenda 4 a 16 streams. Com 16 fluxos, vai maximizar frequentemente o débito. Consoante a sua aplicação e a pilha de software, pode ter de ajustar as definições da aplicação ou do código para configurar várias streams.

O que se segue?