5 pontos por GN⁺ 4 시간 전 | 2 comentários | Compartilhar no WhatsApp
  • Gemma 4 26B-A4B roda em velocidade de leitura em um servidor de 2016 com um único Intel Xeon E5-2620 v4, 128GB de DDR3 e sem GPU, usando otimizações do ik_llama.cpp
  • No decoder pass de LLMs, o gargalo é a largura de banda da memória mais do que o processamento, e a CPU passa muito tempo esperando trazer os próximos pesos da RAM para o cache
  • --spec-type mtp, --cpu-moe, --merge-up-gate-experts, --run-time-repack e outros reduzem os gargalos em ambiente DDR3 com decodificação especulativa MTP, roteamento MoE e layout de memória amigável ao cache
  • Pelos logs, a exigência total de memória é de 82,355MiB, e no contexto completo de 262K o cache KV com cerca de 56GB é maior do que os pesos, com cerca de 25GB
  • Ferramentas caixa-preta como ollama não oferecem o suporte de modelo nem os knobs de ajuste fino necessários, e em hardware antigo é preciso entender a fundo o motor de inferência e a estrutura de memória para extrair desempenho

Ambiente de execução e gargalo principal

  • O servidor de teste é equipamento reaproveitado, com especificações Intel Xeon E5-2620 v4 @ 2.10GHz, 8 núcleos, 16 threads, AVX2, 20MiB de cache L3, 2MiB de L2, 128GB de DDR3 e sem GPU
  • Essa CPU não suporta AVX-512, AVX-VNNI nem BF16, e também não tem GPU integrada
  • Na inferência de LLMs, o decoder pass que gera tokens um a um fica limitado principalmente pela largura de banda da memória, não pelo volume de cálculo
  • Para calcular o próximo token, é preciso continuar movendo da RAM para o cache e os núcleos da CPU os pesos que contêm o conhecimento aprendido pelo modelo, e o processador passa mais tempo esperando a movimentação dos próximos pesos do que fazendo contas matriciais
  • Esse “memory wall” também é uma barreira importante de desempenho não só em Xeon, mas até em hardware de alto desempenho como o H100

Os knobs de execução necessários em vez de ferramentas caixa-preta

  • Rodar simplesmente llama-cli em um ambiente com DDR3 e sem GPU é muito lento, e como as otimizações são voltadas para casos de uso comuns com GPU, ainda sobra bastante espaço para melhorias
  • O ollama pode não ter suporte para o modelo necessário e não expõe configurações detalhadas o suficiente para extrair de fato o desempenho em execução
  • Na prática, a execução só é possível combinando vários flags expostos pelo ik_llama.cpp
  • O conjunto principal de flags é o seguinte
--spec-type mtp --draft-max 3 --draft-p-min 0.0 --spec-autotune  
-sm graph -smgs -sas -mea 256 --split-mode-f32  
-t 8 --parallel 8  
--cpu-moe --merge-up-gate-experts  
--flash-attn on --mla-use 3  
--mlock --run-time-repack --no-kv-offload  

Decodificação especulativa e otimização de MoE

  • --spec-type mtp --draft-max 3 --draft-p-min 0.0 --spec-autotune usa o verificador 26B junto com um pequeno drafter MTP gerado anteriormente
  • --draft-max 3 define no máximo 3 tokens por draft, --draft-p-min 0.0 aceita todas as probabilidades, e --spec-autotune ajusta o tamanho da cadeia ao workload
  • Ao gerar cadeias longas de inferência, mesmo que o usuário veja apenas uma resposta final curta, cada token oculto de raciocínio ainda exige um decoder pass completo
  • Em CPU, o custo de fazer streaming dos pesos do verificador para o cache é alto, e como as camadas ativas do pequeno drafter cabem bem no cache L3, o benefício da decodificação especulativa fica ainda maior
  • O Gemma 4 26B-A4B tem arquitetura MoE em que 8 especialistas são ativados por token entre 128 especialistas, e dos cerca de 25.2B de parâmetros no total, aproximadamente 3.8B ficam ativos
  • --cpu-moe ajusta o roteamento ao hierarquia de cache da CPU e trabalha para reduzir o cache thrashing causado por ficar alternando entre 128 especialistas, esvaziando o cache e trazendo tudo de novo da DDR3
  • --merge-up-gate-experts funde a up projection e a gate projection dentro do especialista em uma única multiplicação de matrizes, e isso aparece no log como fused_up_gate = 1
  • -t 8 corresponde aos 8 núcleos físicos, e em um workload limitado por memória usar todas as 16 threads SMT pode aumentar o custo de agendamento em vez do throughput

Fixação de memória, rearranjo e divisão do grafo

  • --run-time-repack reorganiza as matrizes de pesos de acordo com o layout de cache da CPU imediatamente antes da inferência, e no log aparece como Repacked 265 tensors
  • Essa configuração gasta alguns segundos na inicialização para rearranjar na RAM a tabela de números em um formato que a CPU consegue ler melhor, permitindo usar a largura de banda da memória ao máximo durante a geração real de texto
  • --mlock fixa o modelo na RAM para impedir que o sistema operacional o troque para disco
  • Se o limite memlock do kernel não for suficiente, aparecem os avisos failed to mlock 27628376064-byte buffer e Try increasing RLIMIT_MEMLOCK, o que não é um problema do LLM em si, mas da configuração padrão de ulimit
  • --no-kv-offload faz a execução ignorar tentativas de mover o cache KV para GPU em um ambiente sem GPU e o mantém na RAM do sistema
  • -sm graph tenta fazer graph splitting, dividindo verticalmente o grafo computacional para que vários dispositivos de processamento ou regiões de memória calculem ao mesmo tempo partes diferentes da mesma camada
  • Nesta execução, isso foi reduzido com segurança para layer splitting, junto com o log Split mode 'graph' is not supported for Gemma4 external MTP
  • -sas instrui a divisão do workload entre sockets físicos de CPU ou nós NUMA, e --split-mode-f32 faz os pontos intermediários reunidos após a divisão usarem precisão de ponto flutuante de 32 bits

Attention, uso de memória e conclusão

  • ikawrakow escreveu kernels customizados para processar Flash Attention em CPU, permitindo que isso funcione sem GPU em processamento pesado de contexto
  • --flash-attn on funde o softmax da attention e a multiplicação de matrizes, sem gravar fisicamente na RAM toda a matriz de attention N×N, calculando e consumindo tudo dentro do cache em pequenos blocos
  • --mla-use 3 ativa Multi-Head Latent Attention para comprimir Key e Value do cache KV em representações latentes menores
  • Os logs mostram flash_attn = 1, fused_moe = 1, fused_up_gate = 1, confirmando que essas otimizações foram realmente aplicadas
  • Pelos logs de memória, a soma total de todas as camadas é de 81,607.46MiB, e a memória necessária para tensores do modelo e caches é de 82,355MiB
  • No contexto completo de 262K, os pesos ocupam cerca de 25GB e o cache KV cerca de 56GB, então o cache KV é maior que o modelo
  • Essa configuração carrega um MoE de 25B parâmetros e faz decodificação especulativa com drafter MTP para gerar texto em velocidade de leitura em um servidor com Xeon de 2016, DDR3 e sem GPU
  • A conclusão é que o gargalo para rodar localmente IA moderna de pesos abertos não está só no silício, mas também em entender como o motor de inferência funciona e como a memória é estruturada, e que com o fork certo, quantização bem calibrada e entendimento da arquitetura de memória, até servidores antigos conseguem rodar isso

2 comentários

 
GN⁺ 4 시간 전
Comentários do Hacker News
  • Escrevi o post por frustração com a falta de formas de rodar o novo modelo Gemma 4 Drafter e com as ferramentas mainstream esconderem os pontos de ajuste de desempenho
    No fim, consegui fazer um modelo MoE 26B atual rodar em velocidade de leitura num servidor antigo reaproveitado, sem GPU, com apenas um Xeon E5-2620 v4 e 128GB de RAM DDR3
    Também linkei um modelo quantizado no fim do texto, mas ele não vai rodar a menos que você use o fork ik_llama-cpp mencionado, e para detalhes é preciso ver outro post
    Não sou engenheiro de machine learning e o servidor também fica ocupado servindo como cache do Nix, mas posso responder perguntas dentro do possível

    • Fico me perguntando se, para uma carga presa à largura de banda de memória, SMT não seria justamente um caso em que costuma ajudar
      Enquanto uma thread espera pela DDR3, outra thread poderia executar
      Também não entendi bem a explicação de --cpu-moe. Um especialista tem cerca de 4.0GiB de parâmetros, então se o cache L3 é de só 20MiB, parece que não dá para manter parâmetros em cache de forma significativa, mesmo otimizando a ordem dos especialistas
      Como outras pessoas disseram, só alguns Intel Xeon E5-2xxx v4 suportavam DDR3, e segundo a documentação da Intel o E5-2620 v4 não é um deles
    • É um resultado realmente excelente e muito prático. Fico curioso se uma workstation Dell T7610 parecida teria desempenho semelhante ou melhor
      É uma configuração com dois Xeon e 128GB de DDR3, e os CPUs são 2 × Xeon E5-2697 v2, totalizando 24 núcleos/48 threads, então em número de núcleos é melhor, mas talvez na prática a diferença não seja grande
      É um equipamento só juntando poeira, então Gemma em velocidade de leitura parece bem promissor
    • Há 2 anos comprei na Amazon um servidor recondicionado com 2× E5-2690v4, 128GB de RAM e um Dell T7810 por menos de 500 dólares
      Procure por “chia farming” na Amazon, mas pode ignorar chia seeds
      Agora o mesmo equipamento está uns 2,5× mais caro, mas ainda é muito mais barato que uma máquina atual com DDR5
      https://www.amazon.com/dp/B095TRGCSX
    • Fico na dúvida se é mesmo DDR3. Tenho duas máquinas com E5 v4 em casa e ambas usam DDR4, então estou confuso se o soquete 2011-3 suportava DDR3 e DDR4
    • Essa configuração parece perfeita para a minha situação
      Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz, CPUs online 0-31, 128GB de RAM
      Fico curioso se, com 8 slots de DIMM, a largura de banda de memória realmente melhora. Hoje essa pobre máquina só serve para ver YouTube
  • Ainda não chegamos lá, mas o ponto final óbvio da bolha atual é que modelos abertos rodando em hardware e dispositivos locais se tornem “bons o suficiente” para a maioria dos usos
    Se isso acontecer, pode desmontar completamente o que está acontecendo hoje na indústria de tecnologia

    • Para mim isso já aconteceu. Aproveitei a mudança de preço do CoPilot para cancelar a assinatura e instalar um modelo local de programação que roda inteiramente dentro da VRAM
      Quando eu realmente travar, posso chamar a API do Claude, mas acho que uns 80% da necessidade dá para cobrir com um modelo local mais burro
      Linguagens e técnicas de programação não mudam tanto assim, então espero conseguir usar isso por pelo menos 5 anos, e quando aparecer otimização para colocar um modelo mais inteligente na mesma VRAM eu faço upgrade
      Gosto dessa direção
    • Do ponto de vista da Amazon, parece que faria sentido rodar modelos abertos e vender tempo por hora a um preço próximo do custo de execução
      Meu palpite para não fazerem isso é que, como os labs de IA hoje vendem modelos com prejuízo enorme, para a Amazon computação de baixa margem talvez seja menos atraente que outros produtos de margem alta
      Talvez nem precise chegar à execução local para esse estado atual ruir. Quando a pista de dinheiro grátis dos labs de IA acabar e eles tiverem de vender acima do custo real de execução, qualquer um com computação terá incentivo para oferecer serviços de modelos abertos mais baratos, a preço de commodity
    • OpenAI e Anthropic, no fim das contas, estão mais próximas de um negócio de infraestrutura de computação do que propriamente de empresas de IA
      Todo mundo vai ter modelos e capacidade de executá-los, e por isso a escassez de GPU joga a favor delas
    • É o pior cenário para essas empresas recém-criadas que já nasceram valendo trilhões
      A esperança delas depende de grandes e médias empresas moverem todos os fluxos de trabalho para a nuvem e de funcionários competirem para usar o máximo possível de tokens
    • Eu não diria que vai desmoronar por completo, mas claramente estamos indo nessa direção
      Modelos “bons o suficiente” com privacidade e redução de custo no longo prazo ficam atraentes
      Ironicamente, quanto melhor ficar o ambiente de execução genérico para agentes de programação, menor será o fosso competitivo de serviços como o Claude. É difícil acreditar na rapidez com que alguns modelos abertos alcançaram os modelos de ponta de alguns meses atrás
  • O texto é bom e tecnicamente impressionante. Concordo que é preciso entender o pipeline de build e conseguir rodar localmente
    Só que, dependendo da tarifa de energia, pode não ser economicamente viável. Servidores antigos são pouco eficientes energeticamente, e eu achava que servidores Xeon antigos consumiam algo como 200W sob carga, enquanto o mesmo modelo está disponível no OpenRouter por 0,1/0,3 dólar por milhão de tokens, 76 tokens/segundo e contexto de 262k
    Além disso, esses servidores fazem barulho. Mas talvez minha estimativa de 200W tenha sido alta demais; os servidores Xeon antigos que usei realmente gastavam muita energia, mas não lembro os modelos exatos

    • O 2620v4 não é um monstro que suga eletricidade. Depende da placa de servidor, mas nem sempre o servidor é assim
      Servidores em geral são barulhentos, mas isso também varia conforme a configuração. Existe muita hospedagem barata baseada nesses chips, e eles têm eficiência energética melhor do que parece
    • Deve ficar mais perto de 85W sob carga. É bem silencioso até com cooler barato e a temperatura raramente passa de 50°C
    • O motivo de esses servidores fazerem barulho é que, para colocá-los em 1U ou 2U, você precisa de ventoinhas de alta rotação para gerar a pressão estática necessária
      Rodando uma configuração parecida num gabinete 4U com ventoinhas lentas de 120mm, fica tranquilo
  • Fico feliz em ver que outras pessoas também estão percebendo isso. Estou rodando Gemma 26B-A4B Q4 em um contêiner com um Xeon de 2012 e 16~24GB de RAM, e consigo algo em torno de 8~12 tokens/s
    Não dá para comparar com contexto grande ou execução em GPU, e o decodificador de imagem do llama.cpp também é muito mais lento que na GPU, mas para pequenas tarefas de automação ou perguntas de conhecimento geral funciona bem. É rápido o bastante para acompanhar lendo, então a espera incomoda menos
    A configuração é um build do llama.cpp com OpenBLAS e OpenMP ativados, OPENBLAS_NUM_THREADS=4, OMP_NUM_THREADS=4, unsloth/gemma-4-26B-A4B-it-GGUF:UD-Q4_K_XL, cache q8_0 e contexto de 8192
    Vale a pena procurar otimizações específicas da CPU, como AVX2; testei MTP rapidamente, mas não houve ganho de desempenho. Também dá para ajustar o tamanho do lote de cache/contexto ou até baixar para Q2, e é melhor evitar superalocação de threads. Recomendo começar pelos padrões ou pelo llama-bench

    • Estou montando um sistema Frankenstein agora. A configuração é uma placa X99 DDR3 chinesa, Xeon v3 de 12 núcleos, 32GB de RAM a 1866MT/s e uma 1080 Ti
      Nos testes, rodei gemma4:e4b-it-q4_K_M, que cabe completamente em 11GB de VRAM, e passei de 50 tokens/s. Um modelo tão pequeno assim não é útil para programação, mas pode servir para outras coisas
      Quero fazer um Wake-on-Use para usar como um ChatGPT pessoal. Talvez dê para colocar um Pi como proxy e chamar um script de Wake-on-LAN; quem sabe isso vire um projeto divertido de fim de semana algum dia
      O LLM que fica sempre ligado é o dense Gemma4:31b, que nem chega à metade dos 12GB de uma 2060; é bem lento, mas a qualidade é boa, e como ele serve para processamento automático em fila, eu não fico esperando a saída olhando para a tela. Tenho mais uma 2060, mas se colocar as duas o PC não passa do POST
    • Falando de llama e computação local, há alguns dias o Georgi Gerganov tuitou que está rodando localmente o Qwen3.6 27B em um Mac M2 Ultra ou em uma RTX 5090 para ajudar no desenvolvimento do llama.cpp
  • Fiquei um tempo considerando um Mac Studio Pro, mas no fim vim por esse caminho. Tenho uma máquina HP Z620 headless com 192GB de RAM ECC, dois Xeon E5-2680 v2, Optane AIC, duas P102-100 com 10GB de VRAM, um SSD mínimo de boot com Debian 12.6 e uma versão antiga fixa do CUDA que suporta placas Pascal
    Uso remotamente do porão via AMT/meshcommander, subo o llama.cpp e o frontend e acesso pela rede local. Tenho mexido com Talkie, Qwen 3.6 27b e medgemma, e escolhendo a quantização certa, o desempenho em GGUF no geral foi bem decente
    O custo total ficou abaixo de 500 dólares, mas comprei o servidor no eBay no ano passado, então hoje pode ser diferente
    No futuro, se os LLMs ternários florescerem, espero que esse hardware antigo consiga de fato hospedar modelos densos em conhecimento e de alta densidade. Não me importo se ultrapassar a RAM da GPU e acabar usando Optane, e conhecimento factual geral importa mais para mim do que velocidade
    O plano final é, depois de configurar tudo, guardar no porão dentro de uma lata de lixo Faraday, para ficar como um oráculo de “reconstrução da civilização” quando o mundo desmoronar. Claro que, nessa situação, energia seria um problema, mas se esse hardware está tão barato e a IA moderna já é prática em tantos momentos, vale a tentativa

  • O mais interessante no avanço da IA não é AGI nem o modelo mais recente de algum unicórnio específico da IA, mas sim o que dá para rodar localmente
    Seis anos atrás, eu rodava em um PC gamer parrudo modelos divertidos, mas pouco úteis; hoje, em um notebook M5, dá para rodar algo 100 vezes melhor do que aquilo
    Se o mercado reagir à falta de memória e a evolução do Apple silicon continuar nesse ritmo, o que será possível rodar localmente daqui a seis anos vai ser muito interessante ou assustador
    Também não sei o que isso significa para as valuations das empresas de IA. Uma vez fiz uma pergunta parecida para um funcionário de uma dessas empresas em um evento, e ele não respondeu — só foi pegar um coquetel

    • Há coisas que não se pode dizer em voz alta. No negócio de modelos de IA, não existe um fosso competitivo durável e fácil de defender como vantagem tecnológica; no máximo, há vantagem de curto prazo
      O negócio de IA é intensivo em capital, como uma fábrica antiga. Datacenters são caros, modelos consomem muita eletricidade, e o hardware interno precisa ser trocado a cada 3~4 anos
      Modelos menores e mais especializados vão corroendo as margens por baixo. Para transcrição, voz e detecção de imagem, não é preciso um modelo gigante
      Não há motivo para esperar margens altas como no software tradicional, e a maior parte dos ganhos da IA vai para o consumidor. Ainda assim, alguns gigantes como Microsoft, Google, Amazon e Meta podem buscar vantagem de custo por economia de escala
    • O nível do que dá para rodar localmente em hardware de consumo está evoluindo muito bem
      Não precisa ser algo topo de linha como uma 5080; com uma GPU gamer decente já dá para rodar localmente, em 2025, modelos melhores do que o estado da arte do começo do ano
      Dependendo da tarefa que você quer, talvez precise trocar de modelo, e um modelo gigantesco que resolva tudo ainda continua sendo coisa de datacenter
    • No fim, é uma questão de conveniência. Dá para rodar muita coisa localmente, de Wikipedia a redes sociais, e-mail e servidor de vídeo
      Mas a maioria das pessoas com emprego em tempo integral e dois filhos não tem tempo nem energia para aplicar patches e fazer manutenção. Os sistemas continuam ficando mais complexos e cheios de bugs. É o velho trade-off entre liberdade e conveniência
    • Isso provavelmente não terá muito impacto nas valuations das empresas de IA
      A maioria dos usuários não sabe o que é um LLM nem como ele roda. Muitos usuários de LLM usam por padrão o que o trabalho oferece, e mesmo usuários um pouco mais experientes parecem tranquilos em pagar assinatura da OpenAI ou da Anthropic
      Vai surgir um grupo pequeno, mas dedicado, de usuários de modelos abertos que preferem LLMs locais, mas o restante provavelmente continuará consumindo dos grandes provedores. Pode acabar parecido com a escolha de sistema operacional hoje: uma minoria de usuários Linux e a maioria em Windows, macOS e Chrome
    • Em software, especialmente jogos, sempre foi assim
      Jogos de 5~6 anos atrás podem ser comprados muito mais baratos e rodam em hardware comum. Mas a indústria não fica parada por 5 anos, então continua saindo software novo que exige hardware melhor
  • O resultado que o autor do post original revelou nos comentários é de cerca de 12 tokens/s
    É um esforço muito mais impressionante do que eu imaginava ser possível nesse hardware, mas ainda fica bem aquém do necessário para uma sessão interativa satisfatória

    • Especialmente porque modelos pequenos assim são realmente baratos e rápidos em plataformas como a OpenRouter
      Muitas vezes custam de 100 a 500 vezes menos do que os modelos de ponta, e às vezes também são de 2 a 5 vezes mais rápidos em tokens/s
    • Demorei demais para encontrar esse resultado. Considerando que dá para rodar o modelo até em SSD, não é surpreendente que seja possível executar em RAM lenta
    • Para uso interativo não é tão ruim assim: https://mikeveerman.github.io/tokenspeed/?rate=12&mode=text
      Para uso em segundo plano, seria totalmente aceitável
    • Dá para fazer criptografia RSA com papel, lápis e uma calculadora científica
      Funciona, mas não tem vazão para trabalho sério
  • O E5-2620 v4 é excelente. Uso o meu há 10 anos e fui tentar fazer upgrade, mas parei quando vi os preços atuais
    Coloquei 64 GB de DDR4 e uma RX 9060 XT 16 GB, e os jogos ainda rodam rápido. Em DOOM The Dark Ages, a CPU talvez seja um pequeno gargalo, mas a 60 fps não há problema
    Rodar LLMs leves na GPU é a escolha óbvia, e é legal ver que, com ajuste fino, também dá para rodar de forma decente na CPU
    Comprei uma 2667 v4 por 30 dólares há um mês, e provavelmente haverá um bom ganho de desempenho, mas ainda não precisei. Se eu fosse forçar mais para o lado de LLM como no post, talvez fizesse o upgrade, porque a 2667 consegue lidar com RAM um pouco mais rápida

    • Tenho uma configuração com dual E5 2667-v4, 256 GB DDR4, Z640 e 1080 Ti, e no primeiro semestre de 2025 consegui tudo isso por menos de 500 dólares, sem contar o SSD
      Ainda me surpreendo bastante com o que dá para encontrar no mercado de usados
      Eu não imaginava que os preços de RAM e GPU iam disparar tanto, então dei sorte no timing. Até penso em pegar uma 3080 na faixa dos 300 dólares no eBay e vender a 1080 Ti, mas fora isso foi um upgrade excelente
      Consome eletricidade como Coca-Cola, mas como workstation funciona muito bem, então pretendo usar até quebrar
    • Usar uma CPU por 10 anos realmente parece muito tempo
      Eu achava que danos causados por calor matavam CPUs depois de uns 5 a 7 anos, e fico me perguntando se isso era uma suposição errada. Talvez as CPUs de hoje sejam muito mais resistentes e robustas do que antes
  • Houve recentemente um post parecido sobre otimização de Xeon antigo
    “High-Performance AI on a Budget: Optimizing llama.cpp for Qwen3.5 Inference on a Dual-GPU HP Z440”
    https://news.ycombinator.com/item?id=47320244

  • Surpreendentemente, o Itanium também parece se encaixar muito bem para LLMs: https://medium.com/@tglozar/running-llama-inference-on-intel...
    Pensando bem, faz sentido

 
cronex 1 시간 전

O conteúdo é interessante. Tenho um sistema Xeon antigo, então vou tentar também.