Benchmarks de LLMs com 16 GB de VRAM usando llama.cpp (velocidade e contexto)
Velocidade de tokens do llama.cpp em 16 GB de VRAM (tabelas).
Aqui estou comparando a velocidade de vários LLMs executados em uma GPU com 16GB de VRAM, e escolhendo o melhor para auto-hospedagem.
Executei esses LLMs no llama.cpp com janelas de contexto de 19K, 32K e 64K tokens.
GPU estilizada com blocos de VRAM e gráficos de estilo benchmark
Neste post, estou registrando minhas tentativas de extrair o máximo de desempenho em termos de velocidade possível.
Tabela de comparação de velocidade de LLMs (tokens por segundo e VRAM)
| Modelo | Tamanho | 19K VRAM | 19K GPU/CPU | 19K T/s | 32K VRAM | 32K Carga | 32K T/s | 64K VRAM | 64K Carga | 64K: T/s |
|---|---|---|---|---|---|---|---|---|---|---|
| Qwen3.6-35B-A3B-UD-IQ3_XXS | 13.2 | 13.8GB | 96%/100% | 147.5 | 14.0GB | 96%/101% | 149.1 | 14.7GB | 96%/101% | 145.8 |
| Qwen3.6-35B-A3B-UD-IQ4_XS | 17.7 | 14.3GB | 62%/266% | 95.0 | 14.9GB | 58%/279% | 92.3 | 14.9GB | 57%/293% | 86.4 |
| Qwen3.5-35B-A3B-UD-IQ3_S | 13.6 | 14.3GB | 93%/100% | 136.4 | 14.6GB | 93%/100% | 138.5 | 14.9GB | 88%/115% | 136.8 |
| Qwen3.5-27B-IQ3_XXS-bartowsky | 11.3 | 12.8 | 98/100 | 44.9 | 13.5 | 98/100 | 44.9 | 14.5 | 45/415 | 23.6 |
| Qwen3.5-27B-UD-IQ3_XXS | 11.5 | 12.9 | 98/100 | 45.3 | 13.7 | 98/100 | 45.1 | 14.7 | 45/410 | 22.7 |
| Qwen3.5-27B-IQ4_XS.gguf | 15.0 | 14.6 | 49/406 | 20.5 | 14.7 | 37/465 | 17.4 | 14.7 | 23/533 | 13.3 |
| Qwen3.5-122B-A10B-UD-IQ3_XXS | 44.7 | 14.7 | 30/470 | 22.3 | 14.7 | 30/480 | 21.8 | 14.7 | 28/490 | 21.5 |
| Qwen3.5-122B-A10B-UD-IQ3_S | 46.5 | 14.7 | 25/516 | 19.4 | 14.7 | 24/516 | 19.5 | 14.7 | 24/516 | 19.6 |
| Mistral-Small-4-119B UD-IQ3_XXS | 42.8 | 14.8 | 28/585 | 30.4 | 14.7 | 27/574 | 28.5 | 14.9 | 20/590 | 31.5 |
| Qwen3-Coder-Next-UD-IQ4_XS | 38.4 | 14.6 | 32/460 | 41.1 | 14.7 | 29/440 | 41.3 | 14.8 | 32/460 | 38.3 |
| Nemotron Super 120b IQ3_XXS | 56.2 | 15.0 | 26/517 | 17.5 | 14.6 | 26/531 | 17.4 | 14.6 | 26/535 | 17.6 |
| gemma-4-26B-A4B-it-UD-IQ4_XS | 13.4 | 14.7 | 95/100 | 121.7 | 14.9 | 95/115 | 114.9 | 14.9 | 75/190 | 96.1 |
| gemma-4-31B-it-UD-IQ3_XXS | 11.8 | 14.8 | 68/287 | 29.2 | 14.8 | 41/480 | 18.4 | 14.8 | 18/634 | 8.1 |
| GLM-4.7-Flash-IQ4_XS | 16.3 | 15.0 | 66/240 | 91.8 | 14.9 | 62/262 | 86.1 | 14.9 | 53/313 | 72.5 |
| GLM-4.7-Flash-REAP-23B IQ4_XS | 12.6 | 13.7 | 92/100 | 122.0 | 14.4 | 95/102 | 123.2 | 14.9 | 71/196 | 97.1 |
19K, 32K e 64K são os tamanhos de contexto.
O valor de carga acima é a Carga da GPU.
Se você vir um número baixo nesta coluna, significa que o modelo está sendo executado principalmente na CPU e não consegue atingir uma velocidade aceitável neste hardware. Esse padrão corresponde ao que as pessoas veem quando uma quantidade muito pequena do modelo cabe na GPU ou quando o contexto empurra o trabalho de volta para o host.
Sobre llama.cpp, desempenho de LLMs, OpenCode e outras comparações
Se você deseja obter caminhos de instalação, exemplos de llama-cli e llama-server, e as bandeiras que importam para VRAM e tokens por segundo (tamanho do contexto, lote, -ngl), comece com Introdução ao llama.cpp com CLI e Servidor.
Para uma visão mais ampla do desempenho (taxa de transferência versus latência, limites de VRAM, requisições paralelas e como os benchmarks se encaixam em diferentes hardwares e runtimes), veja Desempenho de LLMs em 2026: Benchmarks, Gargalos & Otimização.
A qualidade da resposta é analisada em outros artigos, por exemplo:
- Melhores LLMs para OpenCode - Testados Localmente. Você pode ler mais sobre o Opencode em Introdução ao OpenCode: Instalação, Configuração e Uso do Agente de Codificação IA por Terminal
- Comparação da qualidade de tradução de páginas Hugo - LLMs no Ollama
Executei um teste semelhante para LLMs no Ollama: Melhores LLMs para Ollama em GPU com 16GB de VRAM.
Se você executa o Qwen 3.6 27B ou 35B via llama.cpp e deseja impulsionar ainda mais a velocidade de geração, veja Qwen 3.6 MTP vs Decodificação Padrão em GPU de 16GB — a decodificação especulativa MTP adiciona até 67% de taxa de transferência na geração para o modelo denso de 27B, com tabelas mostrando o custo de VRAM e a compensação da janela de contexto em cada nível de --spec-draft-n-max.
Por que o comprimento do contexto altera os tokens por segundo
À medida que você passa de 19K para 32K ou 64K tokens, o cache KV cresce e a pressão sobre a VRAM aumenta. Algumas linhas mostram uma grande queda nos tokens por segundo em 64K, enquanto outras permanecem estáveis, o que é o sinal para revisar os quantizados, os limites de contexto ou o offloading de camadas, em vez de assumir que o modelo é “lento” em geral. Para os cálculos de orçamento por trás desses números — a fórmula exata para bytes KV por token, tabelas de tipo de cache em 32K/64K/128K e como calcular sua própria margem — veja Cache KV em GPUs de 16 GB: Fazendo o Contexto Longo Caber de Verdade.
Os modelos e quants que escolhi para testar são para que eu execute por conta própria e veja se eles trazem um bom ganho em termos de custo/benefício neste equipamento ou não. Então, sem quants q8 com contexto de 200k aqui :) …
GPU/CPU é uma carga, medida por nvitop.
O llama.cpp, ao autoconfigurar o descarregamento das camadas para a GPU, tenta manter 1GB livre.
Especificamos manualmente esse parâmetro via parâmetro de linha de comando -ngl, mas não estou ajustando finamente isso aqui,
apenas preciso entender que, se houver uma queda significativa de desempenho ao aumentar o tamanho da janela de contexto de 32k para 64k - podemos tentar aumentar a velocidade em 64k ajustando finamente o número de camadas descarregadas.
Hardware de teste e configuração do llama.cpp
Testei a velocidade dos LLMs em um PC com esta configuração:
- CPU i-14700
- RAM 64GB 6000Hz (2x32GB)
- GPU RTX-4080
- Ubuntu com drivers NVidia
- llama.cpp/llama-cli, sem camadas descarregadas especificadas
- VRAM usada inicialmente, antes de iniciar o llama-cli: 300MB
Execuções extras em contexto de 128K (Qwen3.5 27B e 122B)
| Modelo | 128K Carga | 128K: T/s |
|---|---|---|
| Qwen3.5-27B-UD-IQ3_XXS | 16/625 | 9.6 |
| Qwen3.5-122B-A10B-UD-IQ3_XXS | 27/496 | 19.2 |
Execuções Ajustadas
Para alguns modelos e quants interessantes, tentei encontrar parâmetros de linha de comando especiais do llama-cpp para melhor utilizar a VRAM. Aqui está o que consegui alcançar:
| Modelo | Contexto | Camadas na GPU | Carga CPU/CPU | Velocidade |
|---|---|---|---|---|
| Qwen3.5-27B-IQ4_XS.gguf | 18k | 65 | 98%/100% | 38.0 |
| Qwen3.5-27B-IQ4_XS.gguf | 64k | 53 | 33%/488% | 15.7 |
Considerações finais para construções com 16 GB de VRAM
- Meu favorito atual, Qwen3.5-27B-UD-IQ3_XXS, está parecendo bom em seu ponto ideal de contexto de 50k (estou obtendo aproximadamente 36t/s)
- Qwen3.5-122B-A10B-UD-IQ3_XXS está superando em desempenho o Qwen3.5 27B nos contextos acima de 64K.
- Posso fazer o Qwen3.5-35B-A3B-UD-IQ3_S lidar com contexto de 100k tokens, e ele cabe na vram, portanto não há queda de desempenho
- Não vou usar o gemma-4-31B em 16GB de VRAM, mas o gemma-4-26B pode ser medianamente bom…, preciso testar.
- Preciso testar o quão bem o Nemotron cascade 2 e o GLM-4.7 Flash REAP 23B funcionam. Serão melhores que o Qwen3.5-35B q3? Duvido, mas ainda assim, posso testar para confirmar a suspeita.
- Para saber por que a faixa de 25–34B é o padrão em 2026 uma vez que você tem 24 GB, e por que um Qwen3.8-27B Q4 não pertence realmente a este cartão de 16 GB, veja A Fronteira Eficiente dos Modelos Abertos em 2026.