30 pontos por GN⁺ 2025-08-13 | Ainda não há comentários. | Compartilhar no WhatsApp
  • Usando a opção --cpu-moe do llama-cpp, é possível processar as camadas de especialistas MOE na CPU e fazer offload apenas das camadas de attention para a GPU, alcançando desempenho rápido de prefill com 5~8GB de VRAM
  • Na GPU ficam residentes apenas os cache KV, pesos e ativações de Attention, tabela de roteamento, LayerNorm etc., mantendo baixo o uso de memória
  • Mesmo com uma GPU no nível de uma RTX 3060Ti e 64GB~96GB de RAM do sistema, é possível rodar o modelo 120B com facilidade, com melhor desempenho em GPUs com suporte a BF16 (RTX 3000+)
  • Com 5GB de VRAM, registrou 8,15ms por token (122,66 tokens/segundo), e com 8GB de VRAM melhorou para 7,44ms (134,44 tokens/segundo)
  • A arquitetura 120B foi projetada para hardware de consumo, permitindo execução em alta velocidade mesmo em ambientes com poucos recursos de GPU

Estrutura de CPU-MOE e offloading para GPU

  • A opção --cpu-moe processa todas as camadas de especialistas (MOE) na CPU
    • Exemplo: --n-cpu-moe 36 → executa todos os 36 blocos MOE na CPU
    • Se necessário, é possível mover apenas parte do MOE para a GPU para ajustar o desempenho
  • Para economizar VRAM, apenas os itens abaixo ficam residentes na GPU
    • cache KV (sequência)
    • pesos e ativações de Attention
    • tabela de roteamento
    • LayerNorm e outros parâmetros não especialistas
  • Como os pesos MOE não ficam residentes na GPU, não há o peso dos grandes parâmetros de MLP

Memória e requisitos de hardware

  • GPU: 5~8GB de VRAM são suficientes (ex.: RTX 3060Ti)
  • O ideal é que a GPU tenha suporte a BF16 (série RTX 3000 ou superior)
  • RAM do sistema: mínimo de 64GB, idealmente 96GB
    • Usando mmap no Linux, as camadas de especialistas “quentes” podem permanecer na memória mesmo que o modelo inteiro não caiba nela

Números de desempenho

Ambiente com 5GB de VRAM

  • Processamento de prompt: 8,15ms/token (122,66 tokens/segundo)
  • Inferência: 55,44ms/token (18,04 tokens/segundo)

Ambiente com 8GB de VRAM (--n-cpu-moe 36, restante na GPU)

  • Processamento de prompt: 7,44ms/token (134,44 tokens/segundo)
  • Inferência: 39,03ms/token (25,62 tokens/segundo)

Ambiente com 22GB de VRAM (parte do MOE na GPU)

  • Processamento de prompt: 6,13ms/token (163,01 tokens/segundo)
  • Inferência: 32,45ms/token (30,82 tokens/segundo)

Conclusão

  • O design do GPT-OSS-120B foi otimizado para executar modelos grandes em alta velocidade até em hardware de consumo
  • Graças à estrutura CPU-MOE, que reduz o uso de VRAM sem perder velocidade, ele é especialmente adequado para ambientes com recursos de GPU limitados

Principais perguntas e respostas

P1. Qual é o uso real de VRAM nessa configuração?

  • Autor original: cerca de 5GB de VRAM ao executar todo o MOE na CPU, com apenas as camadas de attention na GPU
  • Explicação adicional: na GPU ficam apenas cache KV, pesos e ativações de Attention, tabela de roteamento e LayerNorm

P2. Qual é o mínimo de RAM necessário?

  • Autor original: mínimo de 64GB, com recomendação ideal de 96GB
  • Motivo: o mmap do Linux mantém na memória as camadas de especialistas “quentes”, permitindo acesso rápido mesmo sem carregar o modelo inteiro

P3. Mover parte das camadas MOE para a GPU acelera muito?

  • Autor original: pode ficar um pouco mais rápido, mas sem grande diferença
  • Exemplo:
    • Todo o MOE na CPU: prompt 134 tokens/segundo, inferência 25 tokens/segundo
    • 8 camadas MOE na GPU: prompt 163 tokens/segundo, inferência 30 tokens/segundo
    • O uso de VRAM sobe para 22GB

P4. Qual GPU é adequada?

  • Autor original: uma RTX 3060Ti ou superior já é suficiente; recomenda-se suporte a BF16 (RTX 3000+)
  • Motivo: todas as camadas fora do MOE operam em BF16

P5. Como fica a configuração do comando?

  • Autor original: forneceu um exemplo com base no PR #15157
    ~/build/llama.cpp/build-cuda/bin/llama-server \  
        -m $LLAMA_MODEL_DIR/gpt-oss-120b-mxfp4-00001-of-00003.gguf \  
        --n-cpu-moe 36 \  
        --n-gpu-layers 999 \  
        -c 0 -fa \  
        --jinja --reasoning-format none \  
        --host 0.0.0.0 --port 8502 --api-key "dummy"  
    

Ainda não há comentários.

Ainda não há comentários.