Fastfill-test / code /fastfill /v2 /ops /README.md
XXXpilar's picture
FastFill v4 base (step 6552): LoRA adapter, geometry heads, tokenizer, training code, predict.py
e6f80f3 verified
|
Raw History Blame Contribute Delete
6.07 kB

fastfill/v2/ops β€” operations and final-analysis scripts (2026-10-08)

Server-side scripts used to rebuild data, run the autopilot and analyse the final model. The isambard_* scripts and run_plan.sh run from any checkout; the others assume the old server checkout /home/jovyan/shanliantian/fastfill. Nothing here holds credentials β€” the LLM key lived only in /home/jovyan/shanliantian/.fastfill_api.env on that server.

Operations

  • rebuild_and_publish.sh <name> (Mac): full data chain (legacy_build β†’ legacy_verify β†’ review_data β†’ qualified_data β†’ multisource_verify) from a pinned worktree (SRC=), HF upload, NEXT_DATA.json; NO_HANDOFF=1 holds the server handoff until the reports are checked. Stops at the first failing verifier (set -euo pipefail).
  • start_autorun_retrain.sh: retrain on new data with logged --set overrides (model.max_objects=256, loss.yaw_cls=0.5), --name-suffix, LLM step disabled (no paid calls).
  • run_checkpoint.sh <model-step> <tag>: five-room RoomGenBench hand-off on CPU with --require-placement (the autopilot calls it; runs from any checkout). It rebuilds runs/roomgenbench/requests from the scenes and builder on disk each time (a differing old directory is set aside as requests.stale-*) and records them in <tag>/requests.sha256.
  • Isambard-AI (aarch64 GH200, Slurm): from a checkout under $PROJECTDIR, bash fastfill/v2/ops/isambard_submit.sh submits isambard_setup.sbatch (conda env with the baseline's package versions, pinned data, backbone and LLM rows, tests) and, once it succeeds, two isambard_autorun.sbatch jobs (one node each): yaw_cls 0.5 and the 0.08 control, both from configs/main7-cell05-main-20261007b-e5.json (the baseline's configuration) with max_objects 256. Status in runs/autorun-yawcls05/ and runs/autorun-yawcls008/, job logs in runs/isambard/. Resubmitting an autorun job resumes it.
  • run_structured.sh, rescore_llm.sh: the OptiScene-style LLM modes on the frozen 300 rows and re-scoring of saved LLM predictions with the current evaluator (no API calls); run_reference.sh: reference check of a 5-room export.

Final analysis on Isambard-AI (after both autopilot arms; one node, 4 GPUs, at most 12 h)

  • First sacct -j <setup>,<yawcls05>,<yawcls008> -o JobID,JobName,State,ExitCode and git log -1: the setup of 2cd4f47 fails its test step on Isambard (fixed in 3806325), and arms queued with afterok on a failed setup never start; then pull main and run isambard_submit.sh again. Pull only while no arm's STATUS.json phase is F-* (a change of a fastfill/v2/*.py file during phase F stops it). Submit from the checkout with the job ids of the arms that will actually run (once both runs/autorun-yawcls05/STATUS.json and runs/autorun-yawcls008/STATUS.json say done / done-with-failures the dependency can be dropped): sbatch --dependency=afterok:<yawcls05 job>:<yawcls008 job> fastfill/v2/ops/isambard_analysis.sbatch Unattended only if both arm jobs exit 0 within their 24 h: an arm that fails or times out (no automatic resubmission; resubmitting resumes it) leaves the analysis job pending; after resubmitting that arm run scontrol update JobId=<ff-analysis job> Dependency=afterok:<new ids> (or scancel it and submit again). It runs run_plan.sh all (inputs β†’ gpu β†’ cpu β†’ report) from the checkout; the report is runs/analysis/final/report.html, the job log runs/isambard/ff-analysis-<job>.out, step times runs/analysis/walltime.tsv. Resubmitting resumes (finished outputs are kept; all of them are redone if the chosen checkpoints changed). Single steps by hand only inside an allocation (srun --nodes=1 --gpus=4 ...), not on a login node.
  • isambard_inputs.py (step inputs): refuses unless both arms are done / done-with-failures with the same select2 cohort bytes scored by the same fastfill/v2 code (implementation_sha256); final = the arm with the lower select2 score (STATUS best.score), control = the other. Downloads with the submitting shell's HF_HOME / login, every file sha256-pinned: the old baseline (liantian/fastfill-v2-models, used from runs/baseline-hf/ whose model_config.json names this checkout's models/Qwen3-8B, recorded in BACKBONE_REWRITE.json), the saved LLM answers (prompt, harness β†’ runs/llm-{prompt,harness}-300/; the structured modes only if runs/llm-structured*-300 exist, else the report says they are missing) and the old data data/main-20261007b. Rebuilds the baseline's old selection cohorts with Autopilot.eval_data. Writes runs/analysis/inputs.json.
  • The report compares final vs baseline (≀ 128-object rooms), final vs control (the evidence for the choice), spread vs argmax per model, final vs the LLM answers re-scored by the evaluator on disk (no API calls), the ablations and the RoomGenBench reference checks; validation decides, test is report-only.
  • isambard_dryrun.sh WORK PYTHON NEW_DATA OLD_DATA LLM_DIR ROOMGENBENCH: CPU end-to-end dry run of the whole job in a throwaway checkout (tiny-backbone stand-ins, both arms made by the real autopilot, DRYRUN=1: no downloads).

Analysis scripts (make_sample.sh is the old server's CPU sample test of 2026-10-08, kept as a record)

  • stratify.py: per-object errors split by target selection rule (old vs added targets), place, source and object count, reproducing evaluate's report exactly; validator collision / clean-room rates per stratum.
  • compare.py: paired room-level Aβˆ’B (bootstrap CI of the mean per-room difference as the primary criterion, Holm sign test as robustness); refuses different rows or different decoding code.
  • llm_compare.py: FastFill (raw / spread) vs the four LLM modes on the frozen 300 rows; transport failures, latency and token columns.
  • sample_validation.py, diag_ablation.py, selftest_shift.py, crosscheck.py, report.py (self-contained HTML). Decisions (spread vs argmax, replacing the baseline) read validation comparisons only; test sections are report-only.