Skip to content

Snapshot/restore for GPU actors (suspend/resume with a live CUDA context) #779

Description

@eliranw

Goal

Let a GPU actor suspend and resume while the workload is holding a CUDA context. Follow-up to the "Snapshot/restore with GPU out of scope" note in #627.

What happens today (gVisor)

A Full-scope snapshot of an actor with a live CUDA context fails in runsc:

FATAL ERROR: checkpoint failed: checkpointing container "pause":
  encoding error: can't save with live nvproxy clients

The sandbox dies with it, so retries get cannot checkpoint container "pause" in state stopped. The actor ends up in STATUS_SUSPENDING, which you can't delete from, holding its worker. Same as #50.

Suggested approach (gVisor)

runsc already supports NVIDIA's cuda-checkpoint, which moves device memory to host and releases the GPU before saving. I tested it on a T4 with the runsc we pin (release-20260622.0): copied the binary into a running actor's rootfs and ran runsc checkpoint -cuda-checkpoint-path /cuda-checkpoint by hand. It went through, 301 MB of image files, no nvproxy error, workload still running after.

  1. Get cuda-checkpoint into the actor. The flag wants a path inside the container, so it can ride the CDI mounts we already inject.
  2. Pass -cuda-checkpoint-path in cmdCheckpoint (cmd/ateom-gvisor/runsc.go).
  3. Restore needs nothing. gVisor replays the setting from the checkpoint image.

Micro-VM

Micro-VM actors don't have GPU support yet (#762), but the snapshot story should be settled before that lands, because it may constrain the design.

Need more exploration in this area.

Known costs / open issues

  • The binary isn't in the driver or the toolkit. It's in-tree at NVIDIA/cuda-checkpoint under bin/x86_64_Linux/, no releases. About 6 KB, dynamically linked, so the actor image needs a loader. Same constraint that stopped distroless ateom from running nvidia-ctk.
  • Golden snapshots are always Full, regardless of onPause/onCommit, since a data-only golden leaves nothing to restore the guest from. So a template holding a context at golden-snapshot time is affected either way.

Related: #627, #502, #762

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions