From 2bc24b2cc43753ae83de4f39ec9900a3de0ccf7e Mon Sep 17 00:00:00 2001 From: Flag Date: Wed, 22 Apr 2026 19:41:00 +0000 Subject: [PATCH] =?UTF-8?q?dispatcher=20=C2=97=20keep=20demo.py=20alive=20?= =?UTF-8?q?apres=20PLY=20+=20auto-clear=20error?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Ne plus kill demo.py apres PLY saved: son viser/PointCloudViewer natif (camera frustums, per-frame confidence filtering, animation) donne une visu bcp plus propre que viser_ply.py standalone (XYZ+RGB seul). Cout: ~6GB VRAM par job done garde alive jusquau prochain pick_worker qui peut kill si besoin. 2. set_status clear auto le champ error quand status transitionne vers extracting/running/done/queued: sinon les dashboards montrent les erreurs historiques sur les jobs en cours de retry. --- docker-compose.yml | 10 ++++------ scripts/__pycache__/dispatcher.cpython-311.pyc | Bin 0 -> 37897 bytes scripts/dispatcher.py | 13 +++++++++---- 3 files changed, 13 insertions(+), 10 deletions(-) create mode 100644 scripts/__pycache__/dispatcher.cpython-311.pyc diff --git a/docker-compose.yml b/docker-compose.yml index 7cfa5bd..ec94b89 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,13 +6,11 @@ services: ports: - "3849:8000" volumes: - - cosma-qc-db:/var/lib/cosma-qc + - /home/floppyrj45/cosma-qc-data:/var/lib/cosma-qc + - /home/floppyrj45/.ssh:/ssh-in:ro environment: COSMA_QC_WORKERS: | [ - {"host":"192.168.0.87","ssh_alias":"gpu","gpu":"RTX 3060 12GB"}, - {"host":"192.168.0.84","ssh_alias":"ml-stack","gpu":"RTX 3090 24GB"} + {"host":"192.168.0.87","ssh_alias":"gpu","gpu":"RTX 3060 12GB","vram_mib":11913,"frames_dir":"/home/floppyrj45/cosma-qc-frames","lingbot_path":"/home/floppyrj45/ai-video/lingbot-map","viser_port_base":8100}, + {"host":"192.168.0.84","ssh_alias":"ml-stack","gpu":"RTX 3090 24GB","vram_mib":24576,"frames_dir":"/root/cosma-qc-frames","lingbot_path":"/root/ai-video/lingbot-map","viser_port_base":8100} ] - -volumes: - cosma-qc-db: diff --git a/scripts/__pycache__/dispatcher.cpython-311.pyc b/scripts/__pycache__/dispatcher.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4b2de32011298a20588da23164f5afecada75397 GIT binary patch literal 37897 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 int: def set_status(job_id: int, **fields): + # Auto-clear stale error text when the job moves into a live state so the dashboard + # stops showing a previous failure alongside a fresh run. + if fields.get("status") in ("extracting", "running", "done", "queued") and "error" not in fields: + fields["error"] = None keys = list(fields.keys()) vals = [fields[k] for k in keys] q = "UPDATE jobs SET " + ", ".join(f"{k}=?" for k in keys) + " WHERE id=?" @@ -263,10 +267,11 @@ def do_reconstruct(job: sqlite3.Row, worker: dict, frames_dir: str) -> tuple[str f"for i in $(seq 1 3600); do " f" if ! kill -0 $DEMO_PID 2>/dev/null; then wait $DEMO_PID; exit $?; fi; " f" if grep -q 'PLY saved:' {log} 2>/dev/null; then " - f" sleep 2; " - f" pkill -TERM -f \"demo.py.*{frames_dir}\" 2>/dev/null; sleep 1; " - f" pkill -KILL -f \"demo.py.*{frames_dir}\" 2>/dev/null; " - f" wait $DEMO_PID 2>/dev/null; exit 0; " + # Keep demo.py alive so its viser/PointCloudViewer (with camera frustums, per-frame + # confidence filtering, animation) stays reachable. Standalone viser_ply.py only has + # XYZ+RGB which gives a poor-looking cloud. The worker eats ~6GB VRAM per alive demo.py + # until pick_worker can no longer fit a new job; _cleanup_stale_demos reaps the oldest. + f" exit 0; " f" fi; " f" sleep 3; " f"done; "