Benchmarks

Table with columns: Modelo, Parâmetros, Dados de treino, BPB GigaVerbo ↓, BPB Wikipédia PT ↓, CALAME-PT ↑, Story Cloze PT ↑| 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% |
| Mangaba-Nano-1M v2 (destilado) | 1,41M | PT-BR, 4,9B tokens + destilação do Base-91M | 1,296 | 1,569 | 17,8% | 55,4% |
| Mangaba-Nano-1M v2 (controle, sem destilação) | 1,41M | PT-BR, 33,8B tokens (instabilizou no meio) | 1,370 | 1,674 | 11,8% | 58,0% |
| 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% |
| Mangaba-Base-91M (professor) | 91,25M | PT-BR, 2,5B tokens (do zero) | 0,886 | 1,091 | 45,7% | 57,8% |
| 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).
Table | |
|---|
| 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 |
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_idsout = 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.