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 mais altas para outras séries de máquinas otimizadas para aceleradores, consulte Criar máquinas GPU de alta largura de banda .
Você pode usar larguras de banda de rede mais altas, de 100 Gbps ou mais, para melhorar o desempenho de cargas de trabalho distribuídas em execução nas VMs de GPU. 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 forma:
- Para VMs de uso geral N1 que possuem GPUs T4 e V100 anexadas, você pode obter uma largura de banda de rede máxima de até 100 Gbps, com base na combinação de contagem de GPU e vCPU.
- Para VMs otimizadas para aceleradores A2 e G2, você pode obter uma largura de banda de rede máxima de até 100 Gbps, com base no tipo de máquina.
Para revisar as configurações ou tipos de máquinas que suportam essas taxas de largura de banda de rede mais altas, consulte Largura de banda de rede e GPUs .
Para informações gerais sobre largura de banda de rede no Compute Engine, consulte Largura de banda de rede .
Visão geral
Para utilizar as larguras de banda de rede mais elevadas disponíveis para cada VM GPU, conclua os seguintes passos recomendados:
- Crie sua VM GPU usando uma imagem de sistema operacional compatível com Google Virtual NIC (gVNIC).
- Opcional: Instale o Fast Socket . O Fast Socket melhora o desempenho do NCCL em redes de 100 Gbps ou superiores, reduzindo a contenção entre múltiplas conexões TCP. Algumas imagens de VM de aprendizado profundo (DLVM) têm Fast Socket pré-instalado.
Use imagens de VM de aprendizado profundo
Você pode criar suas VMs usando qualquer imagem compatível com GPU do projeto Deep Learning VM Images. Todas as imagens DLVM suportadas por GPU têm o driver de GPU, o software de ML e o gVNIC pré-instalados. Para obter uma lista de imagens DLVM, consulte Escolhendo uma imagem .
Se quiser usar o Fast Socket, você pode escolher uma imagem DLVM como: tf-latest-gpu-debian-10
ou tf-latest-gpu-ubuntu-1804
.
Crie VMs que usam larguras de banda de rede mais altas
Para larguras de banda de rede maiores, é recomendável ativar o Google Virtual NIC (gVNIC). Para obter mais informações, consulte Usando o Google Virtual NIC .
Para criar uma VM que tenha GPUs anexadas 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 que possui GPUs conectadas.
Crie sua VM GPU. Os exemplos a seguir mostram como criar A2 e N1 com VMs V100 anexadas.
Nestes exemplos, as VMs são criadas usando a CLI do Google Cloud. No entanto, você também pode usar o console do Google Cloud ou a API Compute Engine para criar essas VMs. Para obter mais informações sobre a criação de VMs GPU, consulte Criar uma VM com GPUs anexadas .
A2 (A100)
Por exemplo, para criar uma VM que tenha largura de banda máxima de 100 Gbps, tenha oito GPUs A100 conectadas e use a imagem 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 o seguinte:
-
VM_NAME
: o nome da sua VM -
PROJECT_ID
: o ID do seu projeto -
ZONE
: a zona da VM. Esta zona deve suportar o tipo de GPU especificado. Para obter mais informações sobre zonas, consulte Disponibilidade de regiões e zonas de GPU .
N1 (V100)
Por exemplo, para criar uma VM que tenha largura de banda máxima de 100 Gbps, tenha oito GPUs V100 conectadas e use a imagem 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 imagens de VM de aprendizado profundo com suporte para GPU ou sistema operacional otimizado para contêiner, instale drivers de GPU. Para obter mais informações, consulte Instalando drivers de GPU .
Opcional: na VM, instale o Fast Socket .
Depois de configurar a VM, você poderá verificar a largura de banda da rede .
Instale o soquete rápido
A NVIDIA Collective Communications Library (NCCL) é usada por estruturas de aprendizado profundo, como TensorFlow, PyTorch, Horovod para treinamento multi-GPU e multi-nós.
Fast Socket é um transporte de rede proprietário do Google para NCCL. No Compute Engine, o Fast Socket melhora o desempenho do NCCL em redes de 100 Gbps, reduzindo a contenção entre várias conexões TCP. Para obter mais informações sobre como trabalhar com NCCL, consulte o guia do usuário do NCCL .
A avaliação atual mostra que o Fast Socket melhora a taxa de transferência total em 30% a 60%, dependendo do tamanho da mensagem.
Para configurar um ambiente Fast Socket, você pode usar imagens de VM de aprendizado profundo que tenham Fast Socket pré-instalado ou instalar manualmente o Fast Socket em uma VM Linux. Para verificar se o Fast Socket está pré-instalado, consulte Verificando se o Fast Socket está habilitado .
Antes de instalar o Fast Socket em uma VM Linux, você precisa instalar o NCCL. Para obter instruções detalhadas, consulte a documentação da NVIDIA NCCL .
CentOS/RHEL
Para baixar e instalar o Fast Socket em uma VM CentOS ou RHEL, conclua as seguintes etapas:
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
Instale o soquete rápido.
sudo yum install google-fast-socket
Verifique se o Fast Socket está habilitado .
SLES
Para baixar e instalar o Fast Socket em uma VM SLES, conclua as seguintes etapas:
Adicione o repositório do pacote.
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á habilitado .
Debian/Ubuntu
Para baixar e instalar o Fast Socket em uma VM Debian ou Ubuntu, conclua as seguintes etapas:
Adicione o repositório do pacote.
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á habilitado .
Verificando se o Fast Socket está habilitado
Na sua VM, conclua as seguintes etapas:
Localize o diretório inicial do NCCL.
sudo ldconfig -p | grep nccl
Por exemplo, em uma imagem DLVM, você obtém 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 da NCCL é
/usr/local/nccl2
.Verifique se o NCCL carrega o plugin Fast Socket. Para verificar, você precisa baixar o pacote de teste NCCL. Para baixar 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 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 log 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 seção explica como verificar a largura de banda da rede para instâncias A3 Mega, A3 High, A3 Edge, A2, G2 e N1. Ao trabalhar com GPUs de alta largura de banda, você pode 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, você precisa de pelo menos duas VMs que tenham GPUs anexadas e que possam suportar a velocidade de largura de banda que você está testando.
Use o iPerf para realizar o benchmark em sistemas baseados em Debian.
Crie duas VMs que possam suportar as velocidades de largura de banda necessárias.
Quando ambas as VMs estiverem em execução, use SSH para conectar-se 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
-
Na primeira VM, conclua as seguintes etapas:
Instale
iperf
.sudo apt-get update && sudo apt-get install iperf
Obtenha o endereço IP interno desta VM. Acompanhe isso anotando-o.
ip a
Inicie o servidor iPerf.
iperf -s
Isso inicia um servidor que escuta conexões para realizar o benchmark. Deixe isso funcionando durante o teste.
A partir de um novo terminal cliente, conecte-se à segunda VM usando 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
-
Na segunda VM, conclua as seguintes etapas:
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 à saída a seguir. Se o iPerf não conseguir acessar a outra VM, talvez seja necessário ajustar as configurações de rede ou firewall nas VMs ou talvez no console do Google Cloud.
Ao usar a largura de banda máxima disponível de 100 Gbps ou 1000 Gbps (A3 Mega, A3 High ou A3 Edge), lembre-se das seguintes considerações:
Devido às sobrecargas de cabeçalho de pacote para protocolos de rede como Ethernet, IP e TCP na pilha de virtualização, a taxa de transferência, medida por
netperf
, satura em cerca de 90 Gbps ou 800 Gbps (A3 Mega, A3 High ou A3 Edge). Geralmente conhecido como goodput .O TCP é capaz de atingir a velocidade de rede de 100 ou 1000 Gbps. Outros protocolos, como o UDP, são mais lentos.
Devido a fatores como sobrecarga de protocolo e congestionamento de rede, o desempenho ponta a ponta dos fluxos de dados pode ser um pouco menor.
Você precisa usar vários fluxos TCP para obter largura de banda máxima entre instâncias de VM. O Google recomenda de 4 a 16 streams. Com 16 fluxos, você frequentemente maximizará o rendimento. Dependendo do seu aplicativo e da pilha de software, talvez seja necessário ajustar as configurações do seu aplicativo ou do seu código para configurar vários fluxos.
O que vem a seguir?
- Para monitorar o desempenho da GPU, consulte Monitorando o desempenho da GPU .
- Para lidar com a manutenção do host GPU, consulte Tratamento de eventos de manutenção do host GPU .