Repository navigation
feat(signal): add first-class MPIJob certification - #963
Kevin Cho (chokevin) wants to merge 59 commits into
Conversation
|
Typed workload policy, Pod queue labeling, MPI worker isolation, and focused contract tests (15 seconds): signal-workload-policy-evidence.mp4 |
|
Copilot-generated 20-second fframes explainer. The source excerpts remain present in the production cleanup fixes. The recorded integration is explicitly archival, before the final production-only trim: 15 task nodes, 10 Pass and 5 Inconclusive. This is not a new live run or evidence that the updated head passed certification. The updated implementation is being validated separately; the live cluster and soak were not modified. signal-pr963-20s.mp4 |
|
Updated 20-second fframes architecture explainer with local narration: why Signal is needed, how the controller/CRDs/RBAC/adapter template are deployed alongside Argo, operator-owned scripts and Profile, the exact Node request label, immutable admission, serial tasks, and script execution in Pods/MPIJobs. This is an architecture animation, not a live execution recording. Placeholder deployment commands were not executed. It supersedes the archival clip as the architecture overview, not as runtime validation. signal-deployment-trigger-20s.mp4 |
6b2bb2c to
feee8be
Compare
Signal now treats MPIJob as a first-class production certification backend. For each MPIJob check, one launcher coordinates one worker per immutable participant, captures typed launcher/worker evidence, and cannot complete until retained workers and the full MPIJob ownership tree are gone. One immutable
CertificationRunexecutes exactly 15 ordered checks through one serial Argo Workflow; Pod remains available as the simpler per-participant backend.CertificationProfileand namespaced controller-generated immutableCertificationRun.scriptKey,backend,gpuCount,backendActiveDeadline, and a constrained workload policy. The suite deadline is derived from those 15 immutable deadlines plus an evidence reserve.spec.release: true.Evidence
MPIJob cleanup and live canary: 20-second fframes animation showing the retained-worker defect, the exact ownership/UID-safe cleanup change, launcher/worker SSH execution, and the final evidence/cleanup/release state.
signal-mpi-first-class-20s.mp4
A bounded live cutover was completed in a private test environment with digest-pinned controller, adapter, and runner images.
The Pod canary was used first as a control-plane baseline for admission, Argo startup, identity, evidence persistence, cleanup, and release; it was not the main backend acceptance proof. It exposed a deployment defect: the adapter ServiceAccount denied token automount, so the Argo executor and adapter could not obtain in-cluster Kubernetes configuration. The Run correctly became
Inconclusive, persisted evidence, cleaned its workload, and retained its reservation until explicit release. Commitb9fe9eba1enables the adapter Workflow identity's required API token; backend workload Pods remain tokenless. The corrected Pod canary then passed all 15 ordered checks with complete evidence, cleanup, and automatic release.The first useful MPI execution exposed a separate cleanup defect.
cleanPodPolicy: Noneintentionally retained the running SSH worker for evidence, but foreground MPIJob deletion inherited the worker's ordinary grace period and outlived the adapter's 30-second quiescence fence. Commit0d5413bebfixes the root cause: after evidence is durable, the adapter discovers only worker Pods matching the Signal Run label, MPIJob UID ownership, and worker container identity; deletes those exact Pods with UID preconditions and zero grace; then foreground-deletes the MPIJob and waits for its complete ownership tree to disappear.The corrected mixed canary completed all 15/15 ordered checks:
Succeeded/Pass; the Run endedSucceededwithAllChecksPassed.sha256:893d2dc235d6cdead37bc7ceb4911d966fb4ee9e4711bcdca321ced5bc99c351independently matched the uncompressed evidence document.WorkloadCleanupComplete=TrueandReleased=True; no Run-owned Workflow, MPIJob, Job, Pod, or script snapshot remained, and the participant was schedulable again.Verification
Current head
e9eb9d174ad193b5102e9793de4bfa43584d0bbb:go test ./internal/signaladapter ./cmd/project-signal-adaptergo vet ./internal/signaladapter ./cmd/project-signal-adaptergit diff --checkRemaining limits and review guide
The MPI canary proves single-Node launcher/worker orchestration and process launch. It does not prove cross-Node networking, multi-Node placement, distributed collectives, CUDA toolkit workloads, NCCL communication, legacy-contract compatibility, regression testing, or soak behavior.
The external participant lacked persistent private-registry authentication, so the exact runner digest was preloaded for this bounded canary. Another uncached external participant still needs a persistent registry credential solution or an explicit exact-digest preload. #1001 remains the source and publication dependency for the baseline runner image.
Review
api/signal/v1alpha1/for the two CR contracts and canonical bundle digest;internal/signal/controller.go,evidence.go, andprojection.gofor admission, recovery, audit, cleanup, and release;internal/signaladapter/adapter.goandrunner.gofor Pod/MPIJob execution and evidence-first quiescence; anddeploy/signal/for least-privilege RBAC, token boundaries, templates, image contracts, and lifecycle documentation. Review the baseline execution image separately in #1001.