Extrair o máximo de um Mac Apple Silicon
Otimizar um LLM em Apple Silicon consiste em aumentar o limite de memória que o macOS disponibiliza para a GPU (sudo sysctl iogpu.wired_limit_mb), escolher um modelo e uma quantização adequados, quantizar o cache KV para contextos longos e selecionar o mecanismo de execução adequado. Nenhum ajuste supera a largura de banda do chip: ela limita a velocidade de geração.
Um Mac não é um PC com uma GPU: sua memória é compartilhada e a parcela que a GPU pode usar é ajustável. Esta página explica o limite de memória da GPU e como alterá-lo, os modelos adequados a cada capacidade de memória, o cache KV, a atenção flash e a escolha do motor de inferência.
Você está escolhendo uma máquina? Nossas escolhas por orçamento →
Opção de compra para este guia: Mac mini M5 Pro (24 GB / 512 GB).
Por que essa escolha? Nossa ficha completa sobre Mac mini M5 Pro (24 GB / 512 GB) →
Compare todas as opções por orçamento, de 800 a 3 500 € →
Orçamento apertado: RTX 5060 · Modelos grandes: RTX 5090 · Mac Studio.
Em deslocamento: qual notebook para IA local →
Links afiliados — comissão possível sem custo adicional para você. Como Parceiro Amazon, QualLLM obtém lucro com compras que atendem às condições exigidas.
#Otimizar um LLM no Apple Silicon: os quatro eixos
Para tirar o máximo de um Mac Apple Silicon, quatro fatores importam, nessa ordem: o limite de memória que o macOS disponibiliza para o GPU, o tamanho e a quantização do modelo, o cache KV e a atenção flash para contextos longos, e a escolha do motor (Ollama, llama.cpp, MLX ou LM Studio). Tudo parte de um fato: a memória unificada é compartilhada entre CPU e GPU, então a RAM total serve como VRAM, mas o macOS limita a parcela que o GPU pode reservar como memória fixa. Elevar esse limite permite usar modelos maiores; os outros fatores evitam saturar a memória ou desacelerar a geração. Nenhum deles torna a máquina mais rápida do que sua largura de banda permite.
- Memória unificada
- A CPU e a GPU leem os mesmos dados sem cópia. O MLX resume assim: os arrays ficam em uma memória compartilhada. Um Mac de 64 GB pode, portanto, carregar um modelo que não cabe em nenhuma placa de vídeo de consumo de 24 ou 32 GB.
- Eficiência
- Um Mac consome muito menos que um PC equipado com uma placa de vídeo de alto desempenho, cuja potência ultrapassa 500 W no caso da RTX 5090 da NVIDIA: o Mac continua silencioso e consome pouca energia em tarefas leves.
- Ecossistema
- O repositório llama.cpp descreve o Apple silicon como uma plataforma com suporte de primeira classe, otimizada via ARM NEON, Accelerate e Metal. Ollama, LM Studio e MLX também utilizam Metal.
- Limites
- Sem CUDA, portanto, as bibliotecas que o exigem não funcionam; a largura de banda de um Mac (até 546 GB/s no M4 Max) permanece abaixo da de uma placa gráfica de alto desempenho; o fine-tuning é possível, mas mais lento.
#VRAM de um Mac: o limite de memória da GPU e iogpu.wired_limit_mb
IA local no seu Mac, a fundo: memória unificada, MLX vs GGUF, o modelo certo para seu chip, Ollama e LM Studio ajustados para Apple Silicon.
- Espaço online vitalício
- PDF + arquivos
- Atualizações vitalícias
Em um Mac, não há VRAM separada: a “VRAM” é uma parte da memória unificada que o macOS permite fixar na memória física para uso pela GPU. Essa parte é menor que a RAM total. As fontes públicas divergem sobre a fração padrão, que varia entre dois terços e três quartos conforme o caso; não presuma esse valor, consulte-o na sua máquina. O MLX expõe o valor adotado pelo sistema por meio de device_info(), no campo max_recommended_working_set_size, e a documentação do MLX indica que é possível aumentar esse limite do sistema com sudo sysctl iogpu.wired_limit_mb seguido do tamanho em megabytes.
O repositório mlx-lm apresenta a regra de prudência: o valor deve superar o tamanho do modelo em megabytes, mas permanecer abaixo da memória da máquina. A Apple não documenta esse ajuste como um parâmetro para o público em geral: trate-o como uma modificação arriscada no sistema.
| Memória do Mac | Reserva recomendada para o sistema | Memória que se pretende destinar à GPU | Valor de iogpu.wired_limit_mb |
|---|---|---|---|
| 16 GB | ≈ 5 GB | ≈ 11 GB | 11264 |
| 24 GB | ≈ 6 GB | ≈ 18 GB | 18432 |
| 32 GB | ≈ 8 GB | ≈ 24 GB | 24576 |
| 64 GB | ≈ 8 a 10 GB | ≈ 54 a 56 GB | 55296 à 57344 |
| 128 GB | ≈ 16 GB | ≈ 112 GB | 114688 |
A fórmula é simples: valor em MB = memória desejada em GB × 1 024. A reserva é uma escolha de precaução deste guia, não um dado da Apple: depende dos aplicativos que você mantém abertos. Se a máquina ficar lenta, gravar no disco ou ficar instável, reduza o valor.
Para consultar o limite que o macOS realmente adota, basta uma linha de Python, desde que o pacote mlx esteja instalado. A saída contém o campo max_recommended_working_set_size, expresso em bytes: divida por 1.073.741.824 para obter gigabytes. Compare esse valor com o tamanho do seu modelo antes de fazer qualquer ajuste: se o modelo já cabe dentro desse limite, aumentá-lo não traz nenhum benefício.
- 01Ler o valor atualNo Terminal, o comando sysctl iogpu.wired_limit_mb exibe o valor. Um zero geralmente indica que o macOS aplica seu limite padrão.
- 02Calcular o novo valorUse o tamanho do modelo mais seu cache K/V, adicione margem e deixe ao sistema uma reserva de pelo menos 5 GB. Converta para megabytes.
- 03Aplicar a configuraçãoExecute sudo sysctl iogpu.wired_limit_mb com o valor desejado. O ajuste entra em vigor sem reiniciar, segundo os guias publicados.
- 04VerificarReinicie o modelo: os logs do Ollama ou do llama.cpp indicam a memória de trabalho recomendada; com MLX, consulte novamente device_info(). Monitore a pressão de memória no Monitor de Atividade.
- 05VoltarVolte a definir o valor como 0 para devolver o controle ao sistema, ou reinicie: a configuração nem sempre é mantida após uma reinicialização; verifique-a com sysctl.
#Quais modelos usar de acordo com a memória do Mac
O tamanho de um modelo em Q4 segue os valores de referência do site: 3B, cerca de 2 GB; 7-8B, cerca de 5 GB; 14B, cerca de 9 GB; 32B, cerca de 19 a 20 GB; 70B, cerca de 40 GB. A esse tamanho somam-se o cache KV e a margem para o sistema. A tabela cruza esses valores de referência com a memória do Mac, antes e depois do aumento do limite da GPU.
| Memória | Sem ajustes | Com o limite aumentado |
|---|---|---|
| 16 GB | 7-9B, contexto médio | 12B, contexto curto |
| 24 GB | 12-14B | 24B em Q4 (≈ 14 GB), contexto médio |
| 32 GB | 24B | 32B em Q4 (≈ 19-20 GB), contexto curto |
| 64 GB | 32B com contexto longo | 70B em Q4 (≈ 40 GB), contexto médio |
| 128 GB | 70B com contexto longo | 70B com contexto muito longo, ou vários modelos carregados |
A velocidade máxima é calculada a partir da largura de banda do chip: largura de banda dividida pelo tamanho dos pesos em gigabytes. Ela é indicada na ficha de cada máquina: consultar os guias do MacBook Air, MacBook Pro, Mac mini e Mac Studio, que apresentam os números dos respectivos chips.
Caso prático: em um Mac de 32 GB, um modelo de 32 bilhões de parâmetros em Q4 pesa cerca de 19 a 20 GB. Com um contexto de 8.000 tokens e um cache KV em f16, é preciso contar com alguns gigabytes a mais, totalizando cerca de 23 a 24 GB. Se o limite padrão de memória da GPU for mais baixo, parte do modelo passa para a CPU e a velocidade cai: aumentar o limite para 24 ou 26 GB resolve o problema, desde que reste memória suficiente para o sistema. Se a pressão de memória chegar ao vermelho, escolha um modelo de 24 bilhões.
#Quantização: por que Q4 continua sendo uma boa opção padrão no Mac
Em um Mac, a geração é limitada pela largura de banda da memória: um modelo menor é lido mais rápido. Q4_K_M continua, portanto, sendo a escolha padrão, com o melhor equilíbrio entre tamanho, velocidade e qualidade. Q5_K_M e Q6_K custam alguns pontos percentuais de velocidade em troca de um ganho modesto de qualidade; Q8_0 quase dobra o peso de Q4 e, por isso, reduz aproximadamente à metade o limite de velocidade. Os formatos MLX de 4 bits desempenham o mesmo papel no ecossistema MLX. O guia sobre quantização detalha o equilíbrio entre vantagens e desvantagens, sem que seja necessário repetir os números aqui.
#Metal e Flash Attention
Os motores comuns aproveitam a GPU do Mac via Metal, sem configuração. Com o Ollama, o comando ollama ps indica se o modelo está carregado na GPU. A atenção flash reduz a memória consumida por contextos longos: o Ollama a ativa automaticamente quando o motor e o hardware permitem, e a variável OLLAMA_FLASH_ATTENTION=1 força sua ativação. No llama.cpp, a opção -fa aceita on, off ou auto, com auto como valor padrão; a opção -ngl define o número de camadas colocadas na GPU.
#Cache KV: a parte da memória que é esquecida
O cache KV armazena, para cada token do contexto, vetores de cada camada. Seu tamanho é duas vezes o número de camadas, vezes o número de cabeças KV, vezes sua dimensão, vezes o contexto, vezes os bytes por valor. Exemplo puramente aritmético, com uma arquitetura típica de 32 camadas, 8 cabeças KV de dimensão 128 e um contexto de 32 000 tokens em f16: 2 × 32 × 8 × 128 × 32 000 × 2 bytes, ou seja, aproximadamente 4,2 GB, além dos pesos. Em q8_0, esse cache cai para aproximadamente a metade; em q4_0, para aproximadamente um quarto, com uma leve perda de precisão.
Ollama quantiza o cache com a variável OLLAMA_KV_CACHE_TYPE (f16 por padrão); o llama.cpp faz isso com a opção -ctk para as chaves e -ctv para os valores. Em um Mac de 32 GB que aloca 24 GB para a GPU, alguns gigabytes economizados no cache fazem a diferença entre um contexto que não cabe e um contexto confortável. Ollama também escolhe o contexto padrão de acordo com a memória: 4.000 tokens abaixo de 24 GiB.
#Ollama, LM Studio, llama.cpp ou MLX
| Motor | Ponto forte | Quando priorizar |
|---|---|---|
| Ollama | Instalação simples e API local simples | Uso diário, integração com outras ferramentas |
| LM Studio | Interface gráfica, modelos MLX e GGUF | Explorar modelos sem terminal |
| llama.cpp | Opções de ajuste detalhadas, funcionalidades mais recentes | Você quer ajustar as camadas na GPU, o cache KV e o servidor |
| MLX / mlx-lm | Framework Apple, fine-tuning, memória compartilhada | Formatos Apple, treinamento leve, scripts Python |
O repositório mlx-lm apresenta o pacote como uma ferramenta de geração de texto e fine-tuning de modelos em Apple Silicon, com suporte a modelos quantizados. Para comparar as velocidades entre MLX e llama.cpp, o guia dedicado é a referência; esta página se limita aos ajustes comuns.
#Bateria e modo de economia de energia
Em um MacBook, a geração contínua mantém a GPU em uso o tempo todo: a autonomia fica bem abaixo daquela anunciada pela Apple para navegação na web. Esta página não informa uma duração precisa, por falta de fonte; ela depende do modelo e da carga. O modo de economia de energia do macOS reduz o desempenho: reserve-o para deslocamentos em que a autonomia seja mais importante que a velocidade e conecte o computador à tomada em qualquer sessão longa.
- MLX contra llama.cpp: comparação de velocidades
- MacBook Pro M4 Pro e Max
- Mac Studio: até 512 GB
- Compilar llama.cpp com Metal
- Quantizar o cache KV
- Calculadora de VRAM do site
- Fonte: repositório mlx-lm (limite de memória não paginável)
- Fonte: documentação MLX, set_wired_limit
- Fonte: FAQ do Ollama, Flash Attention e cache KV
- Fonte: repositório llama.cpp
#Perguntas frequentes
Quanta VRAM tem um Mac com Apple Silicon?+
Como aumentar a memória da GPU de um Mac com sysctl?+
O ajuste iogpu.wired_limit_mb sobrevive ao reinício?+
É melhor usar MLX ou llama.cpp no Mac?+
Um Mac pode substituir uma placa gráfica NVIDIA para LLMs?+
Por que meu modelo é lento mesmo cabendo na memória?+
Um comentário, um erro ou uma observação? Avise-nos; isso ajuda a melhorar o guia para todos.