Publicações
avatar

#Claude #Codex # Tentei executar um LLM local na GPU Ryzen Zen3 (Comparação e análise de desempenho do Qwen3-8B Heretic entre CPU e GPU) Força, AMD, força Vulkan Pensava que, sendo uma GPU para jogos, não seria nada de especial — e estava certo Parece que a largura de banda da memória é o gargalo (por causa do VRAM pequeno, usa-se a memória principal; aguardo o Mac M5 Studio) O mais recente da AMD é o Zen6, então este é um CPU de três gerações atrás (com GPU integrada) ---- # Comparação e Análise de Desempenho do Qwen3-8B Heretic entre CPU e GPU Data da medição: 2026-11-02 / Alvo: Máquina Ubuntu ## Conclusão - **A GPU (GPU integrada Radeon) é mais rápida na carga do prompt, cerca de 2,5 vezes mais rápida que a CPU.** - **A geração de texto é apenas 1,1 a 1,2 vezes mais rápida na GPU.** A velocidade de geração é limitada pela taxa de transferência de memória, já que a GPU integrada compartilha a mesma memória da CPU. - Em uso com instruções longas, como no OpenClaw, onde o prompt é enviado repetidamente, **o cache do prompt** tem um impacto muito maior do que a GPU; a partir da segunda requisição, o tempo caiu de cerca de 7 minutos para cerca de 1 minuto. ## Ambiente de medição | Item | Detalhes | |---|---| | CPU | AMD Ryzen 7 7730U (8 núcleos, 16 threads, Zen 3) | | GPU | GPU integrada AMD Radeon Graphics (Barcelo, equivalente ao Vega 8) | | Memória | 30 GB (especificação: DDR4-3200 dual-channel; não confirmado no hardware real) | | Memória para GPU | VRAM dedicado de 512 MB + memória compartilhada (GTT) de cerca de 15,4 GB. LM Studio pode usar 10,59 GiB | | SO / Driver | Ubuntu 24.04.5 LTS, Mesa 25.2.8 (RADV) | | LM Studio | Versão headless (llmster), llama.cpp 2.66.0 | | Runtime para CPU | `llama.cpp-linux-x86_64-avx2` | | Runtime para GPU | `llama.cpp-linux-x86_64-vulkan-avx2` (todas as camadas na GPU, `--gpu max`) | | Modelo | DreamFast/qwen3-8b-heretic Q4_K_M (5,03 GB) | | Configuração de carga | Comprimento do contexto: 32768, número simultâneo de processamentos: 1 | ## Método de medição - Enviei o mesmo prompt à API do LM Studio (`/api/v0/chat/completions`) e comparei desempenho entre CPU e GPU. - Cada condição foi executada duas vezes. Na segunda execução, o prompt já estava em cache; portanto, **a velocidade de carga usa os valores da primeira execução**. - A velocidade de geração é baseada no `tokens_per_second` retornado pelo LM Studio. - O pensamento prévio à resposta foi desativado com `/no_think`, e `temperature` foi definido como 0. - Após medir a GPU, aguardei 2 minutos de resfriamento antes de medir a CPU. - Scripts e registros estão em `~/bench/bench.py`, `~/bench/run.sh` e `~/bench/result.log` na máquina Ubuntu. ## Resultados ### Resumo da comparação | Conteúdo | Item | CPU | GPU | Diferença | |---|---|---|---|---| | Pergunta curta (24 tokens) gerando 256 tokens | Velocidade de geração | 7,3 tokens/s | 8,2 tokens/s | 1,13x | | | Tempo total | 35,7 segundos | 31,4 segundos | | | Prompt de 921 tokens | Velocidade de carga | 30,5 tokens/s | 76,3 tokens/s | **2,5x** | | | Tempo até primeiro token | 30,2 segundos | 12,1 segundos | | | | Velocidade de geração | 7,0 tokens/s | 8,0 tokens/s | 1,13x | | Prompt de 3.621 tokens | Velocidade de carga | 35,4 tokens/s | 87,5 tokens/s | **2,5x** | | | Tempo até primeiro token | 102,3 segundos | 41,4 segundos | | | | Velocidade de geração | 5,9 tokens/s | 7,2 tokens/s | 1,2x | ### Detalhes das medições | Método | Conteúdo | Execução | Prompt | Geração | Tempo total | Tempo até primeiro token | Velocidade de geração | |---|---|---|---|---|---|---|---| | GPU | Pergunta curta | 1 | 24 | 256 | 31,4 segundos | 0,50 segundo | 8,26 | | GPU | Pergunta curta | 2 | 24 | 256 | 31,2 segundos | 0,12 segundo | 8,23 | | GPU | Prompt ~1.000 | 1 | 921 | 32 | 16,0 segundos | 12,07 segundos | 7,97 | | GPU | Prompt ~1.000 | 2 (cache) | 921 | 32 | 4,0 segundos | 0,14 segundo | 7,98 | | GPU | Prompt ~4.000 | 1 | 3.621 | 32 | 45,7 segundos | 41,38 segundos | 7,18 || GPU | Prompt aproximadamente 4.000 | 2 (cache) | 3.621 | 32 | 4,5 segundos | 0,14 segundo | 7,22 | | CPU | Pergunta curta | 1 | 24 | 256 | 35,7 segundos | 0,73 segundo | 7,29 | | CPU | Pergunta curta | 2 | 24 | 241 | 32,8 segundos | 0,14 segundo | 7,36 | | CPU | Prompt aproximadamente 1.000 | 1 | 921 | 32 | 34,7 segundos | 30,21 segundos | 7,03 | | CPU | Prompt aproximadamente 1.000 | 2 (cache) | 921 | 32 | 4,6 segundos | 0,15 segundo | 6,96 | | CPU | Prompt aproximadamente 4.000 | 1 | 3.621 | 32 | 107,5 segundos | 102,30 segundos | 5,94 | | CPU | Prompt aproximadamente 4.000 | 2 (cache) | 3.621 | 32 | 5,4 segundos | 0,17 segundo | 5,96 | As unidades de prompt e geração são tokens; a unidade de velocidade de geração é tokens/segundo. ### Correção Durante a medição inicial simplificada, informamos que a velocidade de geração no GPU aumentou cerca de 2,2 vezes, mas isso estava incorreto. O valor de 3,86 tokens/segundo do CPU comparado foi obtido ao processar um prompt de cerca de 14.000 tokens no bot2. Como a geração fica mais lenta com prompts longos, comparar com valores de perguntas curtas foi um erro. Quando comparados nas mesmas condições, a diferença na geração é de apenas 1,1 a 1,2 vezes. ## Por que o GPU não é tão mais rápido quanto esperado ### 1. A geração é limitada pela velocidade de transferência de memória Cada vez que um LLM gera um token, ele precisa ler todos os pesos do modelo da memória. O limite superior da velocidade de geração é determinado aproximadamente por: “velocidade de transferência da memória ÷ tamanho do modelo”. | Item | Valor | |---|---| | Velocidade de transferência da memória (teórica) | Aproximadamente 51 GB/s em DDR4-3200 dual-channel | | Quantidade lida por token | Aproximadamente 5 GB (modelo inteiro) | | Limite teórico superior da velocidade de geração | 51 ÷ 5,03 ≒ **aproximadamente 10 tokens/segundo** | | Medido (GPU) | 8,2 tokens/segundo (cerca de 80% do limite) | | Medido (CPU) | 7,3 tokens/segundo (cerca de 70% do limite) | O GPU integrado compartilha a mesma memória principal do CPU, portanto o limite é praticamente idêntico. Mesmo com o GPU, há apenas uma margem de 10 a 20% para se aproximar do limite. GPUs externas possuem memória dedicada e de alta velocidade, o que eleva significativamente esse limite. | GPU | Velocidade de transferência da memória | Razão em relação a esta máquina Ubuntu | |---|---|---| | GPU integrada desta máquina Ubuntu | Aproximadamente 51 GB/s (compartilhada com o CPU) | 1x | | RTX 4060 | Aproximadamente 272 GB/s | Aproximadamente 5x | | RTX 4090 | Aproximadamente 1.008 GB/s | Aproximadamente 20x | ### 2. A leitura depende da capacidade de processamento, mas o GPU integrado tem baixa potência computacional Na leitura do prompt, muitos tokens são processados simultaneamente; portanto, a velocidade é determinada pela potência computacional, não pela memória. É aqui que o GPU mostra seu efeito — na prática, houve um aumento de 2,5 vezes. No entanto, este GPU possui as seguintes limitações, restringindo o ganho a apenas 2,5 vezes: | Limitação | Detalhes | |---|---| | Poucos unidades de cálculo | Apenas 8 unidades. Estimado em cerca de 2 TFLOPS em precisão simples — menos de um décimo da potência de GPUs para jogos | | Sem circuitos dedicados para operações matriciais | Não possui circuitos dedicados como os Tensor Cores da NVIDIA para IA | | ROCm não é suportado | A plataforma de computação AMD ROCm não oferece suporte oficial a este GPU integrado; ele opera usando Vulkan genérico | Para um modelo de 8B, cerca de 16 GFLOPs são necessários para processar um token. Com cerca de 2 TFLOPS, o limite teórico seria de aproximadamente 120 tokens/segundo. Os valores medidos de 76 a 88 tokens/segundo correspondem a cerca de 60-70% desse limite. ### 3. Quanto mais longo o prompt, mais lento fica Quanto maior o contexto, mais tokens passados cada token precisa consultar; consequentemente, tanto a leitura quanto a geração ficam mais lentas. | Condição | Velocidade de leitura | Velocidade de geração | |---|---|---| | GPU, prompt aproximadamente 1.000 tokens | 76 tokens/segundo | 8,0 tokens/segundo | | GPU, prompt aproximadamente 3.600 tokens | 88 tokens/segundo | 7,2 tokens/segundo | | GPU, OpenClaw (15.686 tokens), primeiros 2.048 tokens | 78,7 tokens/segundo | — | | GPU, OpenClaw (15.686 tokens), média geral | 44,1 tokens/segundo | 5,1 tokens/segundo | | CPU, OpenClaw (14.021 tokens) | Aproximadamente 19,5 tokens/segundo | 3,86 tokens/segundo |Até 3.600 tokens, o carregamento ficou mais rápido, pois a quantidade processada de uma só vez aumentou. Acima de 15.000 tokens, a velocidade caiu para cerca de 46 tokens/segundo no final. ## Validação de cache no OpenClaw (bot2 mei) Enviei dois prompts consecutivos, executados em GPU com o Qwen3, na sessão de validação. | Item | Primeiro prompt | Segundo prompt | |---|---|---| | Prompt enviado pelo OpenClaw | 15.686 tokens | 15.744 tokens | | Tokens realmente carregados | 15.686 (todos) | **135 (apenas os novos)** | | Tempo de carregamento | 356,1 segundos | **6,1 segundos** | | Geração | 247 tokens, 48,1 segundos (5,11 tokens/segundo) | 249 tokens, 48,5 segundos (5,11 tokens/segundo) | | Total | **410 segundos** | **58 segundos** | - O OpenClaw sempre envia o mesmo conteúdo no início das instruções; portanto, no segundo prompt, 98% da parte já processada foi reutilizada diretamente. - A maior parte do tempo de espera no segundo prompt foi devido ao pensamento de cerca de 240 tokens. Mesmo com `--thinking off` especificado, o pensamento não foi interrompido. Se o pensamento pudesse ser desativado, o tempo estimado seria de cerca de 10 segundos. - O cache não expira por tempo. Ele é apagado apenas quando o modelo é removido, quando outro processo interrompe (devido ao limite de 1 processo simultâneo) ou quando a conversa é comprimida. ## Opções para acelerar Como a velocidade de transferência de memória não pode ser alterada, reduzir a quantidade carregada por token é eficaz. | Método | Efeito esperado | Observações | |---|---|---| | Utilizar cache do prompt | Carregamentos após o primeiro levam apenas alguns segundos (validado) | Pode ser apagado por interrupções ou compressão | | Desativar o pensamento do Qwen3 | Redução de cerca de 48 segundos por prompt | A qualidade da resposta pode diminuir levemente | | Substituir pelo Qwen3 MoE 30B-A3B | Cada token usa aproximadamente 3B de pesos; geração esperada em 2-3x mais rápida, com maior inteligência | Tamanho de cerca de 18 GB; excede os 10,6 GiB da GPU, exigindo processamento parcial na CPU. Versão sem censura ainda não confirmada | | Usar modelo menor (Qwen3-4B) | Geração aproximadamente 2x mais rápida | Redução na inteligência | | Usar decodificação especulativa | Usar Qwen3-0.6B como rascunho; geração em 1,3–2x mais rápida | Efeito varia conforme o conteúdo | | Aplicar quantização ainda mais agressiva (Q3 etc.) | Melhoria de 10–20% | Redução na precisão | | Encurtar as instruções | Redução no carregamento do primeiro prompt e após o cache ser apagado | Implica perda de funcionalidades | Os efeitos listados nesta tabela, exceto o cache do prompt, são estimativas e não foram medidos experimentalmente. ## Estado atual (em 2026-11-03) | Item | Estado | |---|---| | LM Studio | Parado. Inicialização automática desativada | | Runtime selecionado | Vulkan (GPU) | | bot2 (mei) | gpt-5.4-mini | | Porta de transferência para bot2 | Parada. Inicialização automática desativada | | Configuração do bot2 para Qwen3 | `~/.openclaw-bot2/openclaw.json.bak-qwen3-active-*` |

Este conteúdo é apenas para fins informativos e educacionais. Ele pode incluir opiniões de terceiros, conteúdo patrocinado ou material promocional pelos quais o criador pode receber compensação. Nada neste feed constitui aconselhamento financeiro ou garantia de retorno. Você é o único responsável por suas próprias decisões de investimento. Sempre realize a sua própria pesquisa e aja com cautela antes de negociar. Não garantimos a precisão das informações de terceiros e não nos responsabilizamos por quaisquer perdas incorridas. Desempenho passado não é indicativo de resultados futuros. Consulte nossos Termos da Comunidade e a Declaração de Divulgação de Riscos para mais detalhes.

avatarPublique sua resposta

Comentar