Tempo de Leitura: 11 minutos

Deep Learning exige muito de poder computacional, portanto você precisará de uma CPU rápida com muitos núcleos, certo? Ou talvez seja um desperdício comprar uma CPU rápida? Uma das piores coisas que você pode fazer ao criar um sistema de deep learning é desperdiçar dinheiro em hardware desnecessário. Aqui iremos guiá-lo passo a passo afim de avaliar o hardware necessário para um sistema razoável de alto desempenho.

 

GPU

Esta postagem do blog pressupõe que você usará uma GPU para deep learning. Se você estiver construindo ou atualizando seu sistema para deep learning, não é sensato deixar de fora a GPU. A GPU é o coração de aplicativos de aprendizado profundo – a melhoria na velocidade de processamento é muito grande demais para ser ignorada.

A escolha da sua GPU é provavelmente a escolha mais crítica para o seu sistema de aprendizado profundo. Existem três erros principais que você pode cometer ao escolher uma GPU: (1) custo / desempenho ruim, (2) memória insuficiente, (3) resfriamento insuficiente.

Para um bom custo / desempenho, geralmente recomendo um RTX 2070 ou um RTX 2080 Ti. Se você usar essas placas, use modelos de 16 bits. Caso contrário, GTX 1070, GTX 1080, GTX 1070 Ti e GTX 1080 Ti são escolhas justas e você pode usar essas GPUs com 32 bits (mas não 16 bits).

Tenha cuidado com os requisitos de memória ao escolher sua GPU. As placas RTX, que podem ser executadas em 16 bits, podem treinar modelos duas vezes maiores com a mesma memória em comparação com as placas GTX. Como tais placas RTX têm uma vantagem de memória, escolher as placas RTX e aprender a usar modelos de 16 bits com eficiência o levará muito longe. Em geral, os requisitos de memória são aproximadamente os seguintes:

  • Pesquisa que busca as melhores pontuações:> = 11 GB: >=11 GB
  • Pesquisas que buscam arquiteturas interessantes: >=8 GB
  • Qualquer outra pesquisa: 8 GB
  • Kaggle: 4 – 8 GB
  • Startups: 8 GB (mas verifique a área de aplicação específica para tamanhos de modelo)
  • Empresas: 8 GB for prototipagem, >=11 GB para treinamento.

Outro problema a ser observado, principalmente se você comprar várias placas RTX, é o resfriamento. Se você quiser colocar as GPUs nos slots PCIe próximos uns dos outros, certifique-se de obter as GPUs com um ventilador do tipo soprador, além do gabinete ter resfriamento suficiente.  Caso contrário, você poderá ter problemas de temperatura e suas GPUs serão mais lentas (cerca de 30%) e podendo comprometer a placa gráfica.

 

RAM

Os principais erros da RAM são comprá-la com um clock muito alto. O segundo erro é comprar RAM insuficiente para ter uma experiência de prototipagem suave.

Taxa de clock de RAM necessária

As taxas de clock da RAM são períodos de marketing em que as empresas de RAM o levam a comprar RAM “mais rápida”, que na verdade produz pouco ou nenhum ganho de desempenho. Isso é melhor explicado no vídeo criado pelo Linus no canal Linus Tech Tips:  “A velocidade da RAM REALMENTE importa?” .

Além disso, é importante saber que a velocidade da RAM é praticamente irrelevante para transferências rápidas de RAM da CPU -> GPU RAM. Isso ocorre porque (1) se você usou memória fixada(pinned memory), seus mini-lotes serão transferidos para a GPU sem o envolvimento da CPU e (2) se você não usar memória fixada(pinned memory), os ganhos de desempenho das RAMs rápidas e lentas são de cerca de 0-3% – aconselhamos a investir seu dinheiro em outro lugar!

Tamanho da RAM

O tamanho da RAM não afeta o desempenho do aprendizado profundo. No entanto, isso pode impedir que você execute seu código da GPU sem problemas (sem trocar para o disco). Você deve ter RAM suficiente para trabalhar tranquilamente com sua GPU. Isso significa que você deve ter pelo menos a quantidade de RAM que corresponda à sua maior GPU. Por exemplo, se você tiver um Titan RTX com 24 GB de memória, deverá ter pelo menos 24 GB de RAM. No entanto, se você tiver mais GPUs, não precisará necessariamente de mais RAM.

O problema com essa estratégia de “corresponder à maior memória da GPU na RAM” é que você ainda pode ficar sem RAM se estiver processando grandes conjuntos de dados. A melhor estratégia aqui é combinar sua GPU e, se você sentir que não possui RAM suficiente, basta comprar um pouco mais.

Uma estratégia diferente é influenciada pela psicologia: a psicologia nos diz que a concentração é um recurso que se esgota ao longo do tempo. A RAM é uma das poucas peças de hardware que permite conservar seus recursos para problemas de programação mais difíceis. Em vez de gastar muito tempo contornando gargalos de RAM, você pode investir sua concentração em assuntos mais problemáticos se tiver mais RAM. Com muita RAM, você pode evitar esses gargalos, economizar tempo e aumentar a produtividade em problemas mais prementes.

CPU

O principal erro que as pessoas cometem é que prestam muita atenção às PCIe Lanes de uma CPU. Você não deve se importar muito com as PCIe Lanes. Em vez disso, basta procurar se a combinação de CPU e placa-mãe suporta o número de GPUs que você deseja executar. O segundo erro mais comum é obter uma CPU muito poderosa.

CPU and PCI-Express

As pessoas ficam loucas por PCIe Lanes! No entanto, o problema é que quase não afeta o desempenho do aprendizado profundo. Se você tiver uma única GPU, as faixas PCIe são necessárias apenas para transferir dados da RAM da CPU para a RAM da GPU rapidamente. No entanto, um lote ImageNet de 32 imagens (32x225x225x3) e 32 bits precisa de 1,1 milissegundos com 16 lanes, 2,3 milissegundos com 8 lanes e 4,5 milissegundos com 4 lanes. Esses são números teóricos e, na prática, você costuma ver o PCIe duas vezes mais lento – mas isso ainda é muito rápido! As PCIe Lanes geralmente têm uma latência na faixa de nanossegundos e, portanto, a latência pode ser ignorada.

Juntando isso, temos para um mini-lote ImageNet de 32 imagens e um ResNet-152 o seguinte timing:

  • Forward and backward pass: 216 milliseconds (ms)
  • 16 PCIe lanes CPU->GPU transferências: Algo em torno de 2 ms (1.1 ms teórico)
  • 8 PCIe lanes CPU->GPU transferências: Algo em torno de 5 ms (2.3 ms)
  • 4 PCIe lanes CPU->GPU transferências: Algo em torno de 9 ms (4.5 ms)

Assim, passar de 4 para 16 pistas PCIe proporcionará um aumento de desempenho de aproximadamente 3,2%. No entanto, se você usar o carregador de dados do PyTorch com “pinned memory”, obterá exatamente 0% de desempenho. Portanto, não desperdice seu dinheiro em pistas PCIe se você estiver usando uma única GPU!

Quando você selecionar PCIe Lanes da CPU e PCIe Lanes da placa-mãe, certifique-se de selecionar uma combinação que suporte o número desejado de GPUs. Se você compra uma placa-mãe com suporte para 2 GPUs e deseja, eventualmente, ter 2 GPUs, certifique-se de comprar uma CPU que suporte 2 GPUs, mas não necessariamente observe as faixas PCIe.

PCIe Lanes and Multi-GPU Parallelism

As faixas PCIe são importantes se você treina redes em várias GPUs com paralelismo de dados? O autor orginal desse artigo publicou um paper sobre isso ICLR2016 e comenta que se você tem 96 GPUs, então as pistas PCIe são realmente importantes. No entanto, se você tiver 4 ou menos GPUs, isso não importa muito. Se você paralelizar entre 2 a 3 GPUs, eu não me importaria com as pistas PCIe. Com 4 GPUs, eu assegurava que eu recebesse um suporte de 8 pistas PCIe por GPU (32 pistas PCIe no total). Como quase ninguém executa um sistema com mais de 4 GPUs como regra geral: não gaste dinheiro extra para obter mais pistas PCIe por GPU – isso não importa!

Núcleos de CPU Necessários

Para poder fazer uma escolha sábia para a CPU, primeiro precisamos entender a CPU e como ela se relaciona ao deep learning. O que a CPU faz para o deep learning? A CPU faz pouco cálculo quando você executa suas “deep nets” em uma GPU. Principalmente (1) inicia chamadas de função GPU, (2) executa funções de CPU.

De longe, a aplicação mais útil para sua CPU é o pré-processamento de dados. Existem duas estratégias comuns diferentes de processamento de dados que têm necessidades diferentes de CPU.

A primeira estratégia é pré-processamento enquanto você treina:

Ciclo:

Carregar mini-lote
Mini-lote de pré-processamento
Treinar em mini-lote

A segunda estratégia é pré-processamento antes de qualquer treinamento:

Dados de pré-processamento
Ciclo:
Carregar mini-lote pré-processado
Treinar em mini-lote

Para a primeira estratégia, uma boa CPU com muitos núcleos pode aumentar significativamente o desempenho. Para a segunda estratégia, você não precisa de uma CPU muito boa. Para a primeira estratégia, recomendo um mínimo de 4 threads por GPU – que geralmente são dois núcleos por GPU. Eu não fiz testes rígidos para isso, mas você deve obter um desempenho adicional de 0 a 5% por núcleo / GPU adicional.

Para a segunda estratégia, recomendo um mínimo de 2 threads por GPU – que geralmente é um núcleo por GPU. Você não verá ganhos significativos no desempenho quando tiver mais núcleos se estiver usando a segunda estratégia.

Resultado de imagem para INtel CPUs

Taxa de clock da CPU necessária (frequência)

Quando as pessoas pensam em CPUs rápidas, geralmente pensam primeiro na taxa de clock. 4GHz é melhor que 3.5GHz, ou é? Isso geralmente é verdadeiro para comparar processadores com a mesma arquitetura, por exemplo. “Ivy Bridge”, mas não se compara bem entre os processadores. Além disso, nem sempre é a melhor medida de desempenho.

No caso de deep learning, há muito pouco cálculo a ser feito pela CPU: Aumente algumas variáveis aqui, avalie alguma expressão booleana lá, faça algumas chamadas de função na GPU ou no programa – tudo isso depende da taxa de clock do núcleo da CPU.

Embora esse raciocínio pareça sensato, existe o fato de que a CPU tem 100% de uso quando executo programas de deep learning, então qual é o problema aqui? Segue algumas experiências de underclocking de taxa de núcleo da CPU para descobrir.

CPU underclocking on MNIST and ImageNet: Performance is measured as time taken on 100 epochs MNIST or half an epoch on ImageNet with different CPU core clock rates, where the maximum clock rate is taken as a base line for each CPU. For comparison: Upgrading from a GTX 580 to a GTX Titan is about +20% performance; from GTX Titan to GTX 980 another +30% performance; GPU overclocking yields about +5% performance for any GPU
Underclocking da CPU no MNIST e ImageNet: O desempenho é medido como o tempo gasto em 200 épocas MNIST ou em um quarto de época no ImageNet com diferentes taxas de clock do núcleo da CPU, onde a taxa máxima de clock é tomada como linha de base para cada CPU. Para comparação: a atualização de um GTX 680 para um GTX Titan é de cerca de + 15% de desempenho; do GTX Titan para o GTX 980, mais + 20% de desempenho; O overclock da GPU produz cerca de + 5% de desempenho para qualquer GPU

Observe que esses experimentos estão em um hardware datado; no entanto, esses resultados ainda devem ser os mesmos para as CPUs / GPUs modernas.

Hard drive/SSD

O disco rígido geralmente não é um gargalo para o deep learning. No entanto, se você fizer algo atrapalhado, isso irá prejudicá-lo: se você ler seus dados do disco quando eles forem necessários (bloqueio de espera), um disco rígido de 100 MB / s custará cerca de 185 milissegundos para um mini-lote do ImageNet de tamanho 32 – ai! No entanto, se você buscar os dados de forma assíncrona antes de serem usados (por exemplo, torch vision loaders), o mini-lote será carregado em 185 milissegundos, enquanto o tempo de computação para a maioria das redes neurais profundas no ImageNet é de aproximadamente 200 milissegundos. Portanto, você não sofrerá nenhuma penalidade de desempenho, uma vez que você carrega o próximo mini lote enquanto a corrente ainda está computando.

No entanto, recomendo um SSD para maior conforto e produtividade: os programas iniciam e respondem mais rapidamente, e o pré-processamento com arquivos grandes é um pouco mais rápido. Se você comprar um SSD NVMe, terá uma experiência ainda mais suave quando comparado a um SSD comum.

Portanto, a configuração ideal é ter um disco rígido grande e lento para conjuntos de dados e um SSD para produtividade e conforto.

Fonte de Energia (PSU)

Geralmente, você deseja uma fonte de alimentação suficiente para acomodar todas as suas futuras GPUs. As GPUs normalmente obtêm mais eficiência energética ao longo do tempo; portanto, enquanto outros componentes precisarão ser substituídos, uma PSU deve durar muito tempo, portanto, uma boa PSU é um bom investimento.

Você pode calcular os watts necessários adicionando o watt de sua CPU e GPUs com 10% de watts adicionais para outros componentes e como um buffer para picos de energia. Por exemplo, se você tiver 4 GPUs com cada TDP de 250 watts e uma CPU com TDP de 150 watts, precisará de uma PSU com no mínimo 4 × 250 + 150 + 100 = 1250 watts. Eu normalmente adicionaria outros 10% apenas para garantir que tudo funcionasse, o que, nesse caso, resultaria em um total de 1375 Watts. Gostaria de reunir neste caso e obter uma fonte de alimentação de 1400 watts.

Uma parte importante a ser observada é que, mesmo que uma PSU possua a potência necessária, ela pode não ter conectores PCIe de 8 ou 6 pinos suficientes. Verifique se você possui conectores suficientes na PSU para suportar todas as suas GPUs!

Outra coisa importante é comprar uma fonte de alimentação com alto índice de eficiência de energia – especialmente se você executa muitas GPUs e as executa por mais tempo.

 

Refrigeração de CPU e GPU

O resfriamento é importante e pode ser um gargalo significativo que reduz o desempenho mais do que as más escolhas de hardware. Você deve estar bem com um dissipador de calor padrão ou uma solução de resfriamento a água tudo-em-um (AIO) para sua CPU, mas o que para sua GPU você precisará fazer considerações especiais.

GPUs com Refrigeração a Ar

O resfriamento a ar é seguro e sólido para uma única GPU ou se você tiver várias GPUs com espaço entre elas (2 GPUs em um gabinete de 3-4 GPU). No entanto, um dos maiores erros pode ser cometido quando você tenta resfriar 3-4 GPUs e precisa pensar cuidadosamente sobre suas opções nesse caso.

As GPUs modernas aumentam sua velocidade – e, portanto, o consumo de energia – até o máximo quando executam um algoritmo, mas assim que a GPU atinge uma barreira de temperatura – geralmente 80 ° C – a GPU diminui a velocidade para que o limite de temperatura seja não violado. Isso permite o melhor desempenho, mantendo a GPU protegida contra superaquecimento.

No entanto, os agendamentos pré-programados típicos para a velocidade dos ventiladores são mal projetados para programas de deep learning, para que esse limite de temperatura seja atingido em segundos após o início de um programa de deep learning. O resultado é um desempenho reduzido (0-10%), que pode ser significativo para várias GPUs (10-25%), nas quais a GPU se aquece.

Como as GPUs NVIDIA são, em primeiro lugar, as GPUs de jogos, elas são otimizadas para Windows. Você pode alterar a programação dos fãs com apenas alguns cliques no Windows, mas não no Linux, e como a maioria das bibliotecas de aprendizado profundo são escritas para Linux, isso é um problema.

A única opção no Linux é usar para definir uma configuração para o servidor Xorg (Ubuntu) onde você define a opção “coolbits”. Isso funciona muito bem para uma única GPU, mas se você tiver várias GPUs em que algumas delas não têm cabeça, ou seja, elas não possuem monitor conectado a elas, é necessário emular um monitor rígido e hacky. Eu tentei por um longo tempo e tive horas frustrantes com um CD de inicialização ao vivo para recuperar minhas configurações gráficas – nunca consegui fazê-lo funcionar corretamente em GPUs sem cabeça.

O ponto de consideração mais importante se você executar 3-4 GPUs no resfriamento a ar é prestar atenção ao design do ventilador. O design do ventilador “soprador” empurra o ar para a parte traseira do gabinete, para que o ar mais fresco e fresco seja introduzido na GPU. Os fãs que não são sopradores sugam o ar na proximidade da GPU e esfriam a GPU. No entanto, se você tiver várias GPUs próximas uma da outra, não haverá ar frio e as GPUs com ventiladores sem ventoinha esquentarão cada vez mais até que se acelerem para atingir temperaturas mais baixas. Evite placas sem ventoinhas do tipo “soprador”  nas posições 3-4 GPU a todo custo.

Motherboard

Sua placa-mãe deve ter portas PCIe suficientes para suportar o número de GPUs que você deseja executar (geralmente limitado a quatro GPUs, mesmo se você tiver mais slots PCIe); lembre-se de que a maioria das GPUs tem uma largura de dois slots PCIe; portanto, compre uma placa-mãe com espaço suficiente entre os slots PCIe se você pretende usar várias GPUs. Verifique se a placa-mãe não possui apenas os slots PCIe, mas também suporta a configuração da GPU que você deseja executar.

Gabinete do Computador

Ao selecionar um gabinete, certifique-se de que ele suporte GPUs completas que ficam na parte superior da placa-mãe. A maioria dos casos suporta GPUs completas, mas você deve suspeitar se comprar um gabinete pequeno. Verifique suas dimensões e especificações; você também pode tentar uma pesquisa de imagens no google desse modelo e ver se encontra fotos com GPUs nelas.

Se você usar um resfriamento a água personalizado, verifique se o gabinete possui espaço suficiente para os radiadores. Isto é especialmente verdade se você usar o resfriamento a água para suas GPUs. O radiador de cada GPU precisará de espaço – verifique se a sua configuração realmente se encaixa na GPU.

Esse artigo é uma tradução e adaptação do artigo escrito originalmente pelo Tim Dettmers

 

Tags:

Deixe uma resposta