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:
- Crie a sua VM de GPU usando uma imagem do SO que suporte a NIC virtual da Google (gVNIC).
- 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:
- Reveja a largura de banda da rede máxima disponível para cada tipo de máquina com GPUs anexadas.
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 VMPROJECT_ID
: o ID do seu projetoZONE
: 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
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.
Opcional: na VM, instale o Fast Socket.
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:
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 a tomada rápida.
sudo yum install google-fast-socket
Verifique se o Fast Socket está ativado.
SLES
Para transferir e instalar o Fast Socket numa VM SLES, conclua os seguintes passos:
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 a tomada rápida.
sudo zypper install google-fast-socket
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:
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 a tomada rápida.
sudo apt update && sudo apt install google-fast-socket
Verifique se o Fast Socket está ativado.
Verificar se o Fast Socket está ativado
Na VM, conclua os seguintes passos:
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
.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.A partir do 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
é 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.
Crie duas VMs que possam suportar as velocidades de largura de banda necessárias.
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 VMPROJECT_ID
: o ID do seu projeto
Na primeira VM, conclua os seguintes passos:
Instale
iperf
.sudo apt-get update && sudo apt-get install iperf
Obtenha o endereço IP interno desta VM. Anote-o para não se esquecer.
ip a
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.
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 VMPROJECT_ID
: o ID do seu projeto
Na segunda VM, conclua os seguintes passos:
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
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?
- Para monitorizar o desempenho da GPU, consulte o artigo Monitorizar o desempenho da GPU.
- Para processar a manutenção do anfitrião da GPU, consulte o artigo Processar eventos de manutenção do anfitrião da GPU.