A inteligência artificial e o aprendizado profundo estão constantemente nas manchetes hoje em dia, seja o ChatGPT gerando conselhos ruins, carros autônomos, artistas sendo acusados de usar IA, conselhos médicos de IA e muito mais. A maioria dessas ferramentas depende de servidores complexos com muito hardware para treinamento, mas o uso da rede treinada via inferência pode ser feito no seu PC, usando sua placa gráfica. Mas qual é a velocidade das GPUs de consumo para fazer inferência de IA?
Comparamos o Stable Diffusion, um popular criador de imagens de IA, nas mais recentes GPUs Nvidia, AMD e até Intel para ver como elas se comparam. Se você por acaso tentou colocar o Stable Diffusion em funcionamento em seu próprio PC, pode ter alguma noção de quão complexo – ou simples! – Isso pode ser. O resumo é que as GPUs da Nvidia dominam, com a maioria dos softwares projetados usando CUDA e outros conjuntos de ferramentas da Nvidia. Mas isso não significa que você não pode executar o Stable Diffusion nas outras GPUs.
Acabamos usando três projetos Stable Diffusion diferentes para nossos testes, principalmente porque nenhum pacote funcionou em todas as GPUs. Para Nvidia, optamos por Versão webui automática do 1111 (abre em nova aba). As GPUs AMD foram testadas usando Versão Shark de Nod.ai (abre em nova aba)enquanto para as GPUs Arc da Intel usamos Difusão estável OpenVINO (abre em nova aba). Isenções de responsabilidade estão em ordem. Não codificamos nenhuma dessas ferramentas, mas procuramos coisas fáceis de executar (no Windows) que também parecessem razoavelmente otimizadas.
Estamos relativamente confiantes de que os testes da série 30 da Nvidia fazem um bom trabalho ao extrair um desempenho próximo ao ideal – especialmente quando o xformers está ativado, o que fornece um aumento adicional de aproximadamente 20% no desempenho. Enquanto isso, os resultados da série RTX 40 são um pouco menores do que o esperado, talvez devido à falta de otimizações para a nova arquitetura Ada Lovelace.
Os resultados da AMD também são um pouco confusos, mas são o inverso da situação da Nvidia: as GPUs RDNA 3 funcionam muito bem, enquanto as GPUs RDNA 2 parecem bastante medíocres. Por fim, nas GPUs Intel, embora o desempenho final pareça se alinhar decentemente com as opções da AMD, na prática o tempo de renderização é substancialmente mais longo — provavelmente está acontecendo um monte de coisas extras em segundo plano que a tornam mais lenta.
Também estamos usando modelos Stable Diffusion 1.4, em vez dos SD 2.0 ou 2.1 mais novos, principalmente porque fazer o SD2.1 funcionar em hardware não Nvidia exigiria muito mais trabalho (ou seja, aprender a escrever código para habilitar o suporte). No entanto, se você tiver algum conhecimento interno do Stable Diffusion e quiser recomendar diferentes projetos de código aberto que possam funcionar melhor do que usamos, informe-nos nos comentários (ou envie um e-mail para Jarred (abre em nova aba)).
Nossos parâmetros de teste são os mesmos para todas as GPUs, embora não haja opções para uma opção de prompt negativo na versão Intel (pelo menos, não que possamos encontrar). A galeria acima foi gerada usando a versão Nvidia, com saídas de maior resolução (que demoram muito, Muito de mais tempo para terminar). São os mesmos prompts, mas visando 2048 x 1152 em vez dos 512 x 512 que usamos para nossos benchmarks. Aqui estão as configurações pertinentes:
Aviso Positivo:
cidade steampunk pós-apocalíptica, exploração, cinematográfica, realista, hiperdetalhada, detalhe máximo fotorrealista, luz volumétrica, (((foco))), grande angular, (((brilhantemente iluminado))), (((vegetação))), relâmpago , videiras, destruição, devastação, guerra, ruínas
Aviso negativo:
(((embaçado))), ((nebuloso)), (((escuro))), ((monocromático)), sol, (((profundidade de campo)))
Degraus:
100
Orientação gratuita do classificador:
15,0
Algoritmo de amostragem:
Alguma variante de Euler (Ancestral, Discreto)
O algoritmo de amostragem não parece afetar muito o desempenho, embora possa afetar a saída. O 1111 automático oferece mais opções, enquanto a compilação Intel OpenVINO não oferece escolha.
Aqui estão os resultados de nossos testes das GPUs AMD RX série 7000/6000, Nvidia RTX série 40/30 e Intel Arc série A. Observe que cada GPU Nvidia tem dois resultados, um usando o modelo computacional padrão (mais lento e em preto) e um segundo usando o biblioteca “xformers” mais rápida do Facebook (abre em nova aba) (mais rápido e em verde).
Como esperado, as GPUs da Nvidia oferecem desempenho superior – às vezes por margens massivas – do que qualquer coisa da AMD ou Intel. No entanto, existem claramente algumas anomalias. A GPU mais rápida em nosso teste inicial é a RTX 3090 Ti, chegando a quase 20 iterações por segundo, ou cerca de cinco segundos por imagem usando os parâmetros configurados. As coisas caem a partir daí, mas mesmo o RTX 3080 basicamente empata com o novo RX 7900 XTX da AMD, e o RTX 3050 supera o RX 6950 XT. Mas vamos falar sobre as esquisitices.
Primeiro, esperávamos que o RTX 4090 esmagasse a concorrência, e isso claramente não aconteceu. Na verdade, é mais lento que o 7900 XT da AMD e também mais lento que o RTX 3080. Da mesma forma, o RTX 4080 fica entre o 3070 e o 3060 Ti, enquanto o RTX 4070 Ti fica entre o 3060 e o 3060 Ti.
As otimizações adequadas podem facilmente dobrar o desempenho das placas da série RTX 40. Da mesma forma, considerando a diferença significativa de desempenho entre o RX 7900 XT e o RX 6950 XT, suas otimizações também podem dobrar o desempenho das GPUs RDNA 2. Isso é apenas um palpite baseado no que vimos em nossa hierarquia de benchmarks de GPU, mas definitivamente há algo estranho com esses resultados iniciais.
Atualmente, as GPUs Arc da Intel fornecem resultados muito decepcionantes, especialmente porque suportam operações XMX (matriz) que devem fornecer até 4X a taxa de transferência como cálculos FP32 regulares. Suspeitamos que o atual projeto Stable Diffusion OpenVINO que usamos também deixa muito espaço para melhorias. A propósito, se você quiser executar o SD em uma GPU Arc, observe que você deve editar o arquivo ‘stable_diffusion_engine.py’ e alterar “CPU” para “GPU” – caso contrário, não usará as placas gráficas para os cálculos e leva substancialmente mais tempo.
De volta aos resultados. Usando as versões especificadas, as placas da série RTX 30 da Nvidia são ótimas, as placas da série RX 7000 da AMD são ótimas, a série RTX 40 tem desempenho inferior, a série RX 6000 realmente apresenta desempenho inferior e as GPUs Arc geralmente parecem ruins. As coisas podem mudar radicalmente com o software atualizado e, dada a popularidade da IA, esperamos que seja apenas uma questão de tempo até vermos um ajuste melhor (ou encontrarmos o projeto certo que já está ajustado para oferecer melhor desempenho).
Novamente, não está claro exatamente o quão otimizado qualquer um desses projetos é, mas pode ser interessante observar o desempenho teórico máximo (TFLOPS) das várias GPUs. O gráfico a seguir mostra o desempenho teórico do FP16 para cada GPU, usando núcleos de tensor/matriz quando aplicável.
Esses núcleos Tensor na Nvidia claramente dão um soco, pelo menos em teoria, embora obviamente nosso teste de difusão estável não corresponda exatamente a esses números. Por exemplo, no papel a RTX 4090 (usando FP16) é até 106% mais rápida que a RTX 3090 Ti, enquanto em nossos testes foi 35% mais lenta. Observe também que estamos assumindo que o projeto Stable Diffusion que usamos (Automatic 1111) nem tenta aproveitar as novas instruções FP8 nas GPUs Ada Lovelace, o que poderia potencialmente dobrar o desempenho na série RTX 40 novamente.
Enquanto isso, olhe para as GPUs Arc. Seus núcleos de matriz devem fornecer desempenho semelhante ao RTX 3060 Ti e RX 7900 XTX, mais ou menos, com o A380 abaixo do RX 6800. Na prática, as GPUs Arc não chegam nem perto dessas marcas. As GPUs A770 mais rápidas ficam entre a RX 6600 e a RX 6600 XT, a A750 fica logo atrás da RX 6600 e a A380 tem cerca de um quarto da velocidade da A750. Portanto, eles têm cerca de um quarto do desempenho esperado, o que faria sentido se os núcleos XMX não estivessem sendo usados.
As proporções no Arc parecem certas, no entanto. O desempenho de computação teórico no A380 é cerca de um quarto do A750. Provavelmente, eles estão usando shaders para os cálculos, no modo FP32 de precisão total e perdendo algumas otimizações adicionais.
A outra coisa a notar é que a computação teórica no RX 7900 XTX/XT da AMD melhorou muito em comparação com a série RX 6000, e a largura de banda da memória não é um fator crítico – os modelos 3080 de 10 GB e 12 GB ficam relativamente próximos. Portanto, talvez os resultados da AMD acima não estejam completamente fora de questão, já que o 7900 XTX quase triplica a computação bruta em comparação com o 6950 XT. Exceto que o 7900 XT tem um desempenho quase tão bom quanto o XTX, onde a computação bruta deve favorecer o XTX em cerca de 19%, em vez dos 3% que medimos.
Em última análise, isso é mais um instantâneo no tempo do desempenho de difusão estável nas GPUs AMD, Intel e Nvidia, em vez de uma verdadeira declaração de desempenho. Com otimizações completas, o desempenho deve se parecer mais com o gráfico TFLOPS teórico e, certamente, as novas placas da série RTX 40 não devem ficar atrás das peças existentes da série RTX 30.
O que nos leva a um gráfico final, onde fizemos alguns testes de resolução mais alta. Ainda não testamos todas as novas GPUs e usamos o Linux nas placas da série AMD RX 6000 que testamos. Mas parece que a resolução alvo mais complexa de 2048×1152 começou a tirar melhor proveito do RTX 4090 pelo menos. Veremos como revisitar esse tópico mais no próximo ano.