Instructions to use mangaba-ai/Mangaba-Nano-1M with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use mangaba-ai/Mangaba-Nano-1M with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="mangaba-ai/Mangaba-Nano-1M")# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("mangaba-ai/Mangaba-Nano-1M") model = AutoModelForCausalLM.from_pretrained("mangaba-ai/Mangaba-Nano-1M", device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use mangaba-ai/Mangaba-Nano-1M with llama.cpp:
Install (macOS, Linux)
curl -LsSf https://llama.app/install.sh | sh # Start a local OpenAI-compatible server with a web UI: llama serve -hf mangaba-ai/Mangaba-Nano-1M:F16 # Run inference directly in the terminal: llama cli -hf mangaba-ai/Mangaba-Nano-1M:F16
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf mangaba-ai/Mangaba-Nano-1M:F16 # Run inference directly in the terminal: llama cli -hf mangaba-ai/Mangaba-Nano-1M:F16
Build from source code
git clone https://github.com/ggml-org/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-app # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama serve -hf mangaba-ai/Mangaba-Nano-1M:F16 # Run inference directly in the terminal: ./build/bin/llama cli -hf mangaba-ai/Mangaba-Nano-1M:F16
Use Docker
docker model run hf.co/mangaba-ai/Mangaba-Nano-1M:F16
- Llama new
- LM Studio
- Jan
- vLLM
How to use mangaba-ai/Mangaba-Nano-1M with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "mangaba-ai/Mangaba-Nano-1M" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "mangaba-ai/Mangaba-Nano-1M", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker
docker model run hf.co/mangaba-ai/Mangaba-Nano-1M:F16
- SGLang
How to use mangaba-ai/Mangaba-Nano-1M with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "mangaba-ai/Mangaba-Nano-1M" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "mangaba-ai/Mangaba-Nano-1M", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "mangaba-ai/Mangaba-Nano-1M" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "mangaba-ai/Mangaba-Nano-1M", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }' - Ollama
How to use mangaba-ai/Mangaba-Nano-1M with Ollama:
ollama run hf.co/mangaba-ai/Mangaba-Nano-1M:F16
- Unsloth Desktop
- Docker Model Runner
How to use mangaba-ai/Mangaba-Nano-1M with Docker Model Runner:
docker model run hf.co/mangaba-ai/Mangaba-Nano-1M:F16
- Lemonade
How to use mangaba-ai/Mangaba-Nano-1M with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull mangaba-ai/Mangaba-Nano-1M:F16
Run and chat with the model
lemonade run user.Mangaba-Nano-1M-F16
List all available models
lemonade list
- Atomic Chat
Mangaba-Nano-1M
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% |
| 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.
v2 (18/10/2026): 7,5× mais dados e destilação a partir do Mangaba-Base-91M, professor também treinado do zero. O resultado é misto: melhora fora do domínio (Wikipédia −1,5%, CALAME +0,7 ponto, dentro da margem de erro) e piora 1,1% na validação do domínio. Por isso o
maincontinua sendo a v1, e a v2 fica no branchv2-destilado. O controle da v2, sem destilação e com 33,8B tokens, instabilizou no meio do treino (Muon sem weight decay em treino longo) e ficou abaixo da v1; ele aparece aqui como registro, não como comparação justa.
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.compilecom 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:
- Polygl0t/gigaverbo-v2, subconjunto
edu_high(texto da web com nota educacional alta), shards 0–2. - Polygl0t/gigaverbo-v2-synth (texto sintético didático, Apache-2.0), shards 0–2.
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.
- Downloads last month
- 141
Datasets used to train mangaba-ai/Mangaba-Nano-1M
Polygl0t/gigaverbo-v2-synth
Evaluation results
- bits_per_byte on GigaVerbo-v2 (validação separada, edu_high + synth)self-reported1.282
- perplexity on GigaVerbo-v2 (validação separada, edu_high + synth)self-reported22.570
