Resultados
Mesma suíte do Mangaba-Nano (bench.py), rodada em CPU com float32.
Table with columns: Modelo, Parâmetros, Tokens de treino, BPB GigaVerbo ↓, BPB Wikipédia PT ↓, CALAME-PT ↑, Story Cloze PT ↑| Modelo | Parâmetros | Tokens de treino | BPB GigaVerbo ↓ | BPB Wikipédia PT ↓ | CALAME-PT ↑ | Story Cloze PT ↑ |
|---|
| Mangaba-Base-91M | 91M | 2,5B | 0,886 | 1,091 | 45,7% | 57,8% |
| Tucano-160m | 162M | — | 0,929 | 0,955 | 45,6% | 61,7% |
| Mangaba-Nano-1M | 1,41M | 2,85B | 1,282 | 1,593 | 17,1% | 56,2% |
- BPB (bits por byte) independe do tokenizer. GigaVerbo é a validação separada do corpus de treino; Wikipédia PT são 400 artigos fora desse domínio.
- O Mangaba-Base-91M supera o Tucano-160m (1,8× maior) no domínio de treino e empata no CALAME-PT. Na Wikipédia e no Story Cloze fica atrás: viu só 2,5B tokens, e de menos fontes.
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: nenhum peso da Qwen foi usado (por isso o config.json mostra model_type: qwen3).
Table | |
|---|
| Camadas | 14 |
| Dimensão oculta | 768 |
| FFN (SwiGLU) | 2.048 |
| Atenção | 12 cabeças de query, 4 de key/value (GQA), head_dim 64, 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; o mesmo do Mangaba-Nano) |
| Parâmetros | 91.250.176 (3.145.728 de embedding) |
Treino
- Otimizador: Muon (Newton-Schulz, momentum de Nesterov) com LR 0,02 nas matrizes internas, e AdamW com LR 0,006 em embeddings e normas.
- Agenda: Warmup-Stable-Decay com resfriamento 1−√t nos últimos 25%. O número de passos foi ajustado à janela de GPU disponível.
- Lote e duração: 262.144 tokens por passo, 9.621 passos, 2,52 bilhões de tokens.
- Hardware: 4h52 em uma L40S (~145 mil tokens/s), bf16 com
torch.compile.
- Dados: GigaVerbo-v2
edu_high e GigaVerbo-v2-synth, com amostragem proporcional ao tamanho de cada arquivo (~24% sintético). A validação é separada e nunca entrou no treino.
- Código:
train2.py neste repositório.
Uso
from transformers import AutoModelForCausalLM, AutoTokenizertok = AutoTokenizer.from_pretrained("mangaba-ai/Mangaba-Base-91M")model = AutoModelForCausalLM.from_pretrained("mangaba-ai/Mangaba-Base-91M")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))
Também há arquivos GGUF (F16 e Q8_0) para o llama.cpp.
Exemplos (amostragem, temperatura 0,7)
A fotossíntese é o processo pelo qual a planta realiza sua respiração, através da luz que recebe do sol.Esse processo acontece na presença de elementos químicos como enxofre e nitrogênio. Para fazer um bolo de cenoura, você pode usar pedaços pequenos e então cozinhe-os em água quente.Isso ajudará a evitar que eles se tornem grumosos demais para serem ingeridos.
O texto é fluente e mantém o tema, mas os fatos não são confiáveis: o primeiro exemplo erra a química da fotossíntese.
Limitações
- É um modelo base: sem ajuste de instrução nem alinhamento. Não use para responder perguntas factuais.
- Contexto máximo de 512 tokens, com vocabulário pequeno (4.096 tokens, ≈3,5 caracteres por token).
- Herda os vieses do texto da web em português.
Licença
Pesos, tokenizer e código sob Apache-2.0. Os dados seguem as licenças das fontes listadas nos cartões do GigaVerbo-v2.
Feito pela Mangaba AI.