SLM-GPT (~144M)

Small Language Model decoder-only estilo GPT, treinado do zero. Arquitetura moderna com RoPE, atenção causal multi-head, MLP SwiGLU, RMSNorm (pré-normalização) e weight tying entre embedding e cabeça de saída. Otimizado com Muon (matrizes internas) + AdamW (embedding/norms).

  • Parâmetros: 143.7M total · 111.5M sem embedding
  • Tokenizador: BPE do GPT-2 (tiktoken, encoding gpt2)
  • Contexto: 1024 tokens
  • Idioma: inglês (treinado em FineWeb)

Arquitetura

Parâmetro Valor
n_layer 16
n_head 10
n_embd 640
head_dim 64
vocab_size 50304
block_size 1024
rope_theta 10000
bias False
dropout 0.0
  • Positional encoding: RoPE (Rotary Position Embeddings)
  • Atenção: Causal Multi-Head Self-Attention
  • Ativação (MLP): SwiGLU
  • Normalização: RMSNorm (pré-norm)

Detalhes de treino

Item Valor
Dataset FineWeb (~100B tokens de amostra)
Otimizador Muon (lr 1e-3, momentum 0.95, match_rms_adamw) + AdamW
LR de pico (AdamW) 9e-4 · warmup 2500 · cosine até 50k
Weight decay 0.1 (AdamW) · 0.0 (Muon)
Grad clip 1.0
Batch efetivo 12 × 42 grad-accum × 1024 ≈ 500k tok/passo
Precisão bfloat16
Iteração (checkpoint) 46.400
Melhor val loss 2.909

Curvas de treino em loss_curve.png / lr_schedule.png; métricas brutas em metrics.csv.

Conteúdo do checkpoint (ckpt.pt)

torch.load(..., weights_only=False) retorna um dict com:

Chave Descrição
model state dict dos pesos
optimizer estado do(s) otimizador(es) — para retomar o treino
model_config dict com a config da arquitetura (GPTConfig)
train_config dict com a config de treino (TrainConfig)
iter_num iteração em que foi salvo (46.400)
best_val_loss melhor val loss até então (2.909)
loaders posição dos data loaders (shard/offset) para resume

Como usar

O código do modelo (model/, data/tokenizer.py) está no repositório do projeto. Com ele no path:

import torch
from model import GPT, GPTConfig

# 1. carregar checkpoint
ckpt = torch.load("ckpt.pt", map_location="cpu", weights_only=False)

# 2. reconstruir o modelo a partir da config salva
config = GPTConfig(**ckpt["model_config"])
model = GPT(config)
model.load_state_dict(ckpt["model"])
model.eval()

# 3. gerar texto (o GPT já embute o tokenizer GPT-2)
prompt = "The history of artificial intelligence"
idx = torch.tensor([model.tokenizer.encode(prompt)], dtype=torch.long)
out = model.generate(idx, max_new_tokens=100, temperature=0.8, top_k=200)
print(model.tokenizer.decode(out[0].tolist()))

Retomar o treino

O optimizer e loaders no checkpoint permitem continuar exatamente de onde parou (ver training/checkpoint.py e training/train.py --resume).

Limitações

Modelo pequeno de pré-treino, sem fine-tuning de instrução nem alinhamento. Gera texto em inglês no estilo do FineWeb e pode produzir conteúdo incorreto, repetitivo ou enviesado. Uso educacional / de pesquisa.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support