Etapa 0: entorno, configuración validada, modelo y entrenador
Base del proyecto ENLACE: un modelo de lenguaje propio entrenado desde cero, en español, para asistencia general y familiar. El plan completo está en docs/PLAN.md. Esta etapa establece el andamiaje y lo verifica de punta a punta: - Configuración por capas (hardware × model × train × data) validada con pydantic. Ningún hiperparámetro vive en el código y una config inválida falla al arrancar, no a las tres horas de entrenamiento. - Perfiles de hardware que aíslan el salto de GPU: la RTX 2060 (Turing) no soporta bfloat16 ni FlashAttention-2, así que entrena en float16 con GradScaler y backend mem_efficient; el perfil de la 5090 ya está escrito. backends.py valida el perfil contra la GPU real antes de empezar. - Transformer decoder-only estilo Llama: RMSNorm, SwiGLU, RoPE, GQA, embeddings atados, QK-norm y z-loss. Los dos últimos son lo que mantiene estable el entrenamiento en float16. - Entrenador con schedule WSD, acumulación de gradiente, precisión mixta, checkpointing atómico y reanudación exacta. - Cargadores de datos con estado serializable: bytes para el smoke test y shards uint16 para el corpus real. 48 tests, entre ellos el crítico: reanudar desde un checkpoint reproduce los pesos de una corrida ininterrumpida, parámetro por parámetro. Verificado en CPU: 300 pasos sobre texto en español, loss 3.07 -> 1.63. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Executable
+33
@@ -0,0 +1,33 @@
|
||||
#!/usr/bin/env bash
|
||||
# Descarga un texto en español de dominio público para el smoke test (Etapa 0).
|
||||
#
|
||||
# No es corpus de entrenamiento: son unos pocos MB para verificar en minutos que
|
||||
# CUDA, el entrenador, el checkpointing y la reanudación funcionan antes de
|
||||
# comprometer días de cómputo.
|
||||
set -euo pipefail
|
||||
|
||||
DESTINO="${1:-data/smoke/texto.txt}"
|
||||
mkdir -p "$(dirname "$DESTINO")"
|
||||
|
||||
if [[ -s "$DESTINO" ]]; then
|
||||
echo "[enlace] ya existe $DESTINO ($(wc -c <"$DESTINO") bytes); no se baja de nuevo."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Don Quijote — dominio público, español, y suficientemente largo.
|
||||
URLS=(
|
||||
"https://www.gutenberg.org/cache/epub/2000/pg2000.txt"
|
||||
"https://www.gutenberg.org/files/2000/2000-0.txt"
|
||||
)
|
||||
|
||||
for url in "${URLS[@]}"; do
|
||||
echo "[enlace] bajando $url"
|
||||
if curl -fsSL --max-time 120 "$url" -o "$DESTINO"; then
|
||||
echo "[enlace] listo: $DESTINO ($(wc -c <"$DESTINO") bytes)"
|
||||
exit 0
|
||||
fi
|
||||
done
|
||||
|
||||
echo "[enlace] no se pudo descargar el texto. Alternativa: copiar cualquier" >&2
|
||||
echo " archivo .txt en español a $DESTINO (unos pocos MB alcanzan)." >&2
|
||||
exit 1
|
||||
Reference in New Issue
Block a user