Files
Mini-Nav/mini-nav/commands/train.py
SikongJueluo 4ea567adba feat(compressors): add JSONL training metrics logging with CLI controls
- Add write_training_metrics() in new compressors/training_metrics.py
  for appending epoch/step/lr/component rows as JSON Lines
- Wire --metrics-path and --log-every CLI options into train.py, passing
  them to the training loop so metrics rows are written every N steps
- Accept absolute metrics paths or paths relative to output directory
- Add quantization component to loss log alongside existing distill/contrastive
- Replace inline torch.device() with get_device() utility
- Add test_hash_training_metrics.py covering multi-row JSONL append

Infrastructure:
- Pin torch 2.7.1 + CUDA 12.8 index for Linux/Windows in pyproject.toml
- Add .justfile rsync upload recipe with .stignore exclusion
- Exclude **/__marimo__ from rsync in .stignore

Dependencies updated: numpy 2.4.5, pandas 3.0.3, black 26.5.0,
click 8.4.0, contourpy, etc.
2026-05-17 14:57:10 +08:00

36 lines
1.1 KiB
Python

import typer
from commands import app
@app.command()
def train(
ctx: typer.Context,
epoch_size: int = typer.Option(10, "--epoch", "-e", help="Number of epochs"),
batch_size: int = typer.Option(64, "--batch", "-b", help="Batch size"),
lr: float = typer.Option(1e-4, "--lr", "-l", help="Learning rate"),
checkpoint_path: str = typer.Option(
"hash_checkpoint.pt", "--checkpoint", "-c", help="Checkpoint path"
),
metrics_path: str = typer.Option(
"hash_training_metrics.jsonl",
"--metrics-path",
"-m",
help="JSONL metrics path for loss curves; relative to output directory unless absolute",
),
log_every: int = typer.Option(
1,
"--log-every",
help="Write one metrics row every N global steps; <=0 disables metrics logging",
),
):
from compressors import train as train_module
train_module(
epoch_size=epoch_size,
batch_size=batch_size,
lr=lr,
checkpoint_path=checkpoint_path,
metrics_path=metrics_path,
log_every=log_every,
)