Repository navigation
Sparks Pair (P0->P5) - #9884
Sparks Pair (P0->P5)#9884
Conversation
ResourceEnvelope has carried gpu: GpuRequirement? since the envelope was generalized, and unmet_shape_axes folded threads, memory and architecture only -- grep for gpu or vram in supply.dag returned zero, and UnmetShapeAxis had no GPU variant. So a work item demanding 80 GiB of VRAM and a CUDA runtime was admitted by any offer with enough threads, with the GPU requirement never examined. THE RULE THIS BREAKS IS WRITTEN IN THE SAME FILE. envelope.dag's own annotation says a fold "may skip an unstated axis, but it must never report an unstated axis as CHECKED -- that is the conflation where absence of observation becomes positive clearance". GPU was STATED and unchecked, which is that conflation reached from the other side, and the caller could not tell the difference because the fold answers the empty list both for "this axis matched" and for "this axis was never read". RUNTIME IS A MEMBERSHIP TEST PER REQUIRED RUNTIME, not a subset check. Work naming two acceptable runtimes needs the offer to provide one; work naming one needs that one. Reporting per missing runtime keeps the diagnosis at the grain the caller can act on, which is why the axes beside it carry required and offered rather than answering false. gpu_runtime_wire and gpu_runtime_eq land in extdeps.gpu.types, where the type is declared, because the wire projection is the single enumeration of the variants and equality reads it. A hand-rolled comparison beside it would let a fifth runtime compile against half the corpus. EVIDENCE, 12/12 PASS. The discriminating RED is work_demanding_vram_is_not_fungible_with_an_offer_stating_no_gpu: every other axis covers, and before this change the pair was reported fungible -- the broker sending GPU work to a machine with no GPU, reached by an absent comparison rather than a wrong one. Its positive control is a_sufficient_gpu_on_the_right_runtime_is_fungible, without which the three refusals would also pass if the axis refused everything. work_naming_no_gpu_requirement_ignores_the_gpu_axis holds the skipped-is- not-cleared line. Adding the variants also broke two PRE-EXISTING exhaustive matches in the witness. That is the no-wildcard discipline working: a new variant forces a decision at every site rather than defaulting silently. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HL72ndT9xg2dZEb6J8a2Gr
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: be4cb82915
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| flat_map(want, w => | ||
| if any(have, h => gpu_runtime_eq(a: h, b: w)) { | ||
| [] | ||
| } else { | ||
| [GpuRuntimeNotOffered { required: w }] |
There was a problem hiding this comment.
Treat requested GPU runtimes as alternatives
When a workload lists multiple acceptable runtimes, this flat_map emits a failure for every runtime the offer lacks, so a requirement such as [Cuda, Rocm] rejects an offer providing [Cuda]. This contradicts the stated one-of semantics and makes unmet_shape_axes nonempty—and therefore offer_covers_shape false—despite the offer supporting an acceptable runtime; the runtime check should produce no unmet axis when any requested runtime is present.
Useful? React with 👍 / 👎.
Auto-opened by session-dashboard for session
eager-pike-541.Pushing to
session/eager-pike-541-gpu-axisadvances this PR.Worker attestation
Before flipping this PR to ready for review, confirm each item:
npm test,cargo test) and the result.Closes #Ndirective.Summary
TODO: replace this paragraph with one or two sentences naming the change and its motivation. Reviewers read this first.
Test plan