---
title: "Dá para treinar um modelo de decisão num Mac mini de 16 GB? O que medi com a Unsloth"
description: "Dá: a Unsloth 2026.10.10 treina modelos de decisão no Mac pelo MLX, e um Qwen3.5 de 0,8 bilhão treinou em 34 minutos com pico de 4,1 GB no meu Mac mini M4 de 16 GB, em outubro de 2026. O que ele aprendeu depende dos exemplos, não da máquina."
author: "João Thaira"
author_url: "https://joaothaira.com"
url: "https://joaothaira.com/writing/da-para-treinar-um-modelo-de-decisao-num-mac-mini-de-16-gb"
published: "2026-10-28T00:00:00.000Z"
updated: "2026-10-29T14:06:30.761Z"
language: "pt-BR"
tags: ["modelo de decisão","fine-tuning","Unsloth","MLX","Mac mini","LLM local"]
---

# Dá para treinar um modelo de decisão num Mac mini de 16 GB? O que medi com a Unsloth

> Dá: a Unsloth 2026.10.10 treina modelos de decisão no Mac pelo MLX, e um Qwen3.5 de 0,8 bilhão treinou em 34 minutos com pico de 4,1 GB no meu Mac mini M4 de 16 GB, em outubro de 2026. O que ele aprendeu depende dos exemplos, não da máquina.

**TL;DR:** Dá. A Unsloth 2026.10.10 treina modelos de decisão em Apple Silicon pelo **MLX,** e um Qwen3.5 de 0,8 bilhão de parâmetros treinou em **34 minutos com pico de 4,1 GB** no meu Mac mini M4 de 16 GB (medi em 28 de outubro de 2026). O que ele aprende depende dos exemplos: com 13 casos do que eu queria detectar, **não aprendeu nada,** e com 73 passou a **pôr as respostas erradas acima de quase todas as certas,** o que já serve para escolher o que uma pessoa precisa ler.

Eu leio a Unsloth para entender o que dá para treinar fora de um data center. Quando ela publicou o guia de modelos de decisão, eu tinha um problema que parecia feito para isso: saber, numa resposta de IA, se ela fala da Thaira do jeito certo. Então treinei um no mesmo Mac mini de 16 GB onde roda o agente que escreve os rascunhos da ThairaHub, com as respostas reais que esse agente guarda.

## O que é um modelo de decisão?

É um modelo de linguagem ajustado para escolher entre opções que você dá, em vez de escrever. Ele lê uma entrada, dá uma nota para cada opção e devolve a escolha com uma probabilidade.

> "It never writes text, so it doesn't spend memory on the LLM's word predictions."
> — Unsloth, guia "Train your own Decision Model with Unsloth"

Em português: ele nunca escreve texto, então não gasta memória com a previsão de palavras do modelo. Cada pergunta é de um de três tipos: `choice` (uma opção de uma lista), `noul` (sim ou não) e `score` (um nível numa escala). O guia também diz que a Unsloth **mede a precisão antes e depois do treino e calibra a confiança** do modelo, que é o que deixa usar a probabilidade como número de verdade, e não como enfeite.

## Por que eu precisava de um?

A Thaira pergunta a quatro IAs (ChatGPT, Perplexity, Copilot e o Modo IA do Google) as perguntas que importam para cada conta, e guarda a resposta. Para dizer se a conta foi citada, o código procura o nome dela no texto e o site dela nas fontes. Comparei isso, resposta por resposta, com uma leitura cuidadosa: **acertou presente ou ausente em 348 de 348.** Para isso, não preciso de modelo nenhum.

O que a busca por nome não vê é o que a resposta diz. Das 151 respostas que ela contou como citação, **25 descrevem a conta errado,** e todas são da ThairaHub: 25 de 73. Elas repetem o posicionamento que a ThairaHub tinha até setembro de 2026, antes de virar uma empresa de um produto só. Esta é do Copilot, de 26 de outubro de 2026, para "O que é a Thaira (thaira.ai)?":

> "Thaira é uma plataforma de atendimento e automação via WhatsApp que usa inteligência artificial para responder clientes, criar fluxos e ajudar empresas a vender 24/7."
> — Microsoft Copilot, resposta registrada pela Thaira em 26/10/2026

A Thaira é uma plataforma de GEO. O assistente de WhatsApp é o Hive, um projeto irmão que não está à venda. Contar isso como "citado" é verdade e é inútil: **uma citação que descreve outro produto não ajuda ninguém a contratar o certo.** É essa a decisão que eu queria do modelo: a resposta afirma algo errado sobre a conta, sim ou não?

## Roda no Mac?

Roda, e não pelo caminho que eu esperava. A página do guia não fala de Apple Silicon, e eu contava ter que alugar uma GPU. Mas a Unsloth 2026.10.10 traz um caminho MLX para modelos de decisão: com o pacote `mlx` instalado, o mesmo `FastDecisionModel` e o mesmo `DecisionTrainer` do guia rodam na GPU do Mac. Sem o `mlx,` ela cai no caminho do PyTorch. Um detalhe que custa tempo: com Python 3.15 os pacotes não instalam, e **com 3.12 foi direto.**

| Modelo | Treino (3 épocas, 279 respostas) | Pico de memória do treino | Uma decisão (mediana) |
| --- | --- | --- | --- |
| Qwen3.5 0,8B | 34 min | 4,1 GB | 0,68 s |
| Qwen3.5 2B | 62 min | 7,2 GB | 1,41 s |
| Qwen3.5 9B no Ollama, sem treino (comparação) | — | — | 6,0 s |

Como medi: Mac mini M4 de 16 GB, macOS 15.5, Unsloth e unsloth-zoo 2026.10.10, MLX 0.32.4, Python 3.12, em 28 de outubro de 2026. LoRA de rank 16, taxa de aprendizado 2e-4, lote 2 com acumulação 4, contexto de 2.048 tokens, modelos base `Qwen/Qwen3.5-0.8B` e `Qwen/Qwen3.5-2B` do Hugging Face, sem quantizar. O pico é o que o MLX informa; o tempo de uma decisão é a mediana sobre 76 respostas, cada uma com três perguntas. O 9B é o mesmo Qwen3.5 de 9 bilhões que o agente já usa, quantizado em 4 bits no Ollama 0.40.12, com contexto de 8 mil tokens e temperatura 0, respondendo as mesmas três perguntas em JSON.

O 0,8B leva **menos de 1 segundo por decisão, contra 6 do 9B.** Para o volume de hoje isso não muda nada; para checar centenas de respostas por dia, muda.

## Como montei os dados?

Usei as 355 respostas que o agente guardou entre 19 e 27 de outubro de 2026: 10 perguntas, quatro IAs, duas contas (a ThairaHub e a minha). Para cada uma, três perguntas ao modelo:

- **menção** (choice): a resposta é sobre a conta, recomenda, cita de passagem, confunde com outra coisa ou não fala dela;
- **erro** (noul): afirma algo errado sobre a conta;
- **tom** (score): negativo, neutro ou positivo.

Quem rotulou foi o Claude Sonnet, e eu revisei os casos em que ele discordava da busca por nome. **Nos 12 casos, o erro era do rótulo:** as 9 respostas que ele chamou de "confundida" falavam da própria ThairaHub, só que com o posicionamento antigo, e as outras 3 tinham o site só na lista de fontes. Achei mais um: uma resposta marcada como errada só porque os fatos que eu dei ao rotulador estavam incompletos. **Fato incompleto vira erro falso,** e isso vale para o modelo também.

Separei para teste duas perguntas inteiras, "O que a ThairaHub faz?" e "Quanto custa um serviço de GEO no Brasil?": 76 respostas, 12 delas com erro. A mesma IA repete quase a mesma resposta em dias seguidos, então **sortear respostas soltas para o teste vazaria a prova.** Separando por pergunta, o modelo é testado em algo que nunca viu.

## O que o modelo aprendeu, e o que não?

|  | Menção | Erro (dos 12 errados, quantos achou) | Tom |
| --- | --- | --- | --- |
| 0,8B antes do treino | 44,7% | 84,2% (0) | 40,0% |
| 0,8B treinado, sem os fatos da conta | 100% | 84,2% (0) | 68,6% |
| 0,8B treinado, com os fatos | 98,7% | 84,2% (0) | 60,0% |
| 2B treinado, com os fatos | 98,7% | 88,2% (3) | 71,4% |
| 0,8B treinado, com os fatos e exemplos a mais | 98,7% | 84,2% (0) | 62,9% |
| 9B sem treino, com os fatos | 96,1% | 94,7% (8) | 68,6% |

A menção ele aprendeu em uma rodada. Mas não serve para muita coisa, porque a busca por nome já acerta presente ou ausente.

O erro, que era o que eu queria, ele não aprendeu. 84,2% parece bom e é exatamente o que dá **responder "não" para tudo:** 64 das 76 respostas de teste estão certas. Na primeira tentativa a culpa era minha: o modelo não recebia os fatos da conta, e sem saber o que é certo não há como dizer o que é errado. Coloquei os fatos no começo de cada entrada e não mudou nada. Sobrou o motivo de verdade: **13 exemplos de resposta errada em 279,** quase todos de uma pergunta só. O 2B, com os mesmos dados, achou 3 dos 12 sem acusar nenhuma resposta certa: **o tamanho ajuda um pouco, e não resolve.** O próprio guia diz para adicionar muitos exemplos que cubram o seu caso.

## E com mais exemplos de erro?

Para 60 respostas certas do conjunto de treino, pedi ao Claude duas versões no mesmo estilo: uma com um ou dois erros sobre a conta (o Hive vendido como produto, SEO no lugar de GEO, a profissão errada) e uma paráfrase fiel. A paráfrase existe para que "foi reescrita pelo Claude" não vire o sinal. Os exemplos de erro foram de 13 para 73, e o teste continuou sendo só de respostas reais, de perguntas que ficaram de fora.

No limiar padrão de 50%, o 0,8B treinado com eles ainda não acusou nenhuma. Mas a ordem mudou. Medi a AUC, a chance de uma resposta errada receber nota maior que uma certa: **de 0,42 para 0,83.** As 12 erradas ficaram entre 12% e 19% de probabilidade de erro, e a metade das certas, abaixo de 2%. Com o limiar em 10%, ele marca 34 das 76 respostas e **não deixa passar nenhuma das 12 erradas.** Escolhi esse limiar olhando o próprio teste, então o número é otimista; ele mostra o que dá para fazer, não o que eu já posso prometer.

Uma coisa a investigar antes de usar: o 2B da tabela achou seus 3 erros medido na memória, logo depois do treino. Recarregado do disco, deu probabilidades mais baixas e não acusou nenhum no limiar de 50%. **A calibração não voltou igual,** e um modelo que muda ao ser salvo não vai para produção.

O 9B, sem treino nenhum, achou 8 dos 12 erros e não acusou nenhuma resposta certa. Deixa passar um terço, mas é o melhor que eu tenho hoje, a 6 segundos por resposta.

## O que travou o Mac?

Rodar um modelo e treinar outro ao mesmo tempo. O Ollama mantém o modelo na memória por 5 minutos depois do último pedido, e o treino começou com o 9B ainda carregado. Este Mac mini não tem swap ligado, então **a falta de memória trava a máquina** em vez de deixá-la lenta. Depois disso, o script descarrega o Ollama antes de treinar e mata o treino se a memória livre cair abaixo de 8%.

Teve um segundo susto, mais sutil. O MLX guarda os buffers que libera para reaproveitar, e cada tamanho de entrada novo pede buffers novos. Sem limite, esse cache levou a memória livre a 14% enquanto o pico informado continuava perto de 4 GB. Com o cache limitado a 1 GB, **a memória livre não passou de 27% para baixo** no treino do 0,8B. O 2B, com pico de 7,2 GB, deixou só 11% livre. Num Mac de 16 GB, eu não passaria de 2 bilhões para treinar assim.

## Como isso entra na Thaira?

Este é o plano, na ordem em que eu vou fazer:

1. **A busca por nome continua decidindo se a conta foi citada.** Acertou 348 de 348; um modelo ali só acrescenta custo.
2. **Cada resposta citada ganha uma segunda pergunta: ela descreve a conta certo?** Os fatos vêm do perfil que a conta já tem na Thaira, a frase de quem é e as ofertas. Uma resposta que repete um posicionamento velho vira uma tarefa: o que corrigir, e onde.
3. **Hoje, quem responde é o 9B que o agente já usa.** Achou 8 de 12 sem treino, e 6 segundos por resposta cabem com folga no volume atual.
4. **O modelo pequeno entra como filtro, não como juiz.** Num limiar baixo, ele escolhe o que uma pessoa precisa ler; quem decide se a resposta está errada é a pessoa, ou o 9B.
5. **Cada correção vira exemplo.** Quando uma resposta marcada é confirmada ou desmentida no painel, ela entra no conjunto de treino. O modelo pequeno volta a ser treinado quando houver exemplos de erro de várias perguntas e de várias contas, não de uma só, e só substitui o 9B se acertar pelo menos o mesmo nas perguntas que ficaram de fora.
6. **A confiança decide quem olha.** Uma decisão com probabilidade baixa vai para uma pessoa, não para o relatório.
7. **Uma coisa por vez na memória.** No Mac de 16 GB, o modelo que checa e um treino não rodam juntos.

### Preciso de GPU da NVIDIA para treinar um modelo de decisão?

Não, para modelos pequenos. A Unsloth 2026.10.10 treina no Mac pelo MLX, e o Qwen3.5 de 0,8 bilhão usou 4,1 GB no pico, nas minhas medições de 28 de outubro de 2026.

### Quantos exemplos o modelo precisa?

Do que você quer detectar, mais do que 13. Com 13 respostas erradas em 279, o modelo aprendeu a dizer "não" para tudo. Com 73, ele ainda não acertou no limiar padrão, mas passou a pôr as erradas no topo da lista.

**Sources:**

- Unsloth, "Train your own Decision Model with Unsloth": https://unsloth.ai/docs/basics/train-your-own-decision-model-with-unsloth
- Qwen3.5 0,8B e 2B no Hugging Face: https://huggingface.co/Qwen/Qwen3.5-0.8B e https://huggingface.co/Qwen/Qwen3.5-2B
- Minhas medições: Mac mini M4 de 16 GB, macOS 15.5, Unsloth 2026.10.10, MLX 0.32.4, 28 de outubro de 2026.
- Respostas das IAs: as checagens da Thaira, de 19 a 27 de outubro de 2026.

---

By [João Thaira](https://joaothaira.com). Canonical: https://joaothaira.com/writing/da-para-treinar-um-modelo-de-decisao-num-mac-mini-de-16-gb
