Mangaba-Base-91M

Um modelo de linguagem de 91 milhões de parâmetros treinado do zero em português do Brasil pela Mangaba AI.

Pesos e tokenizer próprios: o treino começou de pesos aleatórios, sem modelo base de terceiros. Ele foi treinado em uma NVIDIA L40S da Mangaba, em datacenter no Brasil, e serve de professor para a destilação do Mangaba-Nano-1M.

📄 Relatório técnico: https://huggingface.co/spaces/mangaba-ai/mangaba-base-91m-artigo

Resultados

Mesma suíte do Mangaba-Nano (bench.py), rodada em CPU com float32.

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).

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, AutoTokenizer
tok = 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_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))

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.

Downloads last month
-
Safetensors
Model size
91.3M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Datasets used to train mangaba-ai/Mangaba-Base-91M

Evaluation results