Leve ao Limite — Qwen3.5 35B na RX 580
Experimento de execução híbrida extrema de um modelo de 34,66B parâmetros na GPU de 8GB de VRAM e Xeon de 2014 via motor Vulkan.
AMD RX 580 8GB
Xeon E5-2690 v3
Vulkan Híbrido
34.66B parameters
Q6_K Quantization
Velocidade Geração
5.64 tok/s
Sessão 2 (Estável)
Prompt Eval
34.13 tok/s
Tempo resposta ~107s
Temperatura Máxima
80°C
Sem Throttling (Alvo: 90°C)
Custo Adicional
R$ 0,00
Execução 100% local
33.0 — Contexto e Motivação
Em 15 de junho de 2026, o AIVisionsLab conduziu o experimento mais extremo da sua história: rodar um modelo de 34,66 bilhões de parâmetros em modo híbrido numa GPU AMD Radeon RX 580 2048SP de 2017 com apenas 8GB de VRAM.
"Se a RX 580 já roda Qwen3 4B a 35 tokens/s via Vulkan, até onde vai o limite?"
A resposta documentada abaixo prova que o limite não é onde o mercado de hardware diz que é.
33.1 — Hardware do Laboratório
| Componente |
Especificação |
| CPU | Intel Xeon E5-2690 v3 — 12 cores / 24 threads · 3,05 GHz turbo (Lançado em 2014) |
| RAM | 31,8 GB DDR4 REG ECC (quad-channel) |
| GPU | AMD Radeon RX 580 2048SP — 8 GB GDDR5 (Lançado em 2017) |
| Storage 1 | SSD NVMe (Disco E:) — modelos GGUF (Leitura de 1.7–3.5 GB/s) |
| Storage 2 | HDD (Disco C: / F:) — sistema Windows + swap |
| Storage 3 | HDD (Disco D:) — arquivos secundários |
| Driver AMD | 31.0.21925.1001 — lançado em 20/05/2026 |
| DirectX | 12 (Feature Level 12.0) |
| Barramento | PCI Express 3, dispositivo 0, função 0 |
| Sistema | Windows 10/11 com WSL2 ativo |
*Nota histórica: O Xeon E5-2690 v3 é de 2014. A RX 580 é de 2017. O Qwen3.5 é de 2025. Hardware de datacenter de 10 anos atrás processando IA de última geração.
33.2 — Software e Versões
| Software |
Versão / Detalhe |
| llama.cpp | build b9049-2496f9c14 |
| Compilador | MSVC 14.51.36231 (Visual Studio) |
| Vulkan SDK | 1.4.350.0 |
| OpenWebUI | v0.9.6 |
| SearXNG | via Docker — integrado ao OpenWebUI |
| Backend GPU | Vulkan — sem CUDA, sem ROCm, sem DirectML |
| Docker Desktop | Ativo — containers open-webui + searxng |
33.3 — O Modelo: Qwen3.5-35B-A3B-Uncensored Q6_K
33.3.1 — Especificações Técnicas
| Parâmetro |
Valor |
| Nome completo | Qwen3.5-35B-A3B-Uncensored-HauhauCS-Aggressive-Q6_K |
| Arquitetura | qwen35moe — Mixture of Experts (MoE) |
| Parâmetros totais | 34,66 bilhões |
| Tamanho do arquivo | 26,55 GiB (6,58 bits por peso) |
| Quantização | Q6_K — 432 tensores q6_K + 301 tensores f32 |
| Experts totais | 256 experts |
| Experts ativos por token | 8 de 256 (apenas 3,1% ativados) |
| Contexto máximo de treino | 262.144 tokens |
| Vocabulário | 248.320 tokens (BPE, tokenizer qwen35) |
| Thinking mode padrão | ATIVADO (thinking = 1 no template Jinja2) |
| Intervalo de full attention | A cada 4 layers |
33.3.2 — Por que MoE muda tudo
Em um modelo denso de 35B, todos os 35 bilhões de parâmetros são ativados para cada token gerado. No Qwen3.5 MoE, apenas os 8 experts mais relevantes de 256 são ativados — o equivalente a ~3B parâmetros ativos por token.
Isso explica por que um arquivo de 26GB consegue rodar numa máquina com 32GB de RAM: a maior parte dos pesos está na memória mas não é calculada simultaneamente.
33.4 — Comando de Inicialização
# Sessão 1 (porta 8080 — erro corrigido depois)
.\llama-server.exe -m "E:\models\Qwen3.5-35B-A3B-Uncensored-HauhauCS-Aggressive-Q6_K.gguf" --host 0.0.0.0 --port 8080
# Sessão 2 (porta 8081 — correta)
.\llama-server.exe -m "E:\models\Qwen3.5-35B-A3B-Uncensored-HauhauCS-Aggressive-Q6_K.gguf" --host 0.0.0.0 --port 8081
Nenhuma flag manual de camadas (-ngl). O llama.cpp fez todo o fitting automático.
33.5 — O Fitting Automático: Como o llama.cpp dividiu 26GB em 1,15 segundos
Este é o coração técnico do experimento. Sem nenhuma intervenção manual, o llama.cpp executou um algoritmo de otimização que analisou a VRAM disponível e distribuiu o modelo entre GPU e RAM de forma inteligente.
33.5.1 — Situação Inicial (Impossível carregar inteiro na GPU)
Memória necessária na GPU (modelo completo): 32.961 MiB
VRAM livre disponível: 7.366 MiB
Déficit: 26.618 MiB — impossível da GPU conter tudo
33.5.2 — Sequência de Decisões do Fitting (1,15 segundos)
Passo 1 — Redução de contexto:
Contexto original: 262.144 tokens ➔ Contexto reduzido automaticamente: 4.096 tokens (Economia de VRAM: 5.347 MiB)
Passo 2 — Mover todos os experts MoE para RAM:
Vulkan0 com as camadas densas residuais: 2.418 MiB (Sobra 3.924 MiB VRAM livre)
RAM host (experts MoE mapeados): 25.613 MiB
Passo 3 — Realocar camadas densas de volta para GPU (back-to-front):
41 camadas densas realocadas ➔ GPU. Uso resultante: 3.048 MiB | Livre: 4.318 MiB
Passo 4 — Filling front-to-back com overflow fracionado:
Resultado: 41 camadas (36 "overflowing") na GPU
Tipo de overflow: GATE (fracionado no gate layer)
Uso final GPU: 6.255 MiB | Livre: 1.111 MiB
33.5.3 — Distribuição Final dos Pesos
| Localização do Buffer |
Conteúdo Armazenado |
Tamanho Mobilizado |
| Vulkan0 (RX 580 8GB) | 41 camadas densas + output layer | 5.154 MiB |
| CPU_Mapped (RAM via mmap) | 256 experts MoE | 26.784 MiB |
33.5.4 — Buffers Adicionais alocados na VRAM
| Buffer Tipo |
Tamanho Alocado |
Descrição Física |
| KV Cache (Vulkan0) | 80,00 MiB | 4.096 cells, 10 layers |
| RS Buffer (Vulkan0) | 251,25 MiB | recorrente: 40 layers, 4 seqs |
| Compute Buffer (Vulkan0) | 770,02 MiB | Ativado durante grafos de computação |
| Host Compute Buffer | 16,02 MiB | RAM do sistema |
| Output Buffer (Vulkan_Host) | 3,79 MiB | Buffer de saída de tokens |
Total efetivo na VRAM durante inferência: ~6,2–7,2 GB (77–90% dos 8GB físicos livres).
33.5.5 — Features habilitadas automaticamente
✅ Flash Attention (auto ➔ ENABLED)
✅ Fused Gated Delta Net — autoregressive
✅ Fused Gated Delta Net — chunked
✅ Prompt cache (limite: 8.192 MiB, ~89.715 MiB salvos em disco)
✅ Thinking mode (thinking = 1)
✅ 4 slots paralelos (n_seq_max = 4)
Graph nodes: 3.729 | Graph splits: 106 (com bs=512), 74 (com bs=1)
Reserve: 137–183 ms
33.6 — A Arquitetura de 4 Níveis de Memória
Primeiro registro documentado de um modelo 35B usando 4 camadas de memória simultaneamente para processamento numa RX 580 comum:
⚡ NÍVEL 1 — VRAM RX 580 (8GB GDDR5): 5.154 MiB de camadas densas | Acesso: ~400 GB/s (GDDR5) | Latência: nanosegundos
🧠 NÍVEL 2 — RAM DDR4 ECC (32GB Sytem): 26.784 MiB de experts MoE via mmap | Acesso: ~51 GB/s (quad-channel) | Latência: dezenas de ns
💾 NÍVEL 3 — SSD NVMe (Disco E:): 26,55 GiB de arquivo .gguf fonte | Acesso: 1,7–3,5 GB/s | Usado durante carregamento inicial
📁 NÍVEL 4 — HDD (Disco C: Swap): Swap do Windows ativado quando a RAM esgota (>97% de uso) | Acesso: ~120–180 MB/s | Pico de 98–100% de uso na inferência
33.7 — Configuração do Contexto Carregado
n_ctx = 4.096 tokens (reduzido de 262.144 pelo fitting)
n_batch = 2.048
n_ubatch = 512
n_seq_max = 4 (slots paralelos)
flash_attn = auto ➔ ENABLED
kv_unified = true
Limitação crítica documentada: O contexto de 4.096 tokens é o principal gargalo do setup. O thinking mode (modo raciocínio) do Qwen3.5 consome 3.000+ tokens sozinho antes de gerar qualquer resposta visível — deixando menos de 1.000 tokens livres para a resposta final ao cliente.
33.8 — Benchmark Confirmado em Duas Sessões
Velocidade de geração
| Sessão |
Horário aproximado |
Prompt Eval Speed |
Geração Speed |
Total Tokens |
Tempo Total |
| Sessão 1 | ~17h39 | 34,13 tok/s | 5,57 tok/s | 1.377 tok | ~107 segundos |
| Sessão 2 | ~21h34 | ~40.00 tok/s | 5,64 tok/s | 2.929 tok | ~533 segundos |
Consistência notável: Manutenção na linha de ~5,6 tokens/segundo de geração independente da sessão estar sobrecarregada ou fria.
Registro de temperaturas registradas
| Momento do Teste |
GPU Temp (°C) |
| Idle (modelo estacionado na VRAM) | 33–41°C |
| Inferência normal (sem Web Search ativo) | 44–64°C |
| Inferência carregada (com Web Search ativo) | 70–75°C |
| Pico absoluto registrado | 80°C |
| Após conclusão de resposta | 71–73°C |
Temperatura de thermal throttling da RX 580: ~90°C. Margem de segurança operacional perfeitamente mantida!
Utilização de recursos na inferência física
| Recurso de Hardware |
Idle |
Durante Inferência |
Pico Registrado |
| VRAM dedicada | 6,7 / 8,0 GB | 6,8 – 7,2 / 8,0 GB | 7,4 GB / 8,0 GB |
| RAM do Sistema | ~29,0 GB | 30,7 – 31,1 GB | 31,2 / 31,8 GB (98% utiliz.) |
| CPU Xeon v3 | 3% | 62 – 70% | 70% |
| GPU utilização 3D | 0% | 1 – 3% | 3% (Carga no barramento PCIe) |
| HDD C: (Atividade swap) | 0% | 13 – 42% | 98 – 100% (Limiar swap) |
33.9 — Os 5 Testes: Histórico Completo de Engenharia
Pergunta de entrada enviada em todos os testes:
"Explique detalhadamente como funciona o mecanismo de atenção em transformers e por que o MoE é mais eficiente que modelos densos. Responda em português."
TESTE 1 — Sessão 1 · Raciocínio ON + Web Search ON + Geração Imagem ON
Resultado: ❌ Erro de protocolo (reposta não entregue) | Log do erro: operator (): got exception: {"error":"code":400,"message":"Assistant response prefill is incompatible with enable_thinking."}
Análise: O modelo processou um pensamento por ~1 minuto recuperando 10 fontes do SearXNG, mas o OpenWebUI injetou um prefill incorreto incompatível com a flag de pensamento do Jinja2, forçando o cancelamento.
TESTE 2 — Sessão 2 · Raciocínio ON + Web Search ON (30 pesquisas consecutivas)
Resultado: ❌ Contexto esgotado | Log do erro: stop processing: n_tokens = 3285, truncated = 1
Análise: As 30 pesquisas do SearXNG injetaram milhares de tokens de contexto na memória. O thinking mode tentou alocar seu próprio buffer e estourou os 4.096 limitantes do setup híbrido, forçando corte prematuro.
TESTE 3 — Sessão 2 · Raciocínio ON + Web Search ON (25 pesquisas, nova rodada acumulada)
Resultado: ❌ Contexto esgotado | Log do erro: stop processing: n_tokens = 4095, truncated = 1
Análise: O OpenWebUI tentou reenviar acumulando o histórico de conversação anterior. O prompt cresceu tanto que atingiu o teto exato delimitado de hardware de 4.095 tokens no Fitting.
TESTE 4 — Sessão 2 · Raciocínio ON + Web Search OFF
Resultado: ❌ Timeout do Cliente | Log do erro: stop: cancel task, id_task = 6887 (truncated = 0)
Análise: Sem web-search o consumo térmico despencou para estáveis 51°C e uso de swap caiu. Mas o processamento de raciocínio interno demorou tempo suficiente na CPU Xeon de 2014 para que a UI disparasse seu timeout de segurança de chamadas.
✅ TESTE 5 — Sessão 2 · Raciocínio ON + Web Search OFF + Prompt Curto (45 tokens)
Resultado: SUCESSO ABSOLUTO ✅ | Resposta técnica profunda entregue integralmente em português brasileiro estruturado.
Análise: Ao restringir o prompt inicial para 45 tokens e desativar barulhos complementares, o pensamento pôde rodar por 4 minutos completos sob o Xeon, realizando rascunho de equações e respondendo impecavelmente sobre Transformers (Softmax, Multiheaders) e as eficiências do MoE.
33.10 — Tabela Comparativa de Comportamento dos Testes
| ID |
Thinking |
Web Search |
Promo Token |
Status |
Causa Raiz Real da Falha |
| 1 | ON | ON (10 fontes) | ~936 tok | ❌ Falha | Prefill de resposta incompatível with thinking=1 |
| 2 | ON | ON (30 pesq.) | ~357 tok | ❌ Falha | Esgotamento de contexto do Fitting (4.095 max) |
| 3 | ON | ON (25 pesq.) | ~3.385 tok | ❌ Falha | Esgotamento de contexto imediato no reenvio |
| 4 | ON | OFF | ~350 tok | ❌ Falha | Timeout nas requisições da OpenWebUI antes do output |
| 5 | ON | OFF | 45 tok | ✅ SUCESSO | Prompt enxuto coube integralmente na arquitetura de mmap |
Conclusão Crítica: A RX 580 do laboratório de 2017 e o Xeon funcionaram estavelmente sem dar nenhum reset físico em todas as situações de stress. As falhas residiram estritamente na calibração lógica do software de front-end.
33.11 — Coletas de Descobertas e Limitações Cruciais
- Incompatibilidade do Thinking com Contexto Curto: Por design de modelo, o pensamento consome cerca de 3.000 tokens e estoura rapidamente o KV Cache alocado de 4.096 se o prompt ou histórico for longo.
- O Fitting Automático do llama.cpp é Excepcional: Forçar o split por flags experimentais rígidas como
--override-tensor prejudica as chamadas no Vulkan. O fitting por cálculo de grafos resolveu milimetricamente a distribuição de forma otimizada.
- Superaquecimento da GPU mitigado: Apenas a renderização profunda com dezenas de filtros simultâneos elevou a 80°C. Limitar a GPU para inferir frações densas mantém o chip a confortáveis 44-64°C.
- O gargalo reside na taxa de I/O de Swap do HDD: Quando RAM estoura a 98%, a taxa cai para 5 tok/s devido ao HDD. Migrar o swap do host inteiro para unidades de estado sólido aumentará consideravelmente a velocidade de fluxo combinada.
33.12 — Comparação Direta com Projetos de Comunidade
| Projeto / Autor |
Arquitetura Utilizada |
Modelo Testado |
Velocidade Geração |
Status de Autoria |
| Matheus Fertunani | Linux Comercial / CPU Xeon pura (192GB RAM) | Qwen3.5 35B Q8 | ~7–8 tokens/s | Documentado no YouTube |
| AIVisionsLab (Nossos testes) | Vulkan Híbrido (RX 580 8GB + 32GB RAM ECC) | Qwen3.5 35B Q6_K | 5,64 tokens/s | ✅ Validado e Registrado |
A grande vantagem arquitetural: O teste de CPU pura de Matheus exige hardwares profissionais de alto custo com mais de 100GB de RAM instalada. O ecossistema de Vulkan do AIVisionsLab provou-se operável em uma GPU de menos de R$ 400 em mercado secundário!
33.13 — Configurações Recomendadas para Testes Futuros
# Teste 6 — Desativação explícita de thinking via servidor em versões de compilação recentes:
.\llama-server.exe -m "E:\models\Qwen3.5-35B-A3B-Uncensored-HauhauCS-Aggressive-Q6_K.gguf" --host 0.0.0.0 --port 8081 --no-thinking
# Teste 7 — Elevação estrita de buffers de contexto se a memória for redirecionada:
.\llama-server.exe -m "E:\models\Qwen3.5-35B-A3B-...-Q6_K.gguf" --host 0.0.0.0 --port 8081 --ctx-size 8192
# Teste 8 — Testar com quantizações menores como Q4_K_M (~21GB):
# Liberação de ~5GB adicionais na RAM host que reduz a dependência de swap no HDD e melhora consideravelmente a taxa de tok/s!
33.14 — Lições Técnicas Consolidadas
- O silício de 2017 não é o limite: A placa de vídeo nunca crashou nos testes contínuos de estresse térmico, dezenas de vezes. O gargalo se provou uma mera calibração lógica de software.
- As esparsidades do MoE salvam a categoria: Sem MoE, seria impensável arrastar um modelo de 26GB de pesos ativos. O MoE faz com que apenas 3.1% dos neurônios fiquem de fato excitados por token.
33.15 — Veredicto Geral do Laboratório
| Questão de Engenharia |
Veredicto Final |
| A RX 580 de 8GB suporta modelos de 35B parâmetros? | ✅ Sim (Em barramento híbrido mmap) |
| É prático para o dia a dia? | ⚠️ Não (5,6 tok/s e contexto de 4.096 tokens) |
| Vale como prova de conceito? | ✅ Absolutamente |
| Houve throttling ou crash? | ✅ Zero ocorrências de instabilidade |
| Temperatura máxima registrada | 80°C (margem de segurança: ~90°C) |
| Velocidade de geração | ~5,6 tokens/segundo |
| Memória total mobilizada | ~34 GB (VRAM + RAM + swap HDD) |
33.16 — Linha do Tempo do Experimento
🕒 ~17:39 — Servidor sobe na porta 8080 (erro)
🕒 ~17:40 — "Network Problem" no OpenWebUI (porta errada)
🕒 ~17:41 — Servidor fechou ao trocar porta → reiniciado na 8081
🕒 ~17:42 — Todas as ferramentas habilitadas no modelo (imagem, web, terminal)
🕒 ~17:43 — TESTE 1 inicia
🕒 ~17:44 — Web search: 10 fontes recuperadas
🕒 ~17:44 — Tentativa de gerar imagem → erro tratado → continua
🕒 ~17:45 — "Pensado por um minuto" aparece no OpenWebUI
🕒 ~17:46 — Resposta estruturada com título gerado internamente
🕒 ~17:50 — Erro de protocolo (prefill + thinking) → sem entrega. Pico: 80°C
🕒 ~21:34 — Sessão 2 inicia
🕒 ~21:34 — TESTE 2 inicia — web search ON (30 pesquisas). Contexto truncado.
🕒 ~21:48 — TESTE 3 automático — 25 pesquisas. Contexto truncado.
🕒 ~22:00 — TESTE 4 — web search OFF. Temperatura cai para 51°C. Timeout da UI.
🕒 ~23:06 — TESTE 5 — prompt de 45 tokens. Thinking decodificado com sucesso.
🕒 ~23:14 — Resposta completa entregue em português ✅. GPU: 64°C | RAM: 96%
33.17 — Impacto para a Documentação do AIVisionsLab
Este experimento adiciona ao projeto: um novo benchmark robusto de 5,6 tok/s para modelos 35B MoE híbridos, a confirmação de que o fitting automático do llama.cpp supera configurações manuais rígidas via Vulkan, a identificação clara de incompatibilidade do modo thinking com contextos inferiores a 8.192 e a descrição de uma arquitetura estendida a 4 níveis de memória.
33.18 — Tags e Metadados
🏷️ Tags: hybrid, moe, vulkan, rx580, large-model, thinking-mode, limits, qwen35b, benchmark, fitting-automático, 4-memory-levels, sem-throttling
💻 Hardware: RX 580 2048SP + Xeon E5-2690 v3 + 32GB ECC DDR4
💿 Software: llama.cpp b9049 + Vulkan SDK 1.4.350.0 + OpenWebUI v0.9.6
📅 Data: 15/06/2026
⏱️ Sessões: 2 (17h39–18h24 e 21h34–23h14)
📊 Testes: 5 (4 falhas de software, 1 sucesso de inferência completa)
📈 Benchmark: 5,57–5,64 tok/s (geração) | 34,13 tok/s (prompt eval)
🔥 Temperatura pico: 80°C
🏆 Status final: ✅ HARDWARE APROVADO
"O problema nunca foi o hardware.
Foi a combinação de thinking + web search esgotando os 4.096 tokens de contexto.
Com prompt curto e sem web search, o Qwen3.5-35B Q6_K responde normalmente numa RX 580 de 2017."
— AIVisionsLab, 15/06/2026