Esta página explica como criar instâncias A2, G2 e N1 que usam larguras de banda de rede mais altas. Para saber como usar larguras de banda de rede maiores em outras séries de máquinas otimizadas para aceleradores, consulte Criar máquinas de GPU de alta largura de banda.
É possível usar larguras de banda de rede maiores, como 100 Gbps ou mais, para melhorar o desempenho das cargas de trabalho distribuídas em execução nas VMs de GPU. As larguras de banda de rede mais altas estão disponíveis para VMs A2, G2 e N1 com GPUs anexadas no Compute Engine da seguinte maneira:
- Para VMs de uso geral N1 com GPUs T4 e V100 anexadas, é possível ter uma largura de banda de rede máxima de até 100 Gbps, com base na combinação da contagem de GPUs e vCPUs.
- Para VMs otimizadas para aceleradores A2 e G2, é possível ter uma largura de banda de rede máxima de até 100 Gbps, com base no tipo de máquina.
Para analisar as configurações ou os tipos de máquinas que dão suporte a essas taxas mais altas de largura de banda de rede, consulte Larguras de banda de rede e GPUs.
Para informações gerais sobre a largura de banda de rede no Compute Engine, consulte Largura de banda de rede.
Visão geral
Para usar as larguras de banda de rede maiores disponíveis em cada VM de GPU, siga estas etapas recomendadas:
- Crie sua VM de GPU usando uma imagem de SO que dê suporte à placa de rede virtual do Google (gVNIC).
- Opcional: instale o Fast Socket. O Fast Socket melhora o desempenho do NCCL em redes de 100 Gbps ou mais ao reduzir a contenção entre várias conexões TCP. Algumas Deep Learning VM Images (DLVM) têm o Fast Socket pré-instalado.
Usar Deep Learning VM Images
Você pode criar VMs usando qualquer imagem que dê suporte a GPUs do projeto Deep Learning VM Images. Todas as imagens de DLVM que dão suporte a GPUs têm o driver da GPU, o software de machine learning e a gVNIC pré-instalados. Para conferir uma lista de imagens de DLVM, consulte Como escolher uma imagem.
Para usar o Fast Socket, escolha uma imagem de DLVM, como
tf-latest-gpu-debian-10
ou tf-latest-gpu-ubuntu-1804
.
Criar VMs que usam larguras de banda de rede maiores
Para larguras de banda de rede maiores, recomendamos ativar a placa de rede virtual do Google (gVNIC). Para mais informações, consulte Como usar a NIC virtual do Google.
Para criar uma VM com GPUs conectadas e uma largura de banda de rede maior, faça o seguinte:
- Revise a largura de banda máxima de rede disponível para cada tipo de máquina com GPUs anexadas.
Crie a VM de GPU. Os exemplos a seguir mostram como criar A2 e N1 com VMs V100 anexadas.
Nestes exemplos, as VMs são criadas com a Google Cloud CLI. No entanto, também é possível usar o console do Google Cloud ou a API Compute Engine para criar essas VMs. Para mais informações sobre como criar VMs de GPU, consulte Criar uma VM com GPUs conectadas.
A2 (A100)
Por exemplo, para criar uma VM que tenha uma largura de banda máxima de 100 Gbps, oito GPUs A100 conectadas e faça uso da imagem de DLVM
tf-latest-gpu
, execute o seguinte comando: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:
VM_NAME
: o nome da VMPROJECT_ID
: o ID do projetoZONE
: a zona para a VM. Essa zona precisa ser compatível com o tipo de GPU. Para mais informações sobre zonas, consulte Regiões e disponibilidade de zonas de GPU.
N1 (V100)
Por exemplo, para criar uma VM que tenha uma largura de banda máxima de 100 Gbps, oito GPUs V100 conectadas e faça uso da imagem de DLVM
tf-latest-gpu
, 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
Se você não estiver usando o Container-Optimized OS ou Deep Learning VM Images com suporte a GPUs, instale drivers de GPU. Para mais informações, consulte Como instalar drivers de GPU.
Opcional: na VM, instale o Fast Socket.
Depois de configurar a VM, é possível verificar a largura de banda de rede.
Instalar o Fast Socket
A NVIDIA Collective Communications Library (NCCL) é usada por frameworks de aprendizado profundo, como o TensorFlow, o PyTorch e o Horovod, para treinamentos de várias GPUs e vários nós.
O Fast Socket é um transporte de rede reservado do Google para NCCL. No Compute Engine, o Fast Socket melhora o desempenho da NCCL em redes de 100 Gbps ao reduzir a contenção entre várias conexões TCP. Para mais informações sobre como trabalhar com a NCCL, consulte o Guia do usuário da NCCL.
A avaliação atual mostra que o Fast Socket melhora a capacidade de processamento de redução total em 30% a 60%, de acordo com o tamanho da mensagem.
Para configurar um ambiente do Fast Socket, use uma Deep Learning VM Image que tenha o Fast Socket pré-instalado ou faça a instalação manual dele em uma VM do Linux. Para verificar se o Fast Socket está pré-instalado, consulte Como verificar se o Fast Socket está ativado.
Antes de instalar o Fast Socket em uma VM do Linux, é necessário instalar a NCCL. Para instruções detalhadas, consulte a documentação da NVIDIA NCCL (em inglês).
CentOS/RHEL
Para fazer o download e instalar o Fast Socket em uma VM do CentOS ou do RHEL, siga as seguintes etapas:
Adicione o repositório de pacotes e importe 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
Instale o soquete rápido.
sudo yum install google-fast-socket
Verifique se o Fast Socket está ativado.
SLES
Para fazer o download e instalar o Fast Socket em uma VM do SLES, siga as seguintes etapas:
Adicione o repositório de pacotes.
sudo zypper addrepo https://packages.cloud.google.com/yum/repos/google-fast-socket google-fast-socket
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
Instale o soquete rápido.
sudo zypper install google-fast-socket
Verifique se o Fast Socket está ativado.
Debian/Ubuntu
Para fazer o download e instalar o Fast Socket em uma VM do Debian ou Ubuntu, siga estas etapas:
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
Adicione chaves de repositório.
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
Instale o soquete rápido.
sudo apt update && sudo apt install google-fast-socket
Verifique se o Fast Socket está ativado.
Como verificar se o soquete rápido está ativado
Na VM, conclua as seguintes etapas:
Localize o diretório inicial do NCCL.
sudo ldconfig -p | grep nccl
Por exemplo, em uma imagem DLVM, você recebe a seguinte saída:
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
Isso mostra que o diretório inicial do NCCL é
/usr/local/nccl2
.Verifique se o NCCL carrega o plug-in Fast Socket. Para verificar, você precisa fazer o download do pacote de teste NCCL. Execute este comando para fazer o download do pacote de instalação:
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 inicial do NCCL.No diretório
nccl-tests
, execute o processoall_reduce_perf
:NCCL_DEBUG=INFO build/all_reduce_perf
Se o Fast Socket estiver ativado, a mensagem
FastSocket plugin initialized
será exibida no registro 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 ......
Verificar a largura de banda de rede
Esta seção explica como verificar a largura de banda de rede para instâncias A3 Mega, A3 High, A3 Edge, A2, G2 e N1. Ao trabalhar com GPUs de largura de banda alta, é possível usar uma ferramenta de tráfego de rede, como o iperf2, para medir a largura de banda da rede.
Para verificar as velocidades de largura de banda, é preciso pelo menos duas VMs que tenham GPUs anexadas e sejam compatíveis com a velocidade de largura de banda que você está testando.
Use o iPerf para realizar a comparação em sistemas baseados em Debian.
Crie duas VMs compatíveis com as velocidades de largura de banda necessárias.
Quando as duas VMs estiverem em execução, use o SSH para se conectar a uma das VMs.
gcloud compute ssh VM_NAME \ --project=PROJECT_ID
Substitua:
VM_NAME
: o nome da primeira VMPROJECT_ID
: ID do projeto
Na primeira VM, conclua as etapas a seguir:
Instale
iperf
.sudo apt-get update && sudo apt-get install iperf
Consiga o endereço IP interno dessa VM. Anote-o para acompanhar.
ip a
Inicie o servidor iPerf.
iperf -s
Isso inicia um servidor que detecta conexões para realizar a comparação. Deixe-o em execução durante o teste.
Em um novo terminal de cliente, conecte-se à segunda VM usando SSH.
gcloud compute ssh VM_NAME \ --project=PROJECT_ID
Substitua:
VM_NAME
: o nome da segunda VMPROJECT_ID
: ID do projeto
Na segunda VM, conclua as etapas a seguir:
Instale o iPerf.
sudo apt-get update && sudo apt-get install iperf
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
Isso executa um teste de 30 segundos e produz um resultado semelhante ao seguinte. Se o iPerf não conseguir acessar a outra VM, talvez seja necessário ajustar a rede ou as configurações de firewall nas VMs ou talvez no console do Google Cloud.
Ao usar a largura de banda máxima disponível de 100 Gbps ou 1.000 Gbps (A3 Mega, A3 High ou A3 Edge), lembre-se das seguintes considerações:
Devido a overheads de cabeçalho de pacote para protocolos de rede, como Ethernet, IP e TCP na pilha de virtualização, a capacidade de processamento, medida por
netperf
, é saturada em cerca de 90 Gbps ou 800 Gbps (A3 Mega, A3 High ou A3 Edge). Geralmente conhecido como goodput (em inglês).O TCP é capaz de atingir a velocidade de rede de 100 ou 1.000 Gbps. Outros protocolos, como o UDP, são mais lentos.
Devido a fatores como overhead de protocolo e congestionamento de rede, o desempenho de ponta a ponta dos fluxos de dados pode ser um pouco menor.
É necessário usar vários fluxos TCP para atingir a largura de banda máxima entre as instâncias de VM. O Google recomenda de quatro a 16 fluxos. Com 16 fluxos, você maximiza com frequência a capacidade de processamento. Dependendo do aplicativo e da pilha de software, talvez seja necessário ajustar as configurações do aplicativo ou do código para configurar vários fluxos.
A seguir
- Consulte Como monitorar o desempenho da GPU para mais informações sobre esse assunto.
- Para lidar com a manutenção do host da GPU, consulte "Como manipular eventos de manutenção do host da GPU".