Aplicar ruff format a todo el código
Cambio mecánico, sin efecto en el comportamiento: la suite pasa igual antes y después. Va en un commit propio para no tapar los cambios con sentido. Se agregan además dos flujos de verificación que corren en cada carga al repositorio: - YAML: yamllint para sintaxis y estilo, más la carga de cada config contra su esquema de pydantic. Son cosas distintas — un YAML puede ser sintácticamente perfecto y estar roto igual, con 'run_nombre' en vez de 'run_name'. Ese paso no instala torch: se verificó que la capa de configuración no lo importa, así que corre en segundos en vez de descargar dos gigas y medio de CUDA. - Python: ruff check, ruff format --check y la suite completa con torch de CPU. Las rutas ignoradas de .yamllint.yml van ancladas con barra inicial. Sin anclar, 'data/' y 'runs/' excluían configs/data/ y configs/runs/ — siete archivos, justo los que más importa revisar — y el linter pasaba en verde sin haber mirado nada. Es el mismo defecto que ya había aparecido en .gitignore.
This commit is contained in:
@@ -235,9 +235,7 @@ class SearchConfig(_Base):
|
||||
"""
|
||||
|
||||
backend: Literal["duckduckgo", "brave", "searxng"] = "duckduckgo"
|
||||
fallbacks: list[Literal["duckduckgo", "brave", "searxng"]] = Field(
|
||||
default_factory=list
|
||||
)
|
||||
fallbacks: list[Literal["duckduckgo", "brave", "searxng"]] = Field(default_factory=list)
|
||||
region: str = "es-es"
|
||||
country: str = "uy"
|
||||
language: str = "es"
|
||||
|
||||
@@ -56,9 +56,7 @@ class ByteStream:
|
||||
)
|
||||
raw = np.frombuffer(path.read_bytes(), dtype=np.uint8)
|
||||
if len(raw) < seq_len * 4:
|
||||
raise ValueError(
|
||||
f"{path} tiene {len(raw)} bytes: muy poco para seq_len={seq_len}."
|
||||
)
|
||||
raise ValueError(f"{path} tiene {len(raw)} bytes: muy poco para seq_len={seq_len}.")
|
||||
|
||||
split_at = int(len(raw) * (1.0 - val_fraction))
|
||||
self._data = {
|
||||
|
||||
@@ -186,9 +186,7 @@ class Transformer(nn.Module):
|
||||
total -= self.tok_emb.weight.numel()
|
||||
return total
|
||||
|
||||
def forward(
|
||||
self, idx: Tensor, targets: Tensor | None = None
|
||||
) -> tuple[Tensor, Tensor | None]:
|
||||
def forward(self, idx: Tensor, targets: Tensor | None = None) -> tuple[Tensor, Tensor | None]:
|
||||
"""Devuelve (logits, loss). `loss` es None si no hay targets."""
|
||||
_, t = idx.shape
|
||||
if t > self.cfg.seq_len:
|
||||
|
||||
@@ -122,9 +122,7 @@ def load(
|
||||
|
||||
fmt = payload.get("format")
|
||||
if fmt != CHECKPOINT_FORMAT:
|
||||
raise ValueError(
|
||||
f"{path}: formato de checkpoint {fmt}, se esperaba {CHECKPOINT_FORMAT}."
|
||||
)
|
||||
raise ValueError(f"{path}: formato de checkpoint {fmt}, se esperaba {CHECKPOINT_FORMAT}.")
|
||||
|
||||
module = getattr(model, "_orig_mod", model)
|
||||
module.load_state_dict(payload["model"])
|
||||
|
||||
@@ -146,9 +146,7 @@ def train(cfg: Config, resume: bool = False) -> Path:
|
||||
if ckpt_path is None:
|
||||
print(f"[enlace] --resume sin checkpoints en {run_dir}: se empieza de cero")
|
||||
else:
|
||||
meta = checkpoint.load(
|
||||
ckpt_path, model=model, optimizer=optimizer, scaler=scaler
|
||||
)
|
||||
meta = checkpoint.load(ckpt_path, model=model, optimizer=optimizer, scaler=scaler)
|
||||
stream.load_state_dict(meta["stream"])
|
||||
start_step = meta["step"]
|
||||
print(f"[enlace] reanudado desde {ckpt_path.name} en el paso {start_step}")
|
||||
@@ -157,9 +155,7 @@ def train(cfg: Config, resume: bool = False) -> Path:
|
||||
print("[enlace] compilando el modelo (la primera iteración tarda)...")
|
||||
model = torch.compile(model) # type: ignore[assignment]
|
||||
|
||||
tokens_per_step = (
|
||||
cfg.hardware.effective_batch_size * cfg.model.seq_len
|
||||
)
|
||||
tokens_per_step = cfg.hardware.effective_batch_size * cfg.model.seq_len
|
||||
fpt = flops_per_token(getattr(model, "_orig_mod", model))
|
||||
model.train()
|
||||
|
||||
@@ -194,9 +190,7 @@ def train(cfg: Config, resume: bool = False) -> Path:
|
||||
# se aplicaría sobre gradientes inflados por el GradScaler.
|
||||
scaler.unscale_(optimizer)
|
||||
grad_norm = float(
|
||||
torch.nn.utils.clip_grad_norm_(
|
||||
model.parameters(), cfg.train.optimizer.grad_clip
|
||||
)
|
||||
torch.nn.utils.clip_grad_norm_(model.parameters(), cfg.train.optimizer.grad_clip)
|
||||
)
|
||||
scaler.step(optimizer)
|
||||
scaler.update()
|
||||
|
||||
Reference in New Issue
Block a user