nvsnap: multi-GPU checkpoint/restore works on criu-v2 when no cross-GPU transports are active
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 218
- Forks
- 72
- Avg merge
- 1d 12h
- Merged PRs (30d)
- 427
Description
Problem
The agent refuses multi-GPU CRIU outright:
multi-GPU CRIU is unsupported (distinctGPUs=%d, gpuPIDs=%v); use the rootfs-only path
The reasoning recorded alongside it is that cuda-checkpoint blocks on peer state and the D2H path could never reconstruct CUDA context state on restore. The first half is true. The conclusion drawn from it is too strong: with every cross-GPU transport off, criu-v2 does capture and restore tensor-parallel workloads, weights and KV cache included.
Measured on 8x H100 80GB:
workload engine checkpoint restore result
TinyLlama TP=2 vLLM 2m34s 56G 1m00s PASS
TinyLlama TP=4 vLLM 4m16s 110G 1m14s PASS
Llama-3.1-70B TP=4 vLLM 9m56s 290G 2m02s PASS
Qwen3-32B TP=2 (NIM) TRT-LLM 3m03s 103G 1m55s PASS
Llama-3.1-8B TP=2 SGLang hangs at capture FAIL
What this asks for
Enable multi-GPU checkpoint/restore on criu-v2, behind an opt-in, and record what it costs.
The cost is real and is the main open question: every cross-GPU transport has to be off before capture, which for tensor parallel means all-reduce over sockets. That is a configuration constraint on the workload, not something the platform can currently arrange for a tenant.
Known limits
- Default engine configuration still hangs the dump. The peer-transport sever is required.
- SGLang hangs at capture for reasons not yet established. vLLM and TRT-LLM both work, so it is engine-specific.
--enforce-eageris required, but unlike the transport flags it has a known owner and fix: the engine re-capturing its CUDA graphs after restore.- Cross-node restore and TP=8 untested.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
The issue names no files, tests, or entry points. Start by locating the existing multi-GPU CRIU rejection and the criu-v2 opt-in path; confirm how transport and --enforce-eager constraints are represented. Done means an opt-in path works for the documented vLLM and TRT-LLM cases while preserving the known SGLang, cross-node, and TP=8 limits.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go
- Domain
- infrastructure
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100