O MacBook Pro M4 tem mais RAM que a 5090 e eu continuo no CUDA
48 GB unificados no M4 cabem mais que 32 GB da 5090. Mesmo assim vLLM, llama.cpp e geração de imagem ficam na NVIDIA, porque decode é banda e a stack que eu já opero é CUDA.
Com pressa? Peça o TL;DR ao Claude — ele lê a página e resume.
A Apple acabou de lançar o Mac Studio com M5 Max (até 128 GB) e M5 Ultra (até 512 GB, 1,2 TB/s de banda). O argumento é direto: memória unificada suficiente para 70B em casa, silêncio, pouca tomada.
Eu tenho um MacBook Pro M4 com 48 GB. É mais memória do que a RTX 5090 de 32 GB que está no PC, e mais do que uma 4090 de 24 GB. Uso o Mac todo dia para trabalhar. Para LLM e para imagem, o que está no ar continua sendo CUDA.
Acontece que caber e ser rápido são duas perguntas. O folheto da Apple responde se o modelo entra. O que eu faço na bancada responde se ele sai a tempo.
O que eu tenho na mesa
De um lado, o notebook: M4, 48 GB de memória unificada, Metal, MLX, llama.cpp no backend da Apple. Do outro, o PC: Ryzen 9 9950X, RTX 5090 32 GB (driver 580), Ollama 0.32 falando com llama.cpp em CUDA, vLLM quando a carga deixa de ser um chat, ComfyUI com FLUX preso na 5090 por UUID.
Os 48 GB unificados são um poço só. CPU e GPU enxergam o mesmo RAM, então não tem a parede de 32 GB da VRAM. Um 27B ou 32B com contexto que na 5090 já aperta entra no Mac sem drama. Um 70B em Q4 até espreme, mas espreme por banda, não porque “não cabe”.
Isso resolve o tamanho. Não é, no fim das contas, a máquina em que eu gero tokens no dia a dia.
Cabe e é rápido são eixos diferentes
Eu já escrevi isso no post da 5060 Ti e da 5070 Ti: capacidade responde se o modelo cabe; banda responde a quantos tokens por segundo ele sai. A geração em lote 1 lê quase todos os pesos a cada token. O teto teórico é banda dividido pelo tamanho dos pesos. Isso não é medição minha. É a conta física, no papel.
| Máquina | Memória | Banda | O que isso decide |
|---|---|---|---|
| MacBook Pro M4 48 GB (o que eu tenho) | 48 GB unificada | ~273 GB/s (M4 Pro) ou ~546 GB/s (M4 Max) | Cabe mais. Sai mais devagar. |
| M5 Max 128 GB | 128 GB unificada | ~614 GB/s | 70B Q4 folgado. Banda ainda ~3× abaixo da 5090. |
| M5 Ultra 96 GB | 96 GB unificada | 1,2 TB/s | Primeiro Apple perto da 5090 em banda. Menos RAM que o Max 128. |
| RTX 4090 | 24 GB VRAM | 1.008 GB/s | Não cabe 70B Q4. Rápida no que cabe. |
| RTX 5090 (no ar aqui) | 32 GB VRAM | 1.792 GB/s | Teto de tok/s no que entra. CUDA. |
No M4 de 48 GB, mesmo no cenário generoso (Max), a banda unificada é uma fração da 5090. No Pro, menor ainda. 48 contra 32 GB ganha no “cabe”. 273 ou 546 contra 1.792 GB/s perde no “sai a tempo”.
Eu não vou colocar tokens por segundo do Mac neste post. Não medi nessa máquina com o mesmo prompt, o mesmo quant e o mesmo contexto da 5090. Sem isso, número de decode no M4 seria chute com cara de prova.
llama.cpp roda nos dois lados
Ollama no Mac funciona. llama.cpp no Metal também. Quando estou longe do PC, é isso que eu abro.
No PC, o mesmo llama.cpp fala CUDA, e a geração continua limitada por banda. Trocar a 5090 pelo M4 nesse caminho não melhora a resposta: melhora o quanto cabe, com uma fração da banda. Em chat você sente. Em agente que chama ferramenta em loop, sente mais.
A regra que eu acabei usando:
- Cabe na VRAM e precisa ser rápido: 5090, CUDA, llama.cpp ou Ollama.
- Não cabe e eu aceito ler mais devagar: Mac, ou segunda GPU, ou API.
- Avião, café, reunião: M4, sem drama.
O Mac ganha o segundo e o terceiro caso. O primeiro é o que paga as contas.
vLLM nem entra no Mac
vLLM é o servidor que eu quero quando a chamada deixa de ser um chat e vira várias requisições ao mesmo tempo: PagedAttention, lote, cache de prefixo. Ele é CUDA, com um pé em ROCm. Não tem porta Metal nem MLX.
Então comparar M5 Ultra com 5090 no vLLM nem começa. O Mac não entra nesse jogo. Se o produto que você está montando serve LLM com concorrência de verdade, a escolha de hardware já foi feita, ou você está pagando API.
MLX no Apple Silicon dá conta de um usuário. Não é o mesmo software. Uma API “compatível com OpenAI” no papel não apaga o agendador, o cache de prefixo e o paralelismo de tensor. Eu não vou reescrever a stack em MLX porque a Apple subiu a banda.
Imagem também não é memória
Geração de imagem aqui é FLUX na 5090, ComfyUI isolado pelo UUID da GPU, no mesmo host do Ollama. Já tive thumbnail saindo por nuvem com a 5090 ociosa. Isso foi arquivo no lugar errado, não falta de Mac.
ComfyUI, ControlNet, os pesos que a comunidade de fato usa: CUDA. MPS no Mac existe, mas existir não é o pipeline que eu já operei e meço. 48 GB unificados cabem um FLUX que 24 GB de 4090 também cabem. A 5090 de 32 GB cabe com mais folga para LoRA. Nenhum desses três casos me faz preferir Metal. O que me faz preferir NVIDIA é o tempo entre o prompt e a imagem no ar, e o fato de o resto da casa já estar nesse trilho.
O que os M5 mudam na conta
M5 Max 128 GB é o primeiro notebook em que 70B Q4 com contexto longo fica confortável, não “entra se você rezar”. O salto que a Apple está vendendo é o preenchimento do prompt, colar um repositório inteiro, pelos Neural Accelerators em cada núcleo da GPU. No decode, o ganho fica na casa de 20 a 30% em cima do M4 Max, acompanhando a banda de ~546 para ~614 GB/s. Continua longe da 5090 no modelo que já cabe nela.
M5 Ultra 96 GB: 1,2 TB/s. Aí a física do decode chega perto. Só que 96 GB, no fim das contas, é menos memória que o Max de 128 GB. Você paga Ultra por banda, não por tanque. 256 e 512 GB são outra faixa de preço.
Nada disso me dá vLLM, nem o ComfyUI que já está no ar. E no modelo que já cabe na 5090, CUDA continua ganhando feio.
O que este post compara
- Notebook
- MacBook Pro M4, 48 GB unificada
- PC
- Ryzen 9 9950X + RTX 5090 32 GB
- LLM no PC
- Ollama 0.32 / llama.cpp CUDA, vLLM
- Imagem
- FLUX + ComfyUI na 5090
- Banda
- spec Apple e NVIDIA, não tok/s do M4
- Macs novos
- M5 Max e M5 Ultra, anúncio de 25/08/2026
Onde o Mac ganha de verdade
Trabalho: tela, bateria, silêncio, IDE, reunião. 48 GB sobra para isso, e esse não é o debate.
Onde o Mac ganha de verdade é no modelo que não entra nos 32 GB. 70B em Q4, contexto absurdo em cima de um 27B, dois modelos ao mesmo tempo. Aí memória unificada deixa de ser folheto e vira um teto que a 5090 não tem.
E no colo: eu não vou carregar a 5090 no avião.
O erro é tratar o Mac como uma GPU com RAM enorme. Ele é um SoC com um poço só de memória, banda menor (fora o Ultra) e outro ecossistema. Serve bem para caber. Serve mal para gerar.
Eu gosto do M4 e vou continuar andando com ele. Os M5 são o melhor argumento que a Apple já teve para IA local. Continuo na 5090, e numa 4090 no mesmo trilho CUDA, no que gera token, lote e imagem.
Na minha mesa o problema que aparece o tempo todo não é caber. É sair a tempo. E isso ainda é CUDA.