MODELS="n s m l" runs the promoted recipe with yolo26n, s, m and l one after the other;
only the nano run may promote itself, the others are candidates until their speed at the
beamline is known. Each training waits for MEM_FLOOR_GB of free memory, an out-of-memory
run is tried again at batch 8, and vLLM is restarted at the end only if it was running.
tools/bench_latency.py measures the answer time per frame as the live server asks for it
(frame scaled by infer_scale, letterboxed to 640, PyTorch fp16) and writes runs/<id>/latency.json.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>