Um modelo de linguagem de 1,4 milhão de parâmetros, treinado do zero em português do Brasil pela Mangaba AI.
Relatório técnico completo (dados, arquitetura, Muon, ablações, controles e destilação): https://huggingface.co/spaces/mangaba-ai/mangaba-nano-artigo
Não há modelo base: os pesos começaram aleatórios e o tokenizer também foi treinado do zero sobre o mesmo corpus. O treino rodou nas GPUs NVIDIA L40S da própria Mangaba, em datacenter no Brasil.
É um modelo de pesquisa e de borda: cabe em 5,6 MB, roda em qualquer CPU e serve como base para estudar escalas minúsculas, fazer ajuste fino em tarefas estreitas (classificação, autocompletar, extração simples) ou rodar em microcontroladores e navegadores. Não é um assistente de chat e não sabe fatos: a 1M de parâmetros, ele aprende ortografia, morfologia e sintaxe do português, e só um pouco de semântica.
Benchmarks
| Modelo |
Parâmetros |
Dados de treino |
BPB GigaVerbo ↓ |
BPB Wikipédia PT ↓ |
CALAME-PT ↑ |
Story Cloze PT ↑ |
| Mangaba-Nano-1M |
1,41M |
PT-BR, 2,85B tokens |
1,282 |
1,593 |
17,1% |
56,2% |
| Baseline Qwen3 + AdamW (mesmos dados) |
1,41M |
PT-BR, 2,85B tokens (idênticos) |
1,323 |
1,635 |
16,2% |
55,9% |
| Baseline GPT-2 + AdamW (mesmos dados) |
1,42M |
PT-BR, 2,85B tokens (idênticos) |
1,425 |
1,736 |
11,7% |
56,7% |
| TinyStories-1M |
3,75M |
inglês (TinyStories); ~1M sem embedding |
6,407 |
6,273 |
0,0% |
50,0% |
| Tucano-160m |
162M |
PT-BR (GigaVerbo v1) |
0,929 |
0,955 |
45,6% |
61,7% |
Como ler.
- BPB (bits por byte): perda medida por byte de texto, então independe do tokenizer e compara modelos de vocabulários diferentes. GigaVerbo é a validação separada do corpus de treino; Wikipédia PT são 400 artigos (3.000 caracteres cada) fora desse domínio.
- CALAME-PT (Polygl0t/CALAME-PT, 2.076 textos): o modelo precisa gerar exatamente a última palavra do texto.
- Story Cloze PT (1.511 histórias): escolher o final certo entre dois, pela log-verossimilhança normalizada por byte. O acaso dá 50%. Com 1.511 itens, a margem de erro é de ±2,5 pontos (IC 95%): aqui os três modelos PT de ~1M empatam, e só o Tucano-160m se destaca.
- Baselines: mesmo tamanho (≈1,41M), mesmos 2,85B tokens e mesmo tokenizer, com a receita clássica (AdamW + cosseno, LR escolhido por varredura: 2e-2 no Qwen3; 3e-3 no GPT-2, porque o 1e-2 que venceu a varredura curta divergiu no passo ~2.900 do treino longo). Eles isolam o efeito da receita do Mangaba (Muon + WSD + arquitetura moderna).
- O TinyStories-1M (o modelo público mais próximo em tamanho: 3,75M no total, ~1M fora do embedding) foi treinado em inglês e entra como régua de tamanho, não de idioma. O Tucano-160m é mais de 100× maior e serve de teto de referência.
Todos os números vêm do bench.py deste repositório, rodado em CPU com float32.
Arquitetura
Decoder no desenho padrão atual (o mesmo de Qwen3 e Llama), carregado com Qwen3ForCausalLM do Transformers. A classe é só a implementação desse desenho: os pesos começaram aleatórios e nenhum peso da Qwen foi usado (por isso o config.json mostra model_type: qwen3).
|
|
| Camadas |
6 |
| Dimensão oculta |
128 |
| FFN (SwiGLU) |
256 |
| Atenção |
4 cabeças de query, 2 de key/value (GQA), head_dim 32, QK-norm |
| Posição |
RoPE (θ = 10.000), contexto de 512 tokens |
| Normalização |
RMSNorm pré-camada |
| Embeddings |
amarrados entre entrada e saída |
| Vocabulário |
4.096 tokens, BPE byte-level treinado do zero (≈3,5 caracteres por token em PT-BR) |
| Parâmetros |
1.411.072 (524.288 de embedding, 886.784 nas camadas) |
Receita de treino
Técnicas atuais de pré-treino eficiente, escolhidas por ablação curta antes da rodada final:
- Otimizador Muon (ortogonalização de Newton-Schulz com momentum de Nesterov) nas matrizes ocultas, e AdamW nos embeddings e nas normas. Busca de LR em rodadas de 40M tokens: Muon 0,015, AdamW 0,015.
- Agenda Warmup-Stable-Decay (WSD): 2% de aquecimento, platô, e resfriamento final de 25% com curva 1−√t.
- Precisão mista bf16,
torch.compile com a cross-entropy fundida no grafo, recorte de gradiente em 1,0.
- Lote de 65.536 tokens por passo, 43.487 passos, 2,85 bilhões de tokens (1 época, sem repetição; cerca de 2.000 tokens por parâmetro).
- Tempo: 67 minutos em uma L40S, usando menos de 0,5 GB de VRAM, ao lado do modelo de produção que divide a mesma GPU.
Dados
Só dados públicos em português:
Documentos com menos de 200 caracteres foram descartados e o texto foi normalizado em Unicode NFC. Total tokenizado: 2,9 bilhões de tokens (≈1 bilhão sintéticos e ≈1,9 bilhão edu_high).
Uso
from transformers import AutoModelForCausalLM, AutoTokenizer
tok = AutoTokenizer.from_pretrained("mangaba-ai/Mangaba-Nano-1M")
model = AutoModelForCausalLM.from_pretrained("mangaba-ai/Mangaba-Nano-1M")
ids = tok("A fotossíntese é o processo", return_tensors="pt").input_ids
out = model.generate(ids, max_new_tokens=60, do_sample=True, temperature=0.7,
top_p=0.9, repetition_penalty=1.15)
print(tok.decode(out[0], skip_special_tokens=True))
Com llama.cpp (o GGUF está neste repositório):
llama-cli -m Mangaba-Nano-1M-F32.gguf -p "O Brasil é um país" -n 60 --temp 0.7
Exemplos (amostragem, temperatura 0,7)
O Brasil é um país de gado, entretanto, em que há uma reação dos direitos humanos. Para ele, é preciso considerar a forma como os homens estão se relacionando com o mundo e com os seus filhos. Ainda assim, muitos professores também têm o direito à educação e ao ensino público.
A Constituição Federal de 1988, sendo a primeira vez que o homem de Israel tem sido uma nova fase para a qual se aplica a um sistema de defesa da sociedade, o qual é fundamental para o desenvolvimento e o desenvolvimento da democracia, mas sim do processo de construção da democracia.
A fotossíntese é o processo de transmissão de dados, mas o que está sendo feito para isso é muito difícil, porque pode ser inevitável.
Limitações
- Com 1,4M de parâmetros, o texto é gramatical e com vocabulário correto, mas perde o fio em poucas frases e inventa fatos. Não use para responder perguntas.
- Sem ajuste de instrução nem alinhamento. Os tokens
<|im_start|> e <|im_end|> já estão no vocabulário para um ajuste fino de chat futuro.
- Contexto máximo de 512 tokens.
- Herda os vieses do texto da web em português.
Licença
Pesos e código sob Apache-2.0. Os dados de treino seguem as licenças das fontes listadas nos cartões do GigaVerbo-v2.
Feito pela Mangaba AI.