YvyrAI Nano
105,86 millones de parámetros, entrenado desde cero en español.
Ficha de entrenamiento
- Parámetros
- 105,86 M
- Tokens vistos
- 891.135.906
- Documentos
- 4.200.085
- Pureza de español
- 96,3 %
- Contexto
- 1.024 tokens
- Tokens por paso
- 262.144
- Pasos de optimizador
- 3.814
- Duración
- ~18 h
- Precisión
- bf16
- Hardware
- 1 GPU de consumo de 8 GB
- Vueltas de deliberación
- hasta 8
- Vocabulario
- 24.576
Cómo se entrenó
Un currículo en cinco fases que aumenta de a poco las vueltas de deliberación (3, 5, 7 y 8) y va encendiendo los objetivos auxiliares.
Con qué se entrenó
Composición del corpus por fuente
4.200.085 documentos · porcentaje sobre el total
- Web82,50 % · 3.465.087 documentosculturax_es
- Wikipedia8,64 % · 362.810 documentoswikipedia_raw · wikipedia_grounded
- Razonamiento4,34 % · 182.489 documentosreasoning
- Libros1,41 % · 59.176 documentosbooks_literature
- Instrucciones y conversación1,27 % · 53.503 documentosinstruction_qa · instruction_chat
- Otros1,83 % · 77.020 documentoslong_context_es · safety · python_es · yvyrai_identity · scientific_es · yvyrai_style · paraguay_official · news_es
Ver la tabla completa
| Fuente | Grupo | Documentos | % |
|---|---|---|---|
| culturax_es | Web | 3.465.087 | 82,50 |
| wikipedia_raw | Wikipedia | 249.219 | 5,93 |
| wikipedia_grounded | Wikipedia | 113.591 | 2,70 |
| reasoning | Razonamiento | 182.489 | 4,34 |
| books_literature | Libros | 59.176 | 1,41 |
| instruction_qa | Instrucciones y conversación | 35.914 | 0,86 |
| instruction_chat | Instrucciones y conversación | 17.589 | 0,42 |
| long_context_es | Otros | 40.507 | 0,96 |
| safety | Otros | 24.866 | 0,59 |
| python_es | Otros | 7.636 | 0,18 |
| yvyrai_identity | Otros | 1.334 | 0,03 |
| scientific_es | Otros | 1.042 | 0,02 |
| yvyrai_style | Otros | 803 | 0,02 |
| paraguay_official | Otros | 617 | 0,01 |
| news_es | Otros | 215 | 0,01 |
| Total | 4.200.085 | 100,00 |
Resultados
Pensar más vueltas mejora la predicción hasta la séptima.
Ver los datos
| Vueltas | Vueltas fijas | Parada adaptativa | Vueltas usadas (promedio) |
|---|---|---|---|
| 1 | 69,86 | 69,86 | 1,00 |
| 2 | 54,94 | 54,96 | 2,00 |
| 3 | 51,31 | 51,97 | 3,00 |
| 4 | 50,01 | 50,81 | 4,00 |
| 5 | 49,46 | 50,35 | 5,00 |
| 6 | 49,30 | 50,23 | 6,00 |
| 7 · óptimo | 49,28 | 50,25 | 7,00 |
| 8 | 49,28 | 50,25 | 7,38 |
| 9 | 49,28 | 50,25 | 7,39 |
| 10 | 49,28 | 50,25 | 7,40 |
| 11 | 49,28 | 50,25 | 7,41 |
| 12 | 49,28 | 50,25 | 7,41 |
| 13 | 49,28 | 50,25 | 7,41 |
| 14 | 49,28 | 50,25 | 7,41 |
| 15 | 49,28 | 50,25 | 7,41 |
| 16 | 49,28 | 50,25 | 7,41 |
Cada modelo gana en su idioma.
Ver los datos
| Conjunto | YvyrAI Nano | GPT-2 124M |
|---|---|---|
| Español (web, held-out) | 1,3625 | 2,2238 |
| Inglés (Wikipedia) | 2,0078 | 1,0280 |
Cómo funciona la deliberación, qué medimos y qué falta probar.
Ver la investigaciónAntes de usarlo
Inventa datos.
Aprendió la forma del español antes que los hechos. No es una fuente de información.
No está ajustado para conversar.
Es un modelo base: sin la plantilla correcta, continúa el texto en lugar de responder.
No hace cuentas.
No resuelve aritmética de forma confiable.
Casi no conoce Paraguay.
El contenido local fue mínimo en su entrenamiento.
Una sola corrida, sin barras de error.
Uso
La arquitectura es propia, así que no carga con las herramientas estándar de Hugging Face (AutoModelForCausalLM). El código y las instrucciones están en la página del modelo.
# clonar el repo del proyecto y desde su raiz:
from safetensors.torch import load_file
from config import ModelConfig
from model import ReasoningModel
from data import load_tokenizer
import json, torch
cfg = ModelConfig(**json.load(open("config.json"))["model_config"])
modelo = ReasoningModel(cfg)
modelo.load_state_dict(load_file("model_ema.safetensors"))
modelo.cuda().eval()
tok = load_tokenizer("tokenizer.json")
# La plantilla del entrenamiento es OBLIGATORIA. Sin esto, continua texto.
prompt = ("<|sistema|>Eres un asistente que explica paso a paso en español."
"<|usuario|>Hola, como estas?<|respuesta|>")
ids = torch.tensor([[2] + tok.encode(prompt).ids]).cuda() # 2 = <|bos|>
salida = modelo.generate(ids, max_new_tokens=80, temperature=0.6,
delib_min_iters=7, delib_max_iters=7) # 7 = optimo
print(tok.decode(salida[0, ids.shape[1]:].tolist()))Cita
@misc{yvyrai100mnano,
title = {YvyrAI-100m-Nano: LLM en español con profundidad recurrente,
entrenada desde cero en Paraguay},
author = {Juan Manuel Acosta Ramírez},
year = {2026},
url = {https://yvyrai.lat/paper},
note = {Primera LLM paraguaya con arquitectura propia. Entrenada en una
GPU de consumo de 8 GB}
}