test(agent): exercise cuinterpose checkpoint and restore on GPUs - #220
Closed
galletas1712 wants to merge 3 commits into
Closed
galletas1712 wants to merge 3 commits into
galletas1712 wants to merge 3 commits into
Conversation
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: trueComment |
This was referenced Sep 4, 2026
galletas1712
force-pushed
the
test/cuinterpose-gpu-tests
branch
from
September 4, 2026 20:10
af8ff3e to
74e37d3
Compare
galletas1712
force-pushed
the
test/cuinterpose-gpu-tests
branch
from
September 11, 2026 02:23
74e37d3 to
6008d77
Compare
galletas1712
force-pushed
the
test/cuinterpose-gpu-tests
branch
from
September 11, 2026 06:10
6008d77 to
0a031a6
Compare
galletas1712
removed this pull request from stack #221
September 11, 2026 06:11
galletas1712
added this pull request to stack #293
September 11, 2026 06:11
This was referenced Sep 11, 2026
galletas1712
force-pushed
the
test/cuinterpose-gpu-tests
branch
from
September 11, 2026 06:16
0a031a6 to
9eb6d6f
Compare
galletas1712
force-pushed
the
test/cuinterpose-gpu-tests
branch
from
September 11, 2026 06:41
763c8d4 to
08da986
Compare
1 task
galletas1712
force-pushed
the
test/cuinterpose-gpu-tests
branch
from
September 11, 2026 08:31
d1dd9ae to
43c0643
Compare
galletas1712
force-pushed
the
test/cuinterpose-gpu-tests
branch
from
September 11, 2026 08:42
43c0643 to
7092173
Compare
galletas1712
force-pushed
the
test/cuinterpose-gpu-tests
branch
from
September 11, 2026 09:41
7092173 to
085a002
Compare
Add an adaptive two-GPU pytest suite that drives coordinator prepare, native CUDA process lock/checkpoint/restore/unlock, and coordinator restore around an interposed forked process tree. The unicast test keeps an explicit ticket-backed peer mapping in each worker across the round trip, verifies seeded allocation contents, measures host-carrier H2D throughput, and proves live raw imports are refused before destructive prepare. The multicast test requires a real PyTorch symmetric-memory multicast VA and logical handle, exercises both BindMem and BindAddr, and verifies the multimem collective and captured CUDA graph after restore. Split direct CUDA/VMM and native-checkpoint mechanics into cuda_driver.py while harness.py retains coordinator and process orchestration. Signed-off-by: Schwinn Saereesitthipitak <schwinns@nvidia.com>
galletas1712
force-pushed
the
test/cuinterpose-gpu-tests
branch
from
September 11, 2026 10:08
085a002 to
0eae9c4
Compare
Co-authored-by: OpenAI <noreply@openai.com> Signed-off-by: Schwinn Saereesitthipitak <schwinns@nvidia.com>
Co-authored-by: OpenAI <noreply@openai.com> Signed-off-by: Schwinn Saereesitthipitak <schwinns@nvidia.com>
This was referenced Sep 12, 2026
Contributor
Author
|
Superseded by the replacement 13-PR C-frontend/Rust-backend cuinterpose draft stack: https://github.com/ai-dynamo/snapshot/stack/339 (#326–#338), tracking approved proposal #295. The new stack preserves one reviewable stage per PR, with tests collected in #338 and the design in #337. PageBroker transfer changes remain a separate dependency. Closing this older C implementation; retaining its branch and discussion for reference. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Layer 11 of the eleven-PR cuinterpose stack #293, based on #219. Closed PR #214 is not in the active stack.
This PR adds real-driver two-GPU checkpoint/restore tests under
agent/cmd/cuinterpose/tests/gpu. The uninterposed controller launches an interposed parent and two worker ranks throughcuda-checkpoint --launch-job. It drives interposer preparation, native CUDA lock/checkpoint/restore/unlock, interposer reconstruction, and workload assertions. It does not deploy the operator or namespace-entry wrapper.Shared and private VMM regression
The tests distinguish actual sharing from export capability:
cuMemGetAllocationPropertiesFromHandle; retain-by-address and normal cleanup must succeed.The suite also retains raw-import preflight refusal, creator/peer content checks, PyTorch symmetric-memory sharing, captured all-reduce replay, and post-restore raw import coverage. The multicast test requires real multicast selection, exercises bindings including
BindAddr, and validates its collective and captured graph after reconstruction.The suite skips absent prerequisites: Python CUDA/PyTorch bindings, build tools or prebuilt binaries, launch-job support, two distinct GPUs, and NVLink/multicast support where required.
CUINTERPOSE_BUILD_DIRselects node-built binaries; otherwiseCUDA_HOMEsupplies build headers.Stack transport
The ownership change is introduced in #218, merged through #219, then merged here. The GPU regression is a separate commit in this PR. Existing branch history is preserved; no force-push is needed. No merged-test-branch NIXL, CustomStorage, driver patch, or phase-batching code is included.
Validation
Preparation checks passed:
Candidate
21008b50b93a9879a805665e331e777bb93abf49passes all 74 native fake-driver tests, including five lifecycle and six multicast tests, with the configured ASan/UBSan instrumentation. Tests used CUDA 13.1 headers, the system GCC/G++ toolchain, cached GoogleTest, and a short control-socket directory. Logs:stack-private-vmm/pr220-final-tests.log.Exact PR head
21008b50b93a9879a805665e331e777bb93abf49passed all 3 physical-GPU tests, 0 skips, 0 failures, in 19.896 s on two B200 GPUs on nscale-dev, 2026-09-12 UTC. The source commit and built-binary checksums were recorded, and JUnit confirms:test_checkpoint_restores_multicast_grouptest_checkpoint_restores_shared_posix_memorytest_prepare_is_refused_while_a_raw_import_is_aliveThe node compiled the exact source using the Makefile's documented
ALLOW_OLD_CUDA_HEADERS=1override with CUDA 13.0 headers. Pytest ran through the uv-managed environment atagent/cmd/cuinterpose/tests/gpu/.venv/bin/python; the three warnings concernrecord_propertywith xunit2, not skipped coverage. Evidence is saved in the private test bundlerestore-optimization-e1a06b2/evidence/pr220-gpu/.This was an exact-stack test, separate from the merged CustomStorage performance experiment.
Node test commands (with
evidenceset to the Job's output directory):Historical evidence only
Historical stack head
0eae9c4f9b66093332f00a332afaf56048e1e64apassed the full local gate, 73 native tests, and all three B200 GPU tests with no skips in 19.79 seconds. Its unicast case restored 545,259,520 bytes at 105.47 GB/s aggregate H2D copy throughput; its multicast and live raw-import refusal cases passed. Those numbers describe the previous ownership behavior, not this candidate's performance.Contribution notes
This updates the existing test PR rather than duplicating it. AI assistance was used for the implementation, regression, and description. The human submitter must review every change and run the relevant tests.
This ownership fix is being validated in parallel with the restore-performance experiment. That experiment's NIXL and driver changes are not included here.