Arquitectura
Transformer moderno
- Atención GQA con RoPE
- Feed-forward SwiGLU
- RMSNorm y weight tying
Un transformer de 27,8 millones de parámetros escrito desde cero, con su propio tokenizador, entrenado en CPU con texto en español. Esta página lee sus datos reales.
Arquitectura
Tamaño
Entrenamiento
El modelo
Un modelo pequeño, construido pieza a pieza para entender cómo funciona cada parte, y entrenado con texto en español que Scout reúne con su origen.
Arquitectura
Todo el código está en la carpeta llm/ del proyecto.
Un transformer que predice el siguiente token, como GPT, escrito desde cero en PyTorch.
llm/model.py · KharyLM
Grouped-Query Attention: varias cabezas de consulta comparten claves y valores. Menos memoria en la caché.
n_heads / n_kv_heads
Posiciones rotatorias en las consultas y claves, en lugar de embeddings de posición aprendidos.
RotaryEmbedding
Capa feed-forward con compuerta, tres matrices en vez de dos, como en los modelos modernos.
gate · up · down
Normalización previa a cada bloque, más simple y estable que LayerNorm.
pre-norm
BPE a nivel de bytes, entrenado con texto en español: nunca encuentra un carácter desconocido.
ByteBPETokenizer
Tamaños
Definidas en llm/config.py. El chat usa «base».
parámetros
parámetros
parámetros
Entrenamiento
Pérdida de entrenamiento por paso, leída de checkpoints/training_log.csv. Menor es mejor.
Plan de 1260 pasos.
Checkpoint disponible: best.pt, guardado el 27/10/2026, 1:57:46.
| Paso | Pérdida | Tokens/s |
|---|---|---|
| 1255 | 3,331 | 1077 |
| 1256 | 3,324 | 1077 |
| 1257 | 3,293 | 1077 |
| 1258 | 3,279 | 1077 |
| 1259 | 3,329 | 1077 |
| 1260 | 3,367 | 1077 |
Sus límites
Preferimos decírtelo antes de que lo descubras.
| Respuestas útiles hoy | El entrenamiento completo aún no se ha hecho: sin un checkpoint entrenado, el chat no responde. |
| Seguir instrucciones | Es un modelo base: completa texto. Todavía no tiene ajuste fino con diálogos. |
| Contexto largo | Ve 512 tokens a la vez, unas pocas páginas. Lo anterior se recorta. |
| Navegar por internet | No consulta páginas en vivo ni conoce lo de hoy. |
| Dar consejo médico, legal o financiero | No está pensado para eso. Consulta a un profesional. |
Ficha
| Parámetros | 27.795.968 (27,8 M) |
| Capas | 8 bloques transformer |
| Dimensión | 512 (cabezas: 8 de consulta, 4 de clave/valor) |
| Feed-forward | 1408 (SwiGLU) |
| Contexto | 512 tokens |
| Vocabulario | 8192 tokens (BPE de bytes) |
| Datos preparados | 41.274.712 tokens de entrenamiento + 2.192.886 de validación |
| Hardware | CPU (sin GPU) |
| Estado | Entrenado hasta el paso 1260 |
Ponerlo en marcha
# 1. Preparar datos y tokenizador (data/)
python scripts/prepare_data.py
# 2. Entrenar (guarda checkpoints/latest.pt y best.pt)
python -m llm.train
# 3. Servir el modelo para el chat y la API
python -m llm.serveNo. El chat no guarda tus mensajes en el servidor: el historial vive en tu navegador.
Para poder entrenarlo de principio a fin en un ordenador normal, sin GPU, y entender cada pieza.
Con texto en español: Wikipedia, libros de dominio público y documentos que Scout reúne con su origen y licencia.
Sí, y mucho, sobre todo mientras el entrenamiento no termine. Trátalo como un experimento.