Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions atom/compass/runner/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ class is checked against `overrides.RPC_SURFACE`, the table of names a worker
the table marks unwaited, a hole parks nobody, and what is lost is the work the
name stood for:

- `exit` (`engine_core.py:260`) never reaches `ModelRunner.exit`, so the
distributed environment is never destroyed and the graphs and five KV tensors
it deletes stay held. The worker still leaves its loop -- `busy_loop` breaks
- `exit` (`engine_core.py:260`) never reaches `ModelRunner.exit`; the comment
on the `RPC_SURFACE` check in `model_runner` says what that loses here.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Non-blocking. Filed as #405, not this PR's to fix.

The pointer is right, and the comment is the only place the losses should live. But "says what that loses here" hands the comment a completeness claim that it does not meet under one config.

  • The comment's list (model_runner.py:66-71) names no del self.drafter (atom/model_engine/model_runner.py:1076-1077).
  • I measured that a drafter can exist on this runner at exit. ModelRunner.__init__ owns construction, and it calls build_drafter at :776, after the _build_and_load_model override at :757.
  • The only speculative refusal in the runner is in forward (overrides.py:517 at 37fba4df0), so a step is the only thing that reaches it.
  • With an eagle3 config at the default aux setting, Drafter.load_model(UnbuiltModel) returns None and arm_aux_capture returns None. So the runner constructs holding a drafter, and one shut down before its first step reaches exit with it.
  • The pin (test_what_the_comment_says_a_hole_at_exit_loses_is_what_exit_does) checks only comment ⊆ exit body, so it cannot see the omission.

The larger problem is in #405: the drafter is built on the device and its checkpoint is read. That breaks principle 2: "Simulated execution touches no GPU. No compute, no device allocation."

Rule: "A finding not fixed in the PR that found it gets an issue." (AI_DEV_RULES)

The worker still leaves its loop -- `busy_loop` breaks
on the dispatched name, in a statement beside the per-runner loop rather than
inside it -- so the symptom is what shutdown failed to release, not a hang.
- `process_kvconnector_output` never starts the asynchronous KV load its
Expand Down