Skip to content

Commit 4dc7b2a

Browse files
committed
launch_universal_training: decoder watchdog sized from total rows at the measured slow rate (--extra-rows); r2 needed a manual re-arm at 11 rows/s
1 parent dd9fbcf commit 4dc7b2a

1 file changed

Lines changed: 9 additions & 1 deletion

File tree

‎training/launch_universal_training.py‎

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ def launch(
191191
watchdog_min: int = 0,
192192
trainer: str = "marker",
193193
decoder_opts: dict | None = None,
194+
extra_rows: int = 0,
194195
):
195196
if trainer not in ("marker", "decoder"):
196197
raise SystemExit(f"--trainer must be marker or decoder, got {trainer!r}")
@@ -214,7 +215,12 @@ def launch(
214215
# Full-corpus epochs measured at ~110 min on 4x T4 with 8192-token rows; budget
215216
# 130 min/epoch plus 40 min for corpus build + sync, unless overridden.
216217
if watchdog_min <= 0:
217-
watchdog_min = 40 + 130 * epochs
218+
if trainer == "decoder":
219+
# Measured on 4x A10G: 18.6 rows/s on the universal corpus, 11 rows/s once judge/RAGTruth-length rows
220+
# are mixed in. Budget the slow rate over every row the run will see, plus setup and eval.
221+
watchdog_min = 40 + int(epochs * (max_train + long_context + synthetic_n + extra_rows) / 11 / 60) + 30
222+
else:
223+
watchdog_min = 40 + 130 * epochs
218224
print(f" Watchdog: {watchdog_min} min")
219225
print(" Cluster Target: 4x GPU (g4dn.12xlarge / g5.12xlarge)")
220226
print(" Region: us-west-2")
@@ -409,6 +415,7 @@ def launch(
409415
parser.add_argument("--base-model-id", default="", help="Hub id of the backbone (decoder trainer); default Qwen/Qwen3.5-0.8B")
410416
parser.add_argument("--decoder-opt", action="append", default=[],
411417
help="decoder trainer knob as key=value: max_length, lora_r, lora_alpha, head_width, head_routing_layers, head_layers, head_heads, head_feedforward, eval_name")
418+
parser.add_argument("--extra-rows", type=int, default=0, help="row count of --extra-train-s3, for the watchdog estimate")
412419
parser.add_argument("--watchdog-min", type=int, default=0,
413420
help="hard shutdown ceiling in minutes (0 = derive from epochs)")
414421
args = parser.parse_args()
@@ -433,6 +440,7 @@ def launch(
433440
lr=args.lr,
434441
watchdog_min=args.watchdog_min,
435442
trainer=args.trainer,
443+
extra_rows=args.extra_rows,
436444
base_model_id=args.base_model_id or ("Qwen/Qwen3.5-0.8B" if args.trainer == "decoder" else "wfzyx/von"),
437445
decoder_opts={k: (int(v) if v.isdigit() else v) for k, v in (o.split("=", 1) for o in args.decoder_opt)},
438446
)

0 commit comments

Comments
 (0)