Anclar las rutas de .gitignore al raíz del repo

Un patrón sin "/" inicial en .gitignore matchea cualquier directorio con ese
nombre en cualquier nivel. "data/" y "runs/" estaban excluyendo, además de lo
que se quería:

  enlace/data/     los cargadores de datos (ByteStream, ShardStream)
  configs/data/    corpus.yaml, smoke.yaml, distill.yaml
  configs/runs/    todos los configs ejecutables

Es decir que el repo commiteado no contenía ni la capa de datos ni un solo
config con el que arrancar un entrenamiento. Como scripts/remote.sh sincroniza
por git push/pull, el servidor habría recibido un paquete que falla al
importar, y el síntoma habría aparecido recién allá.

Se anclan las cuatro rutas con "/" inicial y se documenta el porqué en el
propio archivo.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-27 23:27:40 -03:00
parent 8805b0541b
commit d0a05cdd97
10 changed files with 882 additions and 4 deletions
+5
View File
@@ -0,0 +1,5 @@
# Corpus tokenizado en shards uint16 (Etapa 1 del plan).
# Los shards viven en el servidor; nunca se descargan enteros.
source: shards
shards_dir: data/shards
val_fraction: 0.005
+36
View File
@@ -0,0 +1,36 @@
# Generación de datos sintéticos con la Batch API (Etapa 3 del plan).
#
# Se usa la Batch API y no llamadas sueltas porque cuesta la mitad y generar un
# dataset no es sensible a la latencia. A cambio el trabajo es asincrónico y
# puede tardar horas: el estado vive en disco y es reanudable.
#
# Esto NO hace falta para entrenar ni para correr ENLACE. Solo se usa al armar
# el dataset SFT, y solo para la parte difícil: identidad y casos límite. El
# grueso sale de plantillas (cero modelo) y de un 7-8B local en la 2060.
model: claude-opus-5
# En este modelo el pensamiento está activo por defecto y max_tokens acota
# pensamiento + respuesta juntos: sin holgura la salida se corta a la mitad.
# 8000 alcanza de sobra para ejemplos de SFT, que son cortos.
max_tokens: 8000
# Generar parafraseos y ejemplos etiquetados no es trabajo intensivo en
# razonamiento. `low` baja el costo bastante sin perder calidad acá; subilo a
# `medium` para el set de identidad, que sí exige coherencia fina.
effort: low
# Tope de la API: 100.000 pedidos o 256 MB por lote. Se parte bien por debajo
# para no depender de que una request HTTP enorme llegue entera.
requests_per_batch: 10000
poll_interval_seconds: 60
max_wait_hours: 26 # la API promete < 24 h; el resto es red de seguridad
output_dir: data/distill
# Solo para el reporte de costo estimado. Los precios reales los factura
# Anthropic; esto sirve para saber en qué orden de magnitud estamos.
usd_per_mtok_input: 5.0
usd_per_mtok_output: 25.0
batch_discount: 0.5
+5
View File
@@ -0,0 +1,5 @@
# Texto plano en español para el smoke test a nivel de caracteres.
# El vocabulario se deriva del propio texto al cargarlo.
source: chars
text_path: data/smoke/texto.txt
val_fraction: 0.05
+7
View File
@@ -0,0 +1,7 @@
# Pretraining real del modelo base en la RTX 2060 (Etapa 2 del plan).
# ~1-2 días de cómputo. Correr siempre bajo tmux: ver scripts/remote.sh.
include:
hardware: hardware/turing-2060.yaml
model: model/tiny-50m.yaml
train: train/pretrain.yaml
data: data/corpus.yaml
+13
View File
@@ -0,0 +1,13 @@
# Smoke test de la Etapa 0 en el servidor con la RTX 2060.
# Criterio: loss < 1.5 y texto legible en menos de 15 minutos.
include:
hardware: hardware/turing-2060.yaml
model: model/char-smoke.yaml
train: train/smoke.yaml
data: data/smoke.yaml
# El modelo char es diminuto: en la 2060 entra un micro-lote grande sin
# acumulación. Sobrescribe el perfil de la placa solo en lo que corresponde.
hardware:
micro_batch_size: 64
grad_accum_steps: 1
+21
View File
@@ -0,0 +1,21 @@
# Smoke test en CPU — para verificar el código en la máquina de trabajo,
# que no tiene GPU. No entrena nada útil: comprueba que el stack funciona.
include:
hardware: hardware/cpu.yaml
model: model/char-smoke.yaml
train: train/smoke.yaml
data: data/smoke.yaml
train:
run_name: smoke-cpu
max_steps: 300
schedule:
kind: wsd
warmup_steps: 30
decay_steps: 60
min_lr_ratio: 0.0
log_every: 20
eval_every: 100
eval_batches: 5
checkpoint_every: 150
sample_every: 150