Avançado 11 minllama.cpp

Compilar llama.cpp com Metal

Resposta direta

Em um Mac com Apple Silicon, o llama.cpp pode ser compilado com três comandos, e o Metal está ativado por padrão: clone o repositório, execute cmake -B build e depois cmake --build build --config Release, sem instalar um toolkit de GPU. Você também pode instalá-lo sem compilar usando o Homebrew. Os binários llama-cli e llama-server passam então a executar os cálculos na GPU do chip M; é a memória unificada, mais do que a potência bruta, que determina o tamanho possível do modelo.

O llama.cpp é o motor de inferência no qual se baseiam Ollama e LM Studio, e roda nativamente no Mac. Este guia mostra como instalá-lo ou compilá-lo com Metal, executá-lo com um modelo GGUF, disponibilizá-lo via API, aumentar o limite de memória da GPU no macOS e ler corretamente os benchmarks publicados para os chips M1 a M5.

Por Mohamed Meguedmi·Atualização 2026-09-30·Testado no macOS 14+

#llama.cpp no Mac: o que o Metal oferece

No macOS, a GPU é usada via Metal, a API gráfica e de computação da Apple, e o llama.cpp a utiliza diretamente. O README do projeto informa que o Apple Silicon recebe suporte de primeira classe, com otimizações via ARM NEON, Accelerate e Metal. Na prática, isso significa que a compilação padrão já produz um motor que utiliza a GPU, sem precisar adicionar nenhuma opção, e que a memória unificada evita qualquer transferência entre o processador e a GPU: o modelo ocupa a memória uma única vez. O fator limitante em um Mac é, portanto, a capacidade e a largura de banda dessa memória.

→
Não há nada para instalar para o GPU
Diferentemente do CUDA, que exige um toolkit de vários gigabytes, o Metal é fornecido pelo macOS. Bastam as ferramentas de compilação da Apple e o CMake.

#Pré-requisitos

O kit IA Local

Seu ChatGPT privado e gratuito na sua máquina em 1 hora — LM Studio, Ollama, Open WebUI, seus documentos, sem nuvem.

  • Espaço online vitalício
  • PDF + arquivos
  • Atualizações vitalícias
Um Mac Apple Silicon
M1 a M5: é o foco deste guia. Os Macs com processador Intel quase não se beneficiam disso.
Ferramentas de compilação Apple
Instale as ferramentas de linha de comando com xcode-select --install.
CMake e Git
Disponíveis via Homebrew: brew install cmake git.
Memória para o modelo
O ponto de referência do site: um 8B em Q4 pesa aproximadamente 5 GB, um 14B cerca de 9 GB, um 32B entre 19 e 20 GB, antes do contexto.
Ferramentas de compilação
xcode-select --install
brew install cmake git

#Instalar sem compilar: Homebrew

Se você não precisar de opções de compilação específicas, a maneira mais rápida é o Homebrew. A documentação de instalação do llama.cpp indica que a fórmula é atualizada automaticamente com cada nova versão do projeto. Você obtém os mesmos executáveis prontos para uso, com Metal.

Instalação com Homebrew
brew install llama.cpp

Compile você mesmo quando quiser a versão mais recente do repositório, testar uma ramificação ou modificar uma opção de compilação. Caso contrário, o Homebrew é suficiente: você economiza o tempo de compilação e as atualizações são feitas com brew upgrade.

#1. Compilar com Metal

Compilação (Metal ativado por padrão)
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp

cmake -B build
cmake --build build --config Release -j $(sysctl -n hw.ncpu)

A documentação de build é explícita: no macOS, o Metal está ativado por padrão e faz com que os cálculos sejam executados na GPU. Nenhuma opção precisa ser adicionada. O antigo nome do repositório, sob a conta de Georgi Gerganov, redireciona para a organização ggml-org, onde agora está o projeto. Os binários aparecem em build/bin, incluindo llama-cli para o terminal e llama-server para a API.

i
Metal e MPS, duas coisas diferentes
MPS (Metal Performance Shaders) é a camada que o PyTorch utiliza. O llama.cpp não depende dela: seu backend Metal foi escrito para a inferência de modelos quantizados, o que explica em grande parte por que ele é mais rápido do que soluções que passam pelo PyTorch no Mac.

Duas opções úteis: a documentação indica que -DGGML_METAL=OFF desativa o Metal na compilação e que é possível forçar um binário compilado com Metal a executar no processador usando --n-gpu-layers 0, o que é útil para comparar as velocidades.

#2. Iniciar um primeiro modelo

Os motores recentes sabem baixar o modelo por si mesmos. A opção -hf recebe o nome de um repositório Hugging Face, com a quantização no sufixo; sem sufixo, Q4_K_M é usada por padrão. Para um arquivo já baixado, use -m com o caminho dele.

Baixar e iniciar um modelo
./build/bin/llama-cli -hf UTILISATEUR/MODELE-GGUF:Q4_K_M
Executar um arquivo local
./build/bin/llama-cli -m ~/modeles/mon-modele-Q4_K_M.gguf

O número de camadas colocadas na GPU é definido com -ngl; seu valor padrão é auto, o que se adapta a um Mac com memória unificada. Você também pode escrever -ngl all para carregar tudo. Não procure o caminho de um modelo no diretório de Ollama: seus arquivos são armazenados em um formato interno que não é diretamente utilizável como GGUF.

#Servir uma API compatível com OpenAI com llama-server

O llama-server expõe rotas compatíveis com a API OpenAI para chat, respostas e embeddings. Por padrão, ele escuta em 127.0.0.1, porta 8080: é acessível apenas do seu Mac. Para torná-lo acessível na rede, é necessário especificar --host explicitamente, e então convém proteger o acesso.

Iniciar a API local
./build/bin/llama-server -m ~/modeles/mon-modele-Q4_K_M.gguf --port 8080

#4. O limite de memória da GPU no macOS

No Apple Silicon, o macOS disponibiliza à GPU apenas uma parte da memória unificada. Um modelo que ultrapassa essa parte é recusado ou passa a usar o processador, mesmo que a memória total seja suficiente. O motor exibe o valor efetivo ao iniciar: procure a linha ggml_metal_init: recommendedMaxWorkingSetSize nos logs do llama-cli ou do llama-server.

O comando sysctl iogpu.wired_limit_mb permite aumentar esse limite. Ele espera um valor em megabytes: 61.440 para 60 GB, por exemplo. Um colaborador do repositório do llama.cpp lembra que o comando precisa ser executado novamente a cada inicialização, pois a alteração não é persistente, e desaconselha chegar a 100%: o sistema precisa de memória para tudo o que não está reservado pela GPU, e surgem problemas se não sobrar memória suficiente para ele.

Aumentar o limite (não persistente)
# 56 Go pour le GPU sur un Mac de 64 Go (56 x 1024 = 57344)
sudo sysctl iogpu.wired_limit_mb=57344

# Relancez ensuite le modèle et relisez recommendedMaxWorkingSetSize
!
Mantenha uma margem de memória para o macOS
Reserve pelo menos alguns gigabytes para o sistema. Um limite muito alto causa lentidão ou travamentos que obrigam a reiniciar. Para tornar a configuração permanente, é necessário reaplicá-la na inicialização, por exemplo, com um daemon iniciado no boot: não existe uma configuração persistente nativa.

#Qual modelo para cada capacidade de memória unificada

A memória unificada é compartilhada entre o macOS, seus aplicativos e o modelo, e a GPU recebe apenas uma parte dela. A referência do site situa os pesos de um modelo 8B em Q4 em torno de 5 GB, de um 14B em torno de 9 GB e de um 32B em torno de 19 a 20 GB. O cache de contexto se soma a esses valores. A tabela fornece uma estimativa conservadora; o valor que deve ser tomado como referência é recommendedMaxWorkingSetSize, exibido pelo motor.

Ordem de grandeza conforme a memória do Mac (pesos em Q4, sem contar o contexto)
Memória do MacModelo razoávelObservação
8 GB3B (2 GB)Um 8B é possível, mas deixa muito pouco espaço para o macOS
16 GB8B (5 GB), contexto médioO limite padrão da GPU continua sendo suficiente
24 a 32 GB14B (9 GB), ou até um 8B em Q8Um 32B em Q4 exige aumentar o limite da GPU
48 a 64 GB32B (19-20 GB) com contexto longoAumentar o limite da GPU se o motor recusar o modelo
96 GB ou mais70B (aproximadamente 40 GB) e modelos MoEVerificar recommendedMaxWorkingSetSize antes de baixar

Esses valores aproximados são estimativas conservadoras, não medições: um contexto longo, um segundo modelo ou um aplicativo que consuma muitos recursos bastam para mudar o cenário. O guia dedicado à memória apresenta o método completo de cálculo.

#5. As opções que importam

Opções do llama-cli e do llama-server (README oficial do llama-cli)
OpçãoFunçãoValor padrão
-ngl, --n-gpu-layersNúmero de camadas colocadas em VRAM (um número, auto ou all)auto
-fa, --flash-attnFlash Attention: on, off ou autoauto
-ctk, -ctvTipo de cache KV para chaves e valores (f16, q8_0, q4_0…)f16
-hfRepositório do Hugging Face para download, com quantização opcionalQ4_K_M se o sufixo for omitido
-cTamanho do contexto, em tokensde acordo com o modelo

O Flash Attention está em modo automático por padrão: na maioria dos casos, não é necessário ativá-lo manualmente. O cache KV pode ser quantizado com -ctk e -ctv, desde que o Flash Attention esteja ativo; a quantização em q8_0 reduz aproximadamente pela metade a memória do cache em comparação com f16, ao custo de uma pequena perda de precisão que convém verificar nos seus casos de uso. O guia dedicado detalha essa contrapartida.

#6. Desempenho por chip: o que os benchmarks públicos medem

O QuelLLM não realiza medições nessas máquinas. A referência é a discussão «Performance of llama.cpp on Apple Silicon M-series» no repositório do llama.cpp, em que cada colaborador executa o mesmo teste com um LLaMA 7B em Q4_0. A tabela abaixo apresenta algumas dessas linhas, com a versão do llama.cpp usada em cada medição: as medições dos chips M1 a M4 foram feitas com a mesma versão, enquanto a dos M5 foi feita com uma versão mais recente.

Geração (tg) e prompt (pp) em LLaMA 7B Q4_0, em tokens por segundo
Chip (núcleos de GPU)Largura de bandaPromptGeraçãoProporção do limite máximo teórico
M2 Pro (19)200 GB/s341,1938,8674 %
M3 Pro (18)150 GB/s341,6730,7478 %
M4 Pro (20)273 GB/s439,7850,7471 %
M5 Pro (20)307 GB/s1 620,6466,3382 %
M4 Max (40)546 GB/s885,6883,0658 %

O limite teórico é a largura de banda dividida pelo peso do modelo (3,56 GiB, ou seja, 3,82 GB). Os chips Pro atingem 71 a 82% desse limite, enquanto o chip Max alcança apenas 58%: a partir de certo nível, a memória não é mais o único fator limitante, e pagar por mais largura de banda traz menos benefício do que a ficha técnica sugere.

Três lições. A geração segue a largura de banda: o M3 Pro, a 150 GB/s, é mais lento que o M2 Pro a 200 GB/s, apesar de seu chip ser de uma geração mais recente. Os chips Max, com largura de banda muito maior, dominam. Por fim, a leitura do prompt deu um salto com os M5: 1.620,64 tokens/s para um M5 Pro, contra 439,78 para um M4 Pro com o mesmo número de núcleos de GPU, ou seja, 3,7 vezes mais. Essa diferença importa para documentos longos e RAG, muito menos para o chat.

i
Como ler esses números
As medições vêm de colaboradores diferentes, com versões distintas de llama.cpp e de macOS. Elas fornecem uma ordem de grandeza para comparar chips, não uma garantia para a sua máquina. Um modelo com 8 a 9 bilhões de parâmetros em Q4 é mais pesado que um de 7B e, por isso, será um pouco mais lento.

Uma boa prática antes de concluir que um Mac é lento: executar novamente o mesmo modelo com -ngl 0, depois com o valor padrão, e comparar. A diferença entre os dois mostra o ganho real proporcionado pela GPU na sua máquina e confirma que o processamento está sendo feito pelo Metal. Anote também a versão do llama.cpp utilizada: as otimizações para Metal evoluem rapidamente, e um binário antigo pode ser significativamente mais lento que uma versão recente.

#Solução de problemas: erros comuns

Sintomas comuns no Mac
SintomaCausa provávelPossível solução
Velocidade muito baixa, processador com 100 % de usoModelo carregado na CPUVerificar -ngl e ler os logs de inicialização
Erro de alocação de memória do GPUModelo maior do que a parcela de RAM alocada à GPUAumentar iogpu.wired_limit_mb, reduzir o modelo ou o contexto
O Mac fica lento ou travadoLimite da GPU alto demais, sem margem para o macOSReduzir novamente o valor de iogpu.wired_limit_mb
A compilação falhaFerramentas Apple ausentes ou CMake muito antigoxcode-select --install em seguida brew upgrade cmake
O modelo não foi encontradoCaminho ou nome do repositório Hugging Face incorretoTestar -hf com um repositório conhecido, ou -m com um caminho absoluto
FAQ
É necessário compilar o llama.cpp para usar o Metal no Mac?+
Não. Metal está ativado por padrão na compilação no macOS, e o Homebrew fornece executáveis prontos com brew install llama.cpp. Compile você mesmo apenas para obter a versão mais recente do repositório, testar uma branch ou usar uma opção específica. As duas alternativas fornecem as mesmas ferramentas, llama-cli e llama-server.
Como verificar se o llama.cpp está usando a GPU no meu Mac?+
Leia os logs ao iniciar o llama-cli ou o llama-server: eles indicam a inicialização do Metal e o valor de recommendedMaxWorkingSetSize. Uma taxa de geração muito baixa com o processador saturado indica um modelo carregado na CPU. Verifique então a configuração -ngl, cujo valor padrão é auto.
Como alocar mais memória à GPU em um Mac Apple Silicon?+
Com sudo sysctl iogpu.wired_limit_mb=VALEUR, sendo o valor expresso em megabytes. A configuração não é persistente e precisa ser refeita a cada inicialização. Não tente usar 100% da RAM: o macOS precisa de memória para o restante do sistema. Leia novamente recommendedMaxWorkingSetSize nos logs para confirmar o novo valor.
llama.cpp ou Ollama no Mac?+
O Ollama se baseia no llama.cpp e simplifica a instalação, os downloads e a API. Use o llama.cpp diretamente para acessar as opções mais recentes, ter controle preciso dos parâmetros ou usar o llama-server. No Mac, o guia comparativo entre MLX e llama.cpp também detalha o outro mecanismo possível. Para começar, Ollama ou LM Studio são suficientes.
Qual velocidade esperar de um Mac M4 Pro com llama.cpp?+
O benchmark público do llama.cpp dá 50,74 tokens/s em geração e 439,78 em leitura do prompt para um M4 Pro com 20 núcleos de GPU em um LLaMA 7B em Q4_0. Um modelo maior será mais lento. Esses números variam com a versão do llama.cpp, a memória e o macOS.
Este guia ajudou você?

Um comentário, um erro ou uma observação? Avise-nos; isso ajuda a melhorar o guia para todos.