Esta é uma parte sobre GPUs em uma série “Hardware para Deep Learning”. É a parte com conteúdo mais pesado, principalmente porque as GPUs ou placa de video são os cavalos de batalha atuais do DL.
O conteúdo da série está aqui.
Índice
atuação
→ FP32, FP16, INT8, INT4, precisão mista
→ Núcleos tensores
Memória
→ Tamanho da memória
→ Largura de banda da memória
Sistemas multi-GPU
NVLink
Supercomputadores Pessoais
→ NVIDIA DGX
→ IBM Minsky etc.
→ Supercomputadores caseiros
Conselho prático
AMD
→ GPUs
→ OpenCL
→ ROCm / HIP / MIOpen
→ Tecido Infinity
→ Futuro
Intel
Notas de Lançamento

GPUs, unidades de processamento gráfic são diferentes das placa de video rtx o, são processadores especializados originalmente criados para tarefas de computação gráfica. As GPUs modernas contêm muitos processadores simples (núcleos) e são altamente paralelas, o que as torna muito eficazes na execução de alguns algoritmos. Multiplicações de matrizes, o núcleo do DL agora, estão entre elas.

Os sistemas DL mais modernos são uma mistura de CPU e GPU, onde a GPU faz o trabalho pesado, e a CPU é responsável por carregar os dados na / da memória de uma placa de vídeo e orquestrar os cálculos.

O treinamento é um processo muito mais intensivo de cálculo do que a inferência, e as GPUs são especialmente importantes para o modo de treinamento. Para a inferência, eles também são bons, mas aqui podem desempenhar outros fatores (como tamanho, consumo de energia, preço, etc.) dependendo do sistema alvo para o qual você está desenvolvendo uma rede neural (NN).

Entre as GPUs, as NVIDIA estão além da comparação são placa de video barata, porque quase todos os frameworks DL suportam GPUs NVIDIA, embora não tenham suporte para GPUs AMD. Então a AMD quase perdeu essa batalha. Existem algumas atividades e voltarei à AMD no final do post.

Vamos discutir aspectos importantes das GPUs.

atuação
O desempenho da GPU ainda cresce. Se você desenhar um gráfico com desempenho máximo em GFLOPS, ele ficará assim (alguns pontos de referência não GPU foram adicionados):

Importante: Este é FP32, um flutuador de precisão simples, desempenho. Esta não é a única opção de medição, você aprenderá sobre FP16 / FP64 / INT8 em breve. Portanto, você pode ver outros gráficos com números maiores. Mas de qualquer maneira, FP32 é um bom terreno comum, porque você verá que há muitas ressalvas com os outros.

Importante: o desempenho máximo de placa de vídeo gamer pode estar muito distante do desempenho nas tarefas reais. Mais corretamente, o desempenho real pode estar muito aquém do desempenho de pico (e você verá isso abaixo). É porque, para atingir o desempenho máximo, você precisa otimizar fortemente seus cálculos, mantendo todas as partes do pipeline de processamento carregadas de maneira ideal, evitando gargalos e assim por diante.

Talvez seja possível, mas eu não tinha visto nenhum desenvolvedor de DL querendo gastar tempo com essas otimizações pesadas em vez de trabalhar com as próprias redes neurais. Além disso, requer um conjunto de habilidades e conhecimentos completamente diferentes, com o conhecimento de baixo nível da arquitetura de GPU (ou várias arquiteturas).

Portanto, aqui está um nicho para software de propósito especial para otimizar seus cálculos relacionados a DL, e NVIDIA TensorRT é um exemplo dessa classe de software, dedicado especificamente à inferência (mas acho que geralmente funciona em níveis mais elevados do que descrevi) , outros podem ser implementados em estruturas DL (como temos opções de otimização em compiladores) e bibliotecas especiais.

Talvez uma vez tenhamos uma IA especial para resolver esses problemas de otimização (como o Google fez em seus papéis). Mas de qualquer maneira, o desempenho máximo é um proxy do desempenho no mundo real, portanto, trate-o com sabedoria. Você verá exemplos de desempenho real em comparação com o desempenho de pico em breve.

Você pode encontrar as tabelas com os dados e comparações no meu Google Doc aqui.

Para efeito de comparação, o novo Intel Core i9 Extreme Edition de 18 núcleos (i9-7980XE) com 160 W TDP e preço recomendado de US $ 1999 é chamado de chip de PC para consumidor de ‘Primeira velocidade teraflop’ (mas não tenho certeza exatamente de quais TFLOPS são mencionados, Suponho que FP64). Metade do preço GTX 1080 Ti oferece 10x mais TFLOPS. Aqui está uma versão mais popular com um pouco de história.

Calcular FLOPS para processadores modernos é complicado devido a recursos como vetorização, multiplicação-adição fundida, hyperthreading, modo “turbo” e assim por diante. Podemos fazer estimativas aproximadas. Intel Haswell / Broadwell / Skylake executa 32 FLOPs SP / ciclo, Skylake-X executa 64 FLOPs SP / ciclo (graças ao AVX-512, consulte a postagem sobre CPU da série para obter mais detalhes sobre AVX-512).

Portanto, para um único 7980XE de 18 núcleos (Skylake-X) trabalhando na frequência de base de 2,60 GHz (no modo Turbo pode ser de até 4,20 GHz), o desempenho máximo em GFLOPS é 18 * 2,6 * 64 = 2995, tão próximo de 3 TFLOPS FP32. É 3 vezes maior do que a “velocidade teraflop”.

Talvez seja porque o comportamento da frequência é complexo, especialmente no caso dos modos AVX. A frequência base é aplicável apenas a cargas de trabalho não AVX. Para cargas de trabalho pesadas em AVX-512, a CPU reduz a frequência do clock. Se o artigo mencionasse o desempenho do FP64 e a frequência base AVX fosse inferior a 2,60 GHz, então 1 TFLOPS FP64 poderia ser compreensível.

Para um i7-6850K de 6 núcleos (Broadwell) sem AVX, trabalhando na frequência de base de 3,60 GHz, a estimativa é 6 * 3,6 * 32 = 690 GFLOPS FP32.

Corrija-me se eu tiver cometido erros em algum lugar, pls.

BTW, se você conhece uma fonte confiável de métricas de desempenho de pico / real da Intel / AMD (em FLOPS, não uma pontuação especial), me avise. Parece que a Intel não gosta de participar dessas comparações.

FP32, FP16, INT8, INT4, precisão mista
Há uma tendência de usar FP16 (meia precisão) em vez de FP32 (precisão simples) porque cálculos de menor precisão parecem não ser críticos para redes neurais. Isso também torna a precisão dupla (FP64) inútil, porque a precisão adicional não fornece nada, embora seja mais lenta.

Há um modo de treinamento de precisão mista que usa representações de precisão simples e meia. A NVIDIA expandiu o conjunto de ferramentas disponíveis para computação de precisão mista desde a arquitetura Pascal e CUDA 8. A Intel também gosta do tópico, consulte o white paper de 19 de janeiro de 2018 chamado “Lower Numerical Precision Deep Learning Inference and Training”.

“O armazenamento de dados FP16 (meia precisão) em comparação com FP32 ou FP64 de maior precisão reduz o uso de memória da rede neural, permitindo o treinamento e a implantação de redes maiores, e as transferências de dados FP16 levam menos tempo do que as transferências FP32 ou FP64. Além disso, para muitas redes, a inferência de aprendizado profundo pode ser realizada usando cálculos inteiros de 8 bits (INT8) sem impacto significativo na precisão. ”

Além de possibilitar o treinamento e o armazenamento de modelos maiores, a mudança para FP16 normalmente oferece 2x de melhoria na velocidade (2x mais TFLOPS).
FP16 é nativamente suportado desde a arquitetura Tegra X1 e Pascal.

“Antes dessas partes, qualquer uso de dados FP16 exigiria que eles fossem promovidos para FP32 para fins computacionais e de armazenamento, o que significava que o uso do FP16 não oferecia nenhuma melhoria significativa no desempenho ou nas necessidades de armazenamento. Na prática, isso significava que, se um desenvolvedor só precisasse da precisão oferecida pelo cálculo FP16 (e o aprendizado profundo está se tornando rapidamente o exemplo de livro aqui), em um nível arquitetônico, a energia estava sendo desperdiçada computando essa precisão extra.

Mas existem ressalvas. A NVIDIA placa de vídeo quadro limitou severamente o desempenho de FP16 e FP64 CUDA em placas de jogos (incluindo 1080 Ti, Titan X / Xp). O desempenho do FP16 é 1/64 e o FP64 é 1/32 do desempenho do FP32.
(Setembro de 2018) A situação mudou agora com a arquitetura de Turing e a nova série de cartões de jogo RTX (RTX 2070/2080/2080 Ti). Os chips de Turing suportam cálculos FP16 irrestritos.

Mais sobre como comparar Tesla e Geforce.

AMD Radeon RX Vega não tem restrições para FP16, dando 2x desempenho em comparação com FP32, enquanto FP64 é mais lento (1/16).

INT8 é útil para fazer inferências mais rápidas. INT8 leva a t̶h̶e̶ ̶g̶o̶o̶d̶ ̶o̶l̶d̶ ̶8̶-̶b̶i̶t̶ ̶w̶o̶r̶l̶d̶ intervalo dinâmico significativamente mais estreito e menor precisão, e pode ser um desafio mudar completamente para aritmética inteira para redes neurais, mas converter redes existentes (treinadas originalmente usando FP32) funciona. Aqui estão algumas reflexões sobre isso. Pelo que entendi, não há bons casos de uso de INT8 para treinamento em GPUs.
INT8 requer sm_61 + (Pascal TitanX, GTX 1080, Tesla P4, P40 e outros). Você pode encontrar a capacidade de computação compatível com todos os chips NVIDIA aqui.

INT1 não existe como uma opção agora, mas existem muitos trabalhos sobre binarização de redes neurais (substituindo pesos flutuantes por conexões binárias 0/1): “Redes Neurais Binarizadas: Treinamento de Redes Neurais Profundas com Pesos e Ativações Restritas a +1 or -1 ”,“ XNOR-Net: Classificação ImageNet usando redes neurais convolucionais binárias ”e XNOR.AI,” How to Train a Compact Binary Neural Network with High Accuracy? ”,“ FINN: A Framework for Fast, Scalable Binarized Network Inferência ”, e assim por diante.

Aqui está uma breve visão geral e mais referências sobre aprendizado profundo binário. Isso leva a uma redução ainda mais radical dos requisitos de armazenamento e a cálculos mais rápidos. Esse tipo de cálculo se encaixa particularmente bem no FPGA, mas CPUs e outras opções também podem gostar. Não ficarei surpreso se a NVIDIA ou a Intel começarem a falar sobre isso uma vez. (Atualização de setembro de 2018: eles conseguiram.

Tanto o FP16 quanto o INT8 economizam memória e podem fornecer uma aceleração significativa em comparação ao FP32 (lembre-se de que o TensorRT mencionado na foto também faz muitas outras otimizações):

De Chris Gottbrath, slides da Nvidia
(Setembro de 2018) A Nvidia lançou recentemente o acelerador de inferência TESLA T4 com suporte para INT4, que é duas vezes mais rápido que o INT8. E há algumas palestras sobre INT1: “Temos alguns pesquisadores que publicaram trabalhos que mesmo com apenas quatro bits podem manter alta precisão com modelos extremamente pequenos, eficientes e rápidos. Você poderia até ir ao INT1, mas isso é um material bastante avançado e ainda é um tópico de pesquisa ”.

Desempenho TESLA T4 em FP16 / INT8 / INT4
INT4 é suportado por todos os chips da arquitetura de Turing.

Aqui está uma tabela resumida de acelerações / desacelerações FP16 / INT8 / INT4 / FP64 para muitas GPUs populares:

Desempenho nativo FP16 / FP64 / INT8 / INT4 em relação ao FP32
Avise-me se encontrar erros aqui ou deixe um comentário no arquivo de origem.
Sabendo disso, podemos fazer um gráfico para comparações FP16 (deixei aqui principalmente as GPUs recentes). As placas de jogo RTX parecem muito interessantes.

E um mesmo gráfico para INT8 (TOPS em vez de GFLOPS porque agora contamos operações inteiras, não as de ponto flutuante).

Os números para placas de 2017 e anteriores são calculados com base em seu desempenho FP32, enquanto os números para placas 2018 são da documentação da NVIDIA, e parece que eles calculam o desempenho INT8 com base no Tensor Core FP16 (consulte a próxima seção). Portanto, provavelmente há alguns erros neste gráfico, principalmente em relação ao Tesla V100 / TitanV, que também tem núcleos tensores (portanto, seus números devem ser maiores). Eu vou consertar isso em breve.

Núcleos tensores

A arquitetura Volta da NVIDIA tem núcleos de tensores adicionais e promete entregar cerca de 120 TFLOPS (FP16) para V100 (um pouco mais para Tesla V100, um pouco menos para Titan V). São números enormes e estão bem acima do gráfico com o valor máximo próximo a 15 TFLOPS (FP32). Cuidado, eu mudei aqui para TFLOPS (= 1000 GFLOPS).

(Setembro de 2018) A arquitetura de Turing e a nova série de placas de jogo RTX (RTX 2070/2080/2080 Ti) têm núcleos tensores a bordo. Assim, por exemplo, RTX 2080 Ti com mais de 100 TFLOPS FP16 parece muito promissor. Especialmente Founders Edition (FE no gráfico).

Podemos desenhar um gráfico com o desempenho FP16 para núcleos tensores:

cuDNN é compatível com Tensor Cores desde a versão 7. Kernels que usam Tensor Core Operations estão disponíveis para CNNs e RNNs para cálculos para frente e para trás. Mais detalhes estão aqui. cuDNN pode preferir não usar Operações do Tensor Core (por exemplo, quando o tamanho do problema não é adequado para a aceleração do Tensor Core) e, em vez disso, usar uma implementação alternativa baseada em operações regulares de ponto flutuante.

Você deve ligar manualmente usando as operações do Tensor Core configurando o modo matemático para CUDNN_TENSOR_OP_MATH, porque o padrão em cuDNN é CUDNN_DEFAULT_MATH e indica que as operações do Tensor Core serão evitadas pela biblioteca.

A NVIDIA afirma que “os Tensor Cores já têm suporte para treinamento de Deep Learning em uma versão principal ou por meio de solicitações pull em muitos frameworks de Deep Learning (incluindo Tensorflow, PyTorch, MXNet e Caffe2). Para obter mais informações sobre como ativar os Tensor Cores ao usar essas estruturas, consulte o Guia de treinamento de precisão mista. Para inferência de Deep Learning, a versão recente do TensorRT 3 também oferece suporte a Tensor Cores. ”

Os núcleos tensores parecem legais e os benchmarks NVIDIA são impressionantes:

Comparação de desempenho da convolução no Tesla V100 (Volta) com Tensor Cores versus Tesla P100 (Pascal). A comparação é entre as médias geométricas dos tempos de execução das camadas de convolução de cada rede neural. Tanto o V100 quanto o P100 usam dados de entrada / saída FP16 e computação FP32; V100 usa Tensor Cores, enquanto P100 usa FP32 fusão-multiplicação add (FMA). https://devblogs.nvidia.com/programming-tensor-cores-cuda-9/

O problema é que não está totalmente claro como abordar o desempenho máximo de 120 TFLOPS e, até onde eu sei, ninguém poderia alcançar uma aceleração tão significativa em tarefas reais. Deixe-me saber se você souber de bons casos.

O benchmark RNN ​​/ LSTM alcançou apenas até x2 speedup comparando Tesla V100 a P100.
O mesmo aumento de velocidade x2 comparando Tesla V100 a P100 em CNNs.
O benchmark CNN comparando Titan V com Titan Xp dá um aumento de velocidade próximo de x2 (principalmente devido à mudança para FP16 de FP32)
O benchmark Baidu fornece resultados semelhantes, obtendo menos de 20 TFLOPS em convoluções com Tesla V100 Mixed Precision. Isso está longe de 120 TFLOPS.

Outro conjunto de tarefas de visão computacional mostra a imagem semelhante com desempenho V100 FP32 ligeiramente melhor em comparação com 1080 Ti, e a maior parte do ganho (perto de 2x) obtido ao mudar para FP16 (o que é totalmente compreensível). Seria interessante testar o P100 FP16 aqui.
O aumento de velocidade 2x é legal, mas não tão legal quanto a diferença teórica de 12x entre o desempenho de pico de P100 e V100.

(Abril de 2019) Com núcleos tensores e cálculos FP32 / 16 mistos, agora temos outra diferença interessante entre jogos e cartas profissionais. Existem dois tipos de operações de tensor FP16: FP16 com FP16 acumulado e FP16 com FP32 acumulado (o

que lhe dá mais precisão). E a GeForce FP16 w FP32 acc é limitada à taxa de transferência de meia velocidade!
Então, embora você obtenha 130 TFLOPS no Titan RTX e perto de 108 TFLOPS no 2080 Ti com FP16 w FP16 acc, os números para 2080 Ti caem pela metade com FP16 w FP32 acc (tendo cerca de 54 TFLOPS em 2080 Ti enquanto permanece o mesmo no Titan RTX).

Memória
Existem duas questões importantes relacionadas à memória: tamanho da memória e largura de banda da memória.
Tamanho da memória
Aqui está uma regra simples, quanto mais, melhor.
Eu acho que 11–12 Gb nas placas de jogo atuais é o padrão agora.

Existem muitos modelos NN que não cabem em 6 Gb de memória e, de repente, você descobrirá que 8 Gb também não são suficientes. Se você gosta de jogar NNs como o Lego (e eles são na verdade uma espécie de Lego), então você se verá combinando diferentes modelos e precisará de memória para isso.
Muitos TESLAs têm 16 Gb, e há novos modelos Quadro de arquitetura Turing (RTX 6000, RTX 8000) com 24 e 48 Gb GDDR6 respectivamente. Quadro GV100 (Volta) tem 32 Gb HBM2.

Titan RTX
(Abril de 2019) Titan RTX, anunciado em dezembro de 2018, tem uns tremendos 24 Gb (com a capacidade de juntar duas placas por NVLink). Foi bastante surpreendente, em comparação com os Titãs anteriores. Isso dá a você muito mais liberdade para experimentar redes maiores ou treinar com lotes maiores (o que economiza tempo).

Existem alguns truques como reduzir o tamanho do lote, converter modelos para FP16 e até INT8 (no caso de inferência), poda, binarização e assim por diante (mais abordagens para economizar memória). Alguns deles são fáceis de implementar (ou já são suportados na estrutura de sua escolha), outros não. De qualquer forma, você gostaria de ter mais memória disponível.

Largura de banda de memória

A parte complicada aqui é que alguns cálculos relacionados a NN são limitados por largura de banda, não limitados por computação! Isso basicamente significa que sua GPU quente e fria funciona significativamente abaixo de seu desempenho de pico, e você pode conseguir os mesmos resultados com o hardware mais barato ou pode torná-la mais eficiente com outro hardware (não necessariamente com desempenho maior, mas com largura de banda maior )
Aqui está uma postagem sobre computação e largura de banda de memória por Eugenio Culurciello et al.

O documento afirma que em algumas condições de pior caso, a eficiência da GPU está na faixa de 15-20% do desempenho teórico de pico! Então, seu novo Tesla V100 se transforma em GTX 1050 Ti – GTX 1060.
Nesses casos, observar a largura de banda pode ser útil. Por exemplo, GTX Titan Xp (10790 FP32 GFLOPS, 547 GB / s de largura de banda) pode ser mais rápido do que GTX 1080 Ti (10609 FP32 GFLOPS, 484 GB / s) em até 13% em tais tarefas de largura de banda limitada. E GTX Titan V com 652,8 GB / s parece ainda melhor. Tesla V100 tem 900 GB / s, P100 tem 720 GB / s.

(Setembro de 2018) RTX 2080 Ti tem 616 GB / s (+ 27% em comparação com 1080 Ti), RTX 2080 tem 448 GB / s.
(Abril de 2019) Titan RTX tem 672 GB / s.

Do artigo “Otimizando a eficiência da memória para redes neurais convolucionais profundas em GPUs”:
“As camadas convolucionais normalmente consomem mais tempo em uma rede inteira. Portanto, atingir altos rendimentos aritméticos tem sido o principal objetivo da otimização. … Contra-intuitivamente, observamos que as camadas convolucionais não são necessariamente limitadas por computação. Especificamente, para camadas convolucionais com pequenas dimensões C e N, o desempenho é, na verdade, limitado pela memória, semelhante à convolução 2D.

As camadas de pooling geralmente são combinadas com as camadas convolucionais nas CNNs. Em comparação com as camadas convolucionais, as camadas de agrupamento têm baixa complexidade aritmética, O (N * C * H * W). Seu desempenho é limitado principalmente pela eficiência da memória (ou seja, largura de banda e latência)
Cada etapa na camada softmax envolve uma matriz elementar ou um cálculo de matriz-vetor. A baixa intensidade aritmética nessas operações de vetor de matriz e a comunicação de dados intermediária em diferentes etapas também os tornam limitados pela memória. ”

Em implementações RNN típicas, a matriz de peso recorrente deve ser recarregada da memória em cada etapa de tempo, tornando os cálculos RNN um limite de largura de banda. Devido à sua sequencialidade inerente, é difícil fazer o RNN usar todos os recursos da GPU.

Existem algumas soluções (como RNN persistente) para transformar um problema de limite de largura de banda em um problema de limite de computação. De acordo com o artigo sobre RNNs persistentes:

“A taxa de transferência de ponto flutuante de pico de um Titan X é 6.144 TFLOP / s. Uma implementação direta de um RNN usando operações GEMM atinge 0,099 TFLOP / s em um tamanho de camada de 1152 usando kernels GEMM da Nervana Systems em um tamanho de minilote 4. Nossa implementação RNN Persistente inicial com a mesma camada e tamanho de minilote atinge mais de 2,8 TFLOP / s resultando em um aumento de 30x ”.

Existem muitas outras maneiras de não explorar todo o potencial de sua GPU e tornar sua rede neural lenta, começando com tamanhos de lote incorretos e indo para problemas mais complexos. Do artigo anterior sobre otimização da eficiência da memória:

“Além disso, mesmo para as camadas que sempre foram consideradas limitadas por computação, ou seja, camadas convolucionais, descobrimos que a escolha do layout de dados adequado pode levar a uma melhoria de desempenho de até 2,3x.“

Existe um modelo de desempenho da linha de telhado proposto por Samuel Williams, Andrew Waterman e David Patterson, U.C. Berkeley, que dá uma melhor compreensão do desempenho real dos cálculos:

Fonte: http://cadlab.cs.ucla.edu/~cong/slides/HALO15_keynote.pdf
Aqui está um exemplo de benchmark NN do artigo sobre TPU do Google (mais sobre isso nas partes posteriores) feito na GPU K80:

Você vê que a maioria dos NNs trabalha abaixo do desempenho de pico, às vezes significativamente abaixo. E alguns deles estão realmente na área limitada por restrições de largura de banda. Portanto, mantenha isso em mente. Mais informações sobre o Roofline.

Aqui está uma palestra recente do grupo de produtos Intel AI na CogX 2018 mencionando o modelo Roofline com exemplos destacando que uma otimização adequada das comunicações pode melhorar significativamente o desempenho (por exemplo, 50x).

Sistemas multi-GPU

Há uma tendência de usar configurações multi-GPU de sistema único e até configurações multi-GPU distribuídas de vários sistemas. Resolve parcialmente problemas com desempenho e memória limitados.

Máquina única, várias GPUs trabalhando em tarefas separadas

Em primeiro lugar, não se trata de SLI, você deve ter ouvido falar nos bons velhos tempos dos jogos de computador. SLI é uma tecnologia para vincular 2–4 GPUs para compartilhar o trabalho de renderização de uma imagem. Trata-se apenas de renderizar gráficos.

Em CUDA (que se trata de cálculos, não gráficos), você pode acessar diretamente qualquer GPU disponível em seu sistema, portanto, basta adicionar várias GPUs e usar qualquer uma delas. Você pode escrever seu programa para fazer o que quiser, carregando dados em qualquer GPU e executando cálculos em uma GPU de sua escolha.

Normalmente, os engenheiros de aprendizado profundo não escrevem código CUDA, eles apenas usam os frameworks que gostam (TensorFlow, PyTorch, Caffe, …). Em qualquer uma dessas estruturas, você pode informar ao sistema qual GPU usar.

Várias GPUs trabalhando em tarefas compartilhadas (host único ou host múltiplo)

Mas escolher o dispositivo específico para treinar sua rede neural não é tudo. É uma maneira normal se você tiver que treinar vários modelos de uma vez (talvez tentando parâmetros diferentes, então podemos chamar esse modo de hiperparâmetro paralelo). E se você quiser treinar modelos maiores mais rápido?

Portanto, você precisa dividir o trabalho em várias GPUs em seu sistema (e entre vários sistemas também). O treinamento distribuído é a resposta.

Existem duas abordagens principais para paralelizar o treinamento da rede neural: paralelismo de modelo e paralelismo de dados.

No paralelismo de modelos, diferentes máquinas no sistema distribuído são responsáveis ​​pelos cálculos em diferentes partes de uma única rede – por exemplo, cada camada na rede neural pode ser atribuída a uma máquina diferente.

No paralelismo de dados, diferentes máquinas possuem uma cópia completa do modelo; cada máquina simplesmente obtém uma parte diferente dos dados e os resultados de cada uma são de alguma forma combinados.

De SkyMind docs
O paralelismo de dados é mais popular, mas essas abordagens não são mutuamente exclusivas. E, em alguns casos, você precisa dividir seus modelos em várias máquinas, simplesmente porque o modelo é muito grande para uma única máquina. Veja, por exemplo, Google NMT:

A arquitetura modelo do GNMT, sistema de tradução automática neural do Google. O modelo é particionado em várias GPUs para acelerar o treinamento. Em nossa configuração, temos 8 camadas de codificador LSTM (1 camada bidirecional e 7 camadas unidirecionais) e 8 camadas de decodificador.

Com essa configuração, uma réplica do modelo é particionada em 8 vias e colocada em 8 GPUs diferentes, geralmente pertencentes a uma máquina host. A camada softmax também é particionada e colocada em várias GPUs. Dependendo do tamanho do vocabulário de saída, podemos executá-los nas mesmas GPUs que as redes de codificadores e decodificadores ou executá-los em um conjunto separado de GPUs dedicadas.

NVIDIA tem uma Biblioteca de Comunicações Coletivas (NCCL) que implementa primitivas de comunicação coletiva multi-GPU e multi-nós com desempenho otimizado para GPUs NVIDIA. Os desenvolvedores de estruturas de aprendizado profundo e aplicativos HPC podem contar com as rotinas NCCL altamente otimizadas, compatíveis com MPI e com reconhecimento de topologia, para aproveitar ao máximo todas as GPUs disponíveis dentro e entre vários nós.

NCCL 1.x foi limitado a intranós, NCCL 2.x oferece suporte a configurações de vários nós:

A Intel tem uma biblioteca semelhante chamada Machine Learning Scaling Library (MLSL), a AMD tem a ROCm Communication Collectives Library (RCCL).

Muitos frameworks DL suportam treinamento distribuído: Distributed TensorFlow, Horovod for TensorFlow e Keras, PyTorch, Caffe2, CNTK, Deeplearning4j (usando Apache Spark), MXNet / Gluon, PaddlePaddle (framework do Baidu cujo nome é um acrônimo de PArallel Distributed Deep LEarning), é até o Apache SINGA (que não parece ter sido desenvolvido ativamente).

Essas soluções oferecem acelerações quase lineares para o número de cartões. Aqui está um benchmark baseado em CNTK usando NCCL 2:

E aqui está uma referência do Horovod do Uber:

O desempenho de treinar um modelo usando 128 GPUs é bastante impressionante e não está longe de ser o caso ideal. Os resultados semelhantes foram compartilhados pelo Baidu (Horovod na verdade é baseado em seu trabalho), e o Baidu publicou recentemente outro artigo interessante sobre dimensionamento de aprendizagem profunda.

Em suma, o treinamento distribuído em GPUs agora é uma commodity.

NVLink
NVIDIA NVLink é um caminho de alta largura de banda com baixo consumo de energia entre a GPU e a CPU.
Lembre-se da parte sobre CPUs, falamos sobre configurações x8 / x16 para PCIe. O PCI Express 3.0 (PCIe v.3) permite 985 MB / s por 1 via, portanto, 15,75 GB / s para links x16 (ou seja, duas vezes mais lento para configuração x8). Essa é a velocidade com que sua CPU troca dados com sua GPU.

PCIe v.4 (lançado no outono de 2017, provavelmente veremos Intel suportá-lo em 2018 e AMD em 2020, e o BTW já está disponível no chip POWER9 da IBM, mas este chip tem algo ainda melhor!) Permite uma comunicação duas vezes mais rápida (31,51 GB / s para x16), PCIe v.5 (será lançado em 2019) oferece suporte a velocidades duas vezes mais rápidas (63 GB / s para x16).

NVLink 1.0 / 2.0 permite 80/150 GB / s. Portanto, pode fazer sentido mesmo para uma única GPU. E há CPUs que o suportam. O IBM POWER8 + e posterior permite conectar até quatro dispositivos NVLink diretamente ao chip. POWER9 suporta NVLink 2.0. É uma pena que não tenhamos tais desktops disponíveis.

Aqui está um benchmark da largura de banda Host-GPU em diferentes configurações. E aqui está outro benchmark de jogo do RTX 2080 Ti em diferentes configurações. E aqui está o benchmark Radeon entre PCIe 2.0, 3.0 e 4.0.

Além de acelerar as comunicações de CPU para GPU para sistemas com uma conexão NVLink CPU, o NVLink também pode ter benefícios de desempenho significativos para comunicações GPU para GPU (ponto a ponto). Isso é ainda mais legal! Duas ou mais GPUs podem se comunicar diretamente, sem a necessidade de transferir dados por meio do hub central, a CPU. O treinamento distribuído deve ser mais rápido com NVLink.

Aqui está um artigo que enfoca esses benefícios ponto a ponto do NVLink.
A transferência de dados não é o único trabalho da GPU, então o benefício real será menor que a proporção entre as taxas de transferência de dados de pico, mas ajuda em tarefas reais. Aqui está um exemplo de cálculo de FFT 3D (acho que é o mais próximo de redes neurais entre os casos no papel):

Mais de 2x de aceleração para GPUs conectadas a NVLink em comparação com GPUs conectadas a PCIe 3.0. Isso é legal.

A AMD tem uma tecnologia semelhante chamada Infinity Fabric.

Mais um benefício do NVLink. Com o CUDA 6, a NVIDIA apresentou “uma das mais dramáticas melhorias no modelo de programação da história da plataforma CUDA”, a Memória Unificada.

A memória unificada cria um pool de memória gerenciada que é compartilhado entre a CPU e a GPU, eliminando a divisão CPU-GPU. A memória gerenciada pode ser acessada tanto pela CPU quanto pela GPU usando um único ponteiro. A chave é que o sistema migre automaticamente os dados alocados na memória unificada entre o host e o dispositivo, de forma que pareça memória da CPU para o código em execução na CPU e como memória da GPU para o código em execução na GPU.

Com largura de banda de 80 GB / s ou superior em máquinas com CPUs e GPUs conectadas a NVLink, isso significa que os kernels da GPU serão capazes de acessar dados na memória do sistema host na mesma largura de banda que a CPU tem para essa memória (para DDR4-3200 quad-channel que deve ser 4 * 25600 MB / s = perto de 100 GB / s, é inferior à largura de banda do NVLink 2.0) – muito mais rápido do que o PCIe. Porções de aplicativos de host e dispositivo serão capazes de compartilhar dados com muito mais eficiência e operar cooperativamente em uma estrutura de dados compartilhada, e suportar tamanhos maiores de problemas será mais fácil do que nunca.

Como isso poderia ajudar em aplicativos de aprendizado profundo? Obviamente, você não está limitado agora pelo tamanho da memória da GPU. Muitos aplicativos podem se beneficiar disso.

Se tivéssemos apenas um sistema POWER9 … (veja abaixo)
Parece que as estruturas DL atuais não oferecem suporte à memória unificada. E eu não ouvi dizer que há planos em algum lugar ainda. Você provavelmente terá que escrever do zero usando CUDA / cuDNN. Mas existe um movimento semelhante dedicado ao suporte de grandes modelos.

No NIPS’17, a Alibaba apresentou um artigo “Treinamento de modelos mais profundos por otimização de memória GPU no TensorFlow” com uma abordagem semelhante, sem usar memória unificada. Eles afirmam que “nossos testes mostram que ela [Memória Unificada] pode trazer uma perda de desempenho severa (no máximo dez vezes degradação)” e propuseram uma abordagem de base geral chamada “troca / entrada”, que é direcionada para qualquer tipo de rede neural . Além disso, eles projetaram um algoritmo de atenção com eficiência de memória para os modelos Seq2Seq. Uma abordagem semelhante da IBM descrita abaixo.

Eu esperava ver a transferência dessas ideias para o campo prático (sendo integrado em estruturas de DL) em breve, porque a memória limitada da GPU é uma restrição severa.

Em sistemas com CPUs x86 (como Intel Xeon), a conectividade com a GPU é apenas por PCI-Express (embora as GPUs possam se conectar umas às outras por meio de NVLink). Em sistemas com CPUs POWER8 / 9, a conectividade com a GPU é por meio de NVLink (além do NVLink entre GPUs).

NVLink não tem nada a ver com placas de jogos. Ele está disponível para placas NVIDIA profissionais como Quadro e Tesla.

(Setembro de 2018) As placas de jogo Turing agora têm NVLink!

As GPUs TU102 e TU104 (Titan RTX, RTX 2080/2080 Ti, mas _NOT_ 2070) incluem a segunda geração de interconexão NVLink de alta velocidade da NVIDIA, originalmente projetada na GPU Volta GV100, fornecendo conectividade multi-GPU de alta velocidade para SLI e outros casos de uso de multi-GPU. O NVLink permite que cada GPU acesse diretamente a memória de outras GPUs conectadas, fornecendo comunicações de GPU a GPU muito mais rápidas e permite combinar memória de várias GPUs para suportar conjuntos de dados muito maiores e cálculos mais rápidos na memória.

A GPU Turing TU102 (Titan RTX / RTX 2080 Ti) inclui dois links NVLink de segunda geração x8, e Turing TU104 (RTX 2080) inclui um link NVLink x8 de segunda geração. Cada link fornece largura de banda de pico de 25 GB / s por direção entre duas GPUs (largura de banda bidirecional de 50 GB / s). Dois links no TU102 fornecem 50 GB / s em cada direção ou 100 GB / s bidirecionalmente.

Portanto, colocar dois 2080 Ti e conectá-los usando NVLink parece ser útil. Você obterá uma GPU de 22 Gb de memória com 100 GB / s de interconexão desta forma.

No GTC’18, a NVIDIA anunciou que o NVSwitch é capaz de suportar 16 GPUs totalmente conectadas em um único nó de servidor e conduzir a comunicação simultânea entre todos os oito pares de GPU a 300 GB / s cada. Essas 16 GPUs podem ser usadas como um único acelerador de grande escala com 0,5 Terabytes de espaço de memória unificado e 2 PFLOPS FP16 de desempenho.

Supercomputadores Pessoais

A IA entra na era da democratização. Acontece em diferentes níveis. Um dos níveis é o nível de hardware.
O poder de processamento não está apenas se tornando maior, ele está se tornando mais disponível. O trabalho do Google na aprendizagem não supervisionada em grande escala do ano de 2011 (lembre-se de que o trabalho com NN processou 10 milhões de imagens e encontrou uma cara de gato) foi replicado em 2013 com recursos muito menores. Aqui está uma história da Wired sobre isso. As comparações de preços diferem entre o artigo da Wired ($ 1M → $ 20K) e os slides da NVIDIA ($ 5M → $ 33K), mas a tendência é óbvia. A GPU foi uma virada de jogo e o Deep Learning (com bons resultados) tornou-se muito mais acessível.

Há uma lista TOP500 de supercomputadores medidos pelo benchmark LINPACK em operações de ponto flutuante de precisão dupla (FP64). O benchmark resolve um sistema denso de equações lineares. Lembre-se de que, para redes neurais, geralmente são usados ​​FP32 / FP16, e a NVIDIA gosta de relatar seu desempenho em termos de cálculos FP16 (o que é compreensível, porque dá 4x grandes números).

Tomemos como exemplo NVIDIA GTX Titan V, com seu desempenho de pico FP64 de 6900 GFLOPS = 6,9 TFLOPS. Corresponde ao melhor supercomputador do mundo em 2001-2002 (IBM ASCI White com velocidade de pico de 7.226 TFLOPS) e um supercomputador no 500º lugar (ainda um supercomputador legal) da lista TOP500 em novembro de 2007 (o nível de entrada para a lista era o 5,9 TFlop / s).

É incorreto comparar FP16 / FP32 com métricas de desempenho FP64, mas para tarefas que podem tolerar menor precisão (redes neurais podem) e em termos de equações numéricas resolvidas em uma unidade de tempo, a placa de jogo moderna NVIDIA GTX 1080 Ti (com mais de 10 TFLOPS FP32 de pico de desempenho) é um supercomputador de desktop do passado recente.

Aqui está um artigo de notícias de 2002 sobre o supercomputador 11 teraflops:

“A faixa de processamento de 1 a 10 teraflops está abrindo uma capacidade revolucionária para aplicações científicas. É qualitativamente diferente do que fomos capazes de fazer antes ”, disse Seager. A diferença está no número de variáveis ​​que o computador pode processar ao mesmo tempo e na resolução da simulação. Além de as simulações estarem muito mais próximas de experimentos físicos realistas, ele disse, leva muito menos tempo para convergir para uma aproximação razoável. Este tipo de capacidade eleva a simulação por computador ao mesmo nível que o experimento físico e a teoria, portanto, nos permitirá fazer um trabalho científico inovador ”

Agora, muitos de nós temos poder de processamento comparável (e o armazenamento também ficou muito mais barato) e pode, em princípio, ser um laboratório científico com um passado razoável fazendo pesquisas de nível mundial. Mas quem se importa? .. Todo mundo contando hashes …

Crescimento rápido do desempenho dos supercomputadores, com base nos dados do site top500.org. O eixo y logarítmico mostra o desempenho em GFLOPS.

Então, a tendência continua, e o supercomputador moderno 500º lugar no mundo estará em sua área de trabalho daqui a 10 anos (ou talvez em um telefone, relógio, jaqueta, escova de dentes, sob a pele? Lembre-se, o tamanho dos “10 TFLOPS ”Pacote reduzido drasticamente também).

Para comparação, o processador móvel Kirin 970 da Huawei (já em smartphones, mais sobre IA móvel em posts posteriores) com uma Unidade de Processamento de Rede Neural (NPU) a bordo é dito para entregar 1,92 TFLOPS FP16. É o supercomputador de melhor desempenho de 1997 (mas lembre-se novamente da diferença entre FP16 / FP64).

NVIDIA DGX
A NVIDIA também segue essa onda. Existem dois Supercomputadores de Deep Learning chamados de servidor DGX-1 e estação DGX.

DGX-1 (solução de montagem em rack 3U) começou com 8xTESLA P100 (DGX-1P), agora atualizado para 8xTESLA V100 (DGX-1V) fornecendo cerca de 1000 TFLOPS ou 1 PFLOPS FP16 (mas apenas 62,4 TFLOPS FP64, aqui não é 1/4 de desempenho de FP16 porque o desempenho do FP16 é medido para núcleos tensores, que funcionam apenas com FP16, portanto, é apenas 8 * 5300 TFLOPS FP64 para TESLA V100). Em termos de desempenho FP16 que está próximo do FP64 (sim, novamente, essa não é a maneira certa de comparar) o desempenho do supercomputador nº 1 de 2008–2009 (Roadrunner com 1.105 PFLOPS) e pode estar na lista de novembro de 2017.

BTW, há # 149 DGX SaturnV Volta36 (1,8 PFLOPS, 97 KW, algum V100, talvez 36 DGX-1V?) E # 36 DGX Saturn V (4,9 PFLOPS, 349,5 KW, composto de 124 DGX-1P com P100) pronto para ser atualizado para um novo composto de 660 nós por 8xV100 cada, resultando em um total de 5280 aceleradores de GPU Volta rendendo 40 PFLOPS FP64 (e teoricamente 660 PFLOPS FP16 em núcleos de tensor), o que em teoria o colocaria entre os dez principais sistemas no mundo mesmo em ponto flutuante de precisão dupla. Isso é impressionante.

BTW, que rede neural você treinaria se tivesse este supercomputador 660 PFLOPS em disponibilidade?
DGX-1 com P100 tem preço de $ 129.000, DGX-1 com V100 tem preço de $ 149.000.

No GTC’18, a NVIDIA anunciou o DGX-2, uma máquina com 16 TESLA V100 de 32 GB (duas vezes mais GPUs com duas vezes mais memória por GPU do que o V100 anterior), resultando em 512 GB de memória de GPU HBM2 total, 1,5 TB de memória do sistema e 2 desempenho PFLOPS FP16 .

DGX-2
Com DGX-2 você tem 4x mais memória e 2x mais desempenho em comparação com DGX-1.
O DGX-2 tem preço de $ 399.000.
Aqui está uma comparação de preço-desempenho mais detalhada de DGX-1 e DGX-2.
DGX Station (solução de desktop / escritório) representa um ponto intermediário econômico para adquirir estações de trabalho de computação acelerada com desempenho otimizado pela metade do preço e metade do desempenho de seu irmão de fator de forma de servidor (o DGX-1). É cunhado como “o primeiro supercomputador pessoal do mundo para o desenvolvimento de IA de ponta”. A IDC espera que essa tendência continue.

Ele contém 4xTESLA V100 e oferece até 500 TFLOPS FP16 (desempenho máximo). No momento, ele é vendido por $ 49.900 (o preço normal é $ 69.000).

Agora é apenas colocar vários TESLAs V100 em uma única máquina, há também conexões NVLink (que sabemos ser legal!) Entre GPUs, 4 placas de interface de rede InfiniBand de 100 Gb e talvez algumas outras otimizações. Como muitas estações de trabalho tradicionais, a Estação DGX foi projetada para operar com ruído limitado. Ele usa uma tomada padrão de 115–240 VAC e pode consumir até 1500W.
IBM Minsky etc.

Muitos já ouviram falar sobre DGX, mas uma pessoa rara sabe que a IBM tem um projeto semelhante chamado Minsky.
Power Systems S822LC (“Minsky”)
Em setembro de 2016, a IBM apresentou um Power Systems S822LC para High Performance Computing (codinome “Minsky”), contendo duas CPUs Power8 (8–10 núcleos cada) e quatro GPUs Nvidia Tesla P100. “Minsky” foi o segundo sistema no mercado a usar a GPU P100 da Nvidia (o primeiro foi DGX-1).

A diferença importante com a máquina DGX-1 da Nvidia é que o DGX-1 usa portas NVLink para interconectar 8 * placas Tesla P100 SMX2, mas as placas são colocadas em uma placa-mãe com dois processadores “Haswell” Xeon E5 v3 da Intel e da GPU – O link da CPU está usando links PCI-Express regulares por meio de um quádruplo de switches PCI:

Com a máquina Minsky, a IBM está usando portas NVLink na CPU Power8 para comunicação GPU-CPU também. As duas conexões NVLink entre a CPU POWER8 e as GPUs Tesla P100 permitem a transferência de dados 2,5 vezes mais rápido do que os servidores tradicionais baseados em Intel x86 que usam PCIe x16 Gen3:

Portanto, a máquina DGX-1, que a Nvidia ajustou especificamente para aprendizado profundo, tem mais GPUs, mas eles são menos fortemente acoplados às CPUs Intel Xeon e têm menos largura de banda entre as GPUs também.
O sistema IBM tem menos GPUs e mais largura de banda entre os elementos de computação. A IBM está direcionando esta caixa Minsky para cargas de trabalho HPC, mas não há razão para que ela não possa ser usada para aprendizado profundo.

De acordo com a The Next Platform: “Com dois dos chips Power8 de dez núcleos rodando a 2,86 GHz, 128 GB de memória principal e quatro dos aceleradores Tesla P100, Boday diz que a IBM cobrará menos de US $ 50.000. A Nvidia está cobrando US $ 129.000 por um sistema DGX-1 com oito das placas Tesla mais sua pilha de software de aprendizagem profunda e suporte para ela. Em outras palavras, os preços Minsky da IBM são consistentes com os preços DGX-1 da Nvidia. ”

Existe um preço chamado “IBM Power System S822LC para Computação Comercial”, mas parece que essas máquinas estão sem GPUs.

Existe outro produto chamado “IBM Power System S822LC para computação de alto desempenho” com até 4 TESLA P100, mas o preço é “Fale conosco”.

Abril de 2017, a IBM anunciou que esses servidores estão planejados para chegar à infraestrutura de computação do Bluemix, mas não consigo localizá-los. No momento, existem apenas 4 servidores bare metal POWER8, nenhum dos quais tem GPUs, e todos os servidores GPU são servidores Intel Xeon.

Power Systems AC922 (“Newell”)

05 de dezembro de 2017 A IBM revelou seus servidores baseados em POWER9 voltados para Enterprise AI. Power Systems AC922 é uma opção mais recente e muito mais interessante. O AC922 conhecido de várias maneiras pelo codinome “Witherspoon” ou “Newell”, é o bloco de construção dos sistemas CORAL sendo implantados pelo Departamento de Energia dos EUA – “Summit” no Oak Ridge National Laboratory e “Sierra” no Lawrence Livermore National Laboratório.

Ele contém 2xPOWER9 CPUs (disponíveis em configurações com qualquer lugar entre 16 e até 44 núcleos) e 2 a 6 GPUs NVIDIA Tesla V100 com NVLink. O AC922 estende muitos dos elementos de design introduzidos nas caixas Power8 “Minsky” com foco em permitir a conectividade a uma variedade de aceleradores – GPUs Nvidia, ASICs, FPGAs e dispositivos conectados a PCIe – usando uma variedade de interfaces. Além de serem os primeiros servidores a incorporar PCIe Gen4, os novos sistemas suportam os protocolos NVLink 2.0 e OpenCAPI, que oferecem quase 10x a largura de banda máxima de sistemas x86 baseados em PCI-E 3.0, de acordo com a IBM.

Mais sobre AC922 aqui.

Até agora, a Intel detém um monopólio virtual de chips para servidores, com bem mais de 90% do mercado. Mas com o Power9, a IBM espera conquistar 20% do mercado até 2020.

A IBM fornece a plataforma PowerAI, que inclui as estruturas de aprendizado profundo mais populares e suas dependências, e contém a biblioteca de aprendizado profundo distribuído (DDL) (a IBM Research foi capaz de escalar estruturas de aprendizado profundo em até 256 GPUs com até 95 por cento de eficiência):

O PowerAI requer instalação no IBM Power Systems S822LC para infraestrutura de servidor HPC ou AC922 (mais informações sobre versões do PowerAI).

Entre os recursos interessantes desenvolvidos pela IBM está o Large Model Support (LMS). O LMS usa a memória do sistema em conjunto com a memória da GPU para superar as limitações de memória da GPU no Deep Learning Training. E isso faz sentido perfeitamente em um sistema como o AC922 (lembre-se da seção Memória Unificada na discussão sobre NVLink).

Aqui estão os resultados da execução de 1000 iterações de um modelo GoogLeNet ampliado (tamanho do minilote = 5) em um Dataset ImageNet ampliado (tamanho de corte de
2240×2240, portanto, imagens 100x maiores do que no ImageNet comum) em duas plataformas (a principal diferença entre as duas plataformas é NVLink 2.0):

O artigo da IBM correspondente (da conferência SysML’18 que aconteceu de 15 a 16 de fevereiro de 2018) afirma adicionalmente: “Também observamos que o LMS pode melhorar o desempenho do treinamento maximizando a utilização da GPU. Para Resnet-152 no Caffe, o tamanho máximo do lote sem LMS foi de 32 e a taxa de transferência correspondente foi de 91,2 imagens / s. Com o LMS, conseguimos aumentar o tamanho do lote para 48 e melhoramos o rendimento para 121,2 imagens / s, apesar da sobrecarga de comunicação CPU-GPU. ”

Existem benchmarks LMS adicionais disponíveis.
POWER9 com NVLink parece legal. Mais sobre testes de AI / HPC aqui.
Os servidores Microway AC922 custam entre US $ 55.000 e US $ 75.000. Existem também outras opções. Por exemplo, a Microway vende servidores 2 * Xeons + 2–4 V100 por $ 24.000 a $ 75.000 e servidores OpenPOWER com 2 * POWER8 + 2–4 P100 por $ 35.000 a $ 75.000.

Mais análises em AC922.
Talvez veremos alguns anúncios interessantes na conferência IBM Think 2018 entre 19 e 22 de março.
Supercomputadores caseiros

Eu gostaria de ter um AC922 disponível, mas as soluções DGX e IBM estão na faixa de preço empresarial, não para entusiastas de IA / SMB. Portanto, outras soluções são necessárias.

Eu esperava aqui reproduzir o caso do Hadoop e do hardware comum.
Entre as soluções mais poderosas desse tipo está a construção de referência chamada DeepLearning11 da STH.

É um design de raiz única com 10x NVIDIA GeForce GTX 1080 Ti, solução de fator de forma 4.5U. Oferece desempenho máximo teórico próximo a 100 TFLOPS FP32 e 110 GB de memória. 8 Tesla V100 SXM2 terá um total de 125 TFLOPS FP32 (atenção, não é FP16 que a NVIDIA está relatando normalmente) e 128 Gb de memória. Veja a discussão de HN sobre isso.

O custo total é de cerca de US $ 16.500 (suponho que os custos atuais serão mais altos porque os preços aumentaram desde o verão de 2017). Compare isso com DGX-1. Sim, não há NVLink aqui, talvez não haja outras otimizações e há outros problemas (por exemplo, não tem suporte FP16 normal), mas em relação à relação desempenho / preço, esta solução é legal.

Se você precisa de tal potência, mas não pode pagar o DGX-1, a única opção agora é usar a nuvem. Mas a nuvem é cara. As instâncias do AWS EC2 p3.16xlarge (8 * Tesla V100 com NVLink) com o preço atual sob demanda de $ 24,48 custarão $ 17.625 para uma execução de 30 dias.

Todo o DeepLearning11 é mais barato. Sim, adicione os custos de eletricidade ao seu próprio servidor e outros custos. Mas ainda é legal. A escolha é mais óbvia se você precisar de uso extensivo de GPUs. A nuvem é muito cara.
Existem outras soluções no mercado também (por exemplo, este um servidor 8 * 1080 Ti, e você pode encontrar mais facilmente).

(Setembro de 2018) Existem alguns supercomputadores pessoais anunciados usando RTX 2080 Ti. Acho que você pode encontrar mais desses na Internet.

Conselho prático
Do ponto de vista prático, o bom é que as barreiras de entrada estão cada vez menores.
FP32
No momento, se você tem como objetivo o desempenho do FP32, a placa de vídeo mais econômica parece ser a GTX 1080 Ti (agora os preços aumentaram de cerca de US $ 700 para mais de US $ 1100).

(Setembro de 2018) RTX 2080 Ti poderia ser mais econômico para uma tarefa específica por causa do melhor desempenho (aqui eu me importo apenas com FP32) + largura de banda de memória + eficiência de energia, mas depende do preço que você pode obter 2080 Ti ou 1080 Ti. Este último deve ficar mais barato. O principal lucro do RTX está no FP16.

GTX Titan Xp (~ $ 1600) oferece desempenho quase semelhante com memória um pouco maior (12 Gb vs 11 Gb) e largura de banda, mas a diferença de preço não vale necessariamente a pena. BTW não confunda Titan Xp com Titan X (Pascal) e Titan X (Maxwell). São três placas diferentes com chips e desempenhos diferentes. Você pode ver as diferenças na minha Tabela de comparação de GPU.

Titan V ($ 3000) é 30% mais rápido (de novo, agora estou falando sobre FP32), mas muito caro.
(Abril de 2019) Titan RTX (~ $ 2500) mudou significativamente o cenário, mesmo em FP32. Em primeiro lugar, seus 24 Gb de memória são bastante impressionantes e oferecem muito mais liberdade. Em segundo lugar, é mais rápido. Terceiro, seus recursos FP16.

As placas Tesla e Quadro são extremamente caras e a maioria dos pesquisadores e profissionais usa placas de jogos. O único nicho prático importante para Teslas poderia ser se você estiver construindo seu próprio datacenter. NVIDIA proibiu o uso de Geforce em datacenters recentemente e não gosta de fornecedores de servidores que usam placas de jogo Geforce em vez de Quadro e Tesla.

Se você não se importa com o desempenho puro, mas mais com as relações desempenho / preço e / ou desempenho / potência (o que geralmente é sensato), a situação é um pouco mais complexa.

Para desempenho / potência (GFLOPS por Watt), a arquitetura Volta é a melhor (mesmo sem levar em consideração Tensor Cores / FP16). Entre a arquitetura Pascal, as placas mais modestas como 1080 comuns (não Ti) e 1070 Ti parecem melhores (mas não significativamente). E lembre-se de que eles têm menos memória e largura de banda menor.

(Abril de 2019) A arquitetura de Turing (cartões RTX) é mais eficiente em termos de GFLOPS / Watt. Veja a tabela abaixo para detalhes.

Para as comparações de desempenho / preço, você deve recalcular constantemente essas relações, porque os preços mudam. Além disso, existem diferentes fabricantes, de modo que o mesmo 1080 Ti está disponível em dezenas de variantes. Eles não são completamente iguais, mesmo em termos de desempenho.

Existem placas com frequência de clock aumentada, existem placas especialmente projetadas para overclocking. Pode dar um impulso adicional no desempenho, mas não espere que seja enorme, por ex. Asus ROG STRIX GTX 1080 Ti OC (edição para overclockers) tem 11247 FP32 GFLOPS em vez de 1080 Ti comum com 10609 GFLOPS (aumento tão próximo de 6%).

Eu uso para mim uma Tabela de comparação de GPU já mencionada e convido a comunidade a pegar a bandeira e expandi-la (ou criar um serviço / repositório github / qualquer outro) para incluir diferentes fabricantes, adicionar números de desempenho (ou pelo menos estimativas), e talvez implementar a atualização regular dos preços. Pode ser um serviço útil para a comunidade.

FP16
É mais complicado com o desempenho do FP16. Todos os cartões de jogo não são uma opção aqui, porque seu FP16 é significativamente limitado. A única exceção parece ser o Titan V. Ele pode atingir 27,6 TFLOPS FP16. Além disso, possui núcleos de tensor com desempenho de pico teoricamente possível de 110 TFLOPS. Se fosse possível obter tal aceleração …

Tesla V100 parece extremamente caro como outros Teslas. Se Titan V for realmente irrestrito no FP16, então a diferença entre Titan e Tesla diminui significativamente. Mas ainda existe (NVLink e assim por diante).

(Set 2018) RTX 2080 Ti e toda a série RTX parece ser uma opção muito boa agora porque FP16 não é restrito e essas placas têm núcleos tensores. Além de melhor largura de banda de memória, NVLink e assim por diante.
(Abril de 2019) Titan RTX com 24 Gb de memória é uma opção muito interessante agora.
Veja os gráficos de desempenho acima.

 

INT8
Se você está planejando executar inferência em uma GPU, a escolha é semelhante ao FP32, uma boa placa de jogo parece muito bem.
(Setembro de 2018) Especialmente o cartão de jogo da série RTX. Lembre-se de seus núcleos tensores e suporte de INT4 (e possivelmente INT1)

Novamente, consulte os gráficos de desempenho acima.
AMD

Prometi falar sobre a AMD.

GPUs
E quanto às GPUs AMD (quero dizer Radeon), elas parecem ser muito boas (e criptomoedas podem confirmar isso), especialmente tendo em mente seu desempenho irrestrito FP16 (quero dizer, 2x do FP32). O Radeon RX Vega 64 promete oferecer desempenho de até 23 TFLOPS FP16, o que é muito bom.
Se apenas as estruturas pudessem suportá-lo …

OpenCL
Originalmente, ele começou no OpenCL.
Existem algumas tentativas como OpenCL Caffe, mas planos pouco claros para Caffe2, nenhum suporte oficial no Tensorflow (mas há alguns não oficiais), nenhum suporte para PyTorch e assim por diante.

A equipe PyTorch disse:

“Oficialmente, não estamos planejando nenhum trabalho OpenCL porque:
A própria AMD parece estar se movendo em direção ao HIP / GPUOpen que tem um transpiler CUDA (e eles fizeram algum trabalho na transpilação do back-end do Torch)

A Intel está movendo seu valor de velocidade e otimização para MKLDNN
O suporte OpenCL genérico tem um desempenho estritamente pior do que usar CUDA / HIP / MKLDNN quando apropriado. ”

ROCm / HIP / MIOpen

Radeon Open Compute Platform (ROCm) é uma plataforma de classe HPC / Hyperscale de código aberto para computação GPU. A versão atual é 1.7.

Heterogeneous-compute Interface for Portability (HIP), é uma API de tempo de execução C ++ e linguagem kernel que permite aos desenvolvedores criar aplicativos portáteis que podem ser executados em AMD e outras GPUs. Ele permite que os desenvolvedores escrevam aplicativos para uma sintaxe C ++ e API comuns. O código C ++ resultante pode ser compilado com HCC da AMD e NVCC da Nvidia. O código HIP oferece o mesmo desempenho que o código CUDA nativo, além dos benefícios de ser executado em plataformas AMD.

Como Cuda e HIP são linguagens C ++, a portabilidade de Cuda para HIP é muito mais fácil do que portar de Cuda para OpenCL. Para reduzir ainda mais a curva de aprendizado ao mudar de Cuda para HIP, a AMD desenvolveu a ferramenta hipify para automatizar a conversão do núcleo do seu aplicativo.

Comparado ao OpenCL, o HIP oferece vários benefícios. Aqui está uma comparação de sintaxe entre Cuda / HIP / OpenCL.

MIOpen é uma Biblioteca de Inteligência de Máquina da AMD, uma biblioteca acelerada por GPU para algoritmos de aprendizado de máquina, que é semelhante ao cuDNN. Aqui está um guia de transferência de cuDNN para MIOpen.

O suporte da estrutura ROCm está principalmente em andamento. No momento, apenas o Caffe parece pronto (mais) e há um trabalho ativo no Tensorflow (mais).
Acho que a falta de suporte do framework é o principal bloqueador no momento. As GPUs são boas e interessantes, mas é difícil usá-las com a maioria dos frameworks.
Existem algumas outras soluções de framework interessantes, como PlaidML da Vertex.AI. Ele é compatível com AMD R9 Nano, RX 480 e Vega 10. Você pode executar Keras CNNs no PlaidML, mas a solução tem algumas limitações significativas (por exemplo, não é compatível com RNNs). Veja uma discussão sobre HN.

Talvez projetos como NNVM / TVM ajudem. O backend ROCm para GPUs AMD é compatível com TVM. Parece que a solução é adequada para implantar modelos já treinados em diferentes frameworks (graças ao suporte ONNX / CoreML e MXNet / Keras) para diferentes hardwares, mas não tenho certeza se você pode usá-lo para treinamento agora.

Tecido Infinito
Infinity Fabric (IF) é uma conexão coerente (a coerência do cache é mantida em vários processadores) para uso em um chip, em um módulo de vários chips (MCM) e para conectividade entre soquetes.
Comparando IF com NVLink, há uma diferença. Enquanto o NVLink pode fornecer transferência rápida de dados entre CPUs / GPUs, IF também pode ser usado dentro de um chip (CPU ou GPU).

Usar o Infinity Fabric no Vega 10 (o núcleo das placas Vega 64/56) faz parte dos esforços da AMD para desenvolver um tecido sólido e usá-lo em toda a empresa. O Vega 10 é o primeiro processador gráfico AMD construído usando a interconexão Infinity Fabric.

No Vega 10, o Infinity Fabric vincula o núcleo gráfico e os outros blocos lógicos principais no chip, incluindo o controlador de memória, o controlador PCI Express, o mecanismo de exibição e os blocos de aceleração de vídeo.
Parece que agora, como usuário final da GPU, você não pode lucrar com o IF. Seu uso no Vega 10 está relacionado à arquitetura interna do chip, não à comunicação entre CPU / GPU. Corrija-me se eu estiver errado. Não está claro para mim se dá algo ou não em uma configuração com Threadripper / EPYC + Radeon.

Aqui está uma frase interessante de Raja Koduri, o [ex-] vice-presidente sênior e arquiteto-chefe do Radeon Technologies Group da AMD (agora vice-presidente sênior do Core and Visual Computing Group, gerente geral de soluções de computação de ponta e arquiteto-chefe da Intel Corporation) : “Não mencionamos nenhum design de multi GPU em um único ASIC, como o Epyc, mas a capacidade é possível com o Infinity Fabric.” ele disse. E há especulações de que com a próxima arquitetura de GPU AMD, Navi, haverá módulos multi-chip. O mesmo é dito sobre a NVIDIA.

Para a interconexão de soquete a soquete, o IF fornece 37,9 GB / s por link, o que totaliza 152 GB / s entre os soquetes. Isso é comparável ao NVLink 2.0, que dá 150 GB / s.

Futuro

Na CES 2018, a AMD anunciou uma nova geração de Vega voltada para aplicativos de Deep Learning, não para jogadores:

É difícil dizer qualquer coisa sobre o que exatamente será o “New DL Ops”, ou o “New High Speed ​​I / O” será diferente do Infinity Fabric. Ainda não está claro se veremos esses cartões no mercado em 2018. Aguardando detalhes.
Agora, o atual roteiro de GPU de 2018 se parece com este:

E mais uma vez, sem framework suportar essas GPUs ao mesmo tempo que são legais, será inútil.
Intel
Falando sobre a AMD, temos que mencionar a Intel também (especialmente tendo em mente que o chefe do AMD Radeon Group mudou para a Intel).

A Intel também possui GPUs. Eles são chamados de HD Graphics.

Na verdade, uma parte significativa dos chips do consumidor, como o Core-i7, é dedicada a ele. Por exemplo, no 4-core i7-7700, ele ocupa quase a metade da superfície do chip:

i7-7700 die shot anotado (fonte)
No i7-7700, existe o UHD Graphics 630 com o desempenho máximo de até 883,2 GFLOPS FP16 (no modo Boost 1.150 MHz).

A melhor solução atual da microarquitetura GPU Gen9.5, a Iris Plus Graphics 650 tem um desempenho de pico de até 1.7664 TFLOPS FP16, que é significativamente mais alto do que o NVIDIA Titan Xp tem (0,1686 TFLOPS FP16, lembre-se, NVIDIA limita o desempenho do FP16 em cartões de jogo), e está presente até em alguns Core-i3. Para desempenho do FP32 (883,2 GFLOPS) não é tão legal, mas comparável a i7-6850K (estimamos que seja próximo a 690 GFLOPS). Portanto, o desempenho potencial combinado (CPU + HD Graphics) pode ser quase duas vezes maior.

Lembre-se de que o Inference Engine da Intel também oferece suporte a Intel HD Graphics.
Parece que os chips Intel, embora estejam muito atrás das GPUs NVIDIA / AMD em tarefas DL típicas, são um pouco subestimados aqui. E tendo em mente que há tarefas de DL que estão longe do desempenho máximo (por exemplo, treinamento RNN), essas oportunidades podem ser interessantes.

Ainda mais interessante, é um passo recente da Intel + AMD para incorporar a GPU Vega em novas CPUs da Intel!

Mais sobre isso aqui.
No momento, a Intel está a caminho de sua própria GPU discreta, chamada Intel Xe. O lançamento está previsto para meados de 2020.

Design da placa Intel Xe

É hora de terminar a postagem, porque ela já se tornou uma longa leitura.
Fique em contato, não é o fim da história. Poderiam haver alternativas mais interessantes para GPUs em breve.