NVIDIA / NVIDIA/nvcf

nvsnap: multi-GPU checkpoint/restore works on criu-v2 when no cross-GPU transports are active

Open
#1,183 0 comments 0 reactions 0 assignees View on GitHub

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-eager is 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.