Install
warmctl is one static binary for Linux GPU hosts. It needs Docker with the NVIDIA runtime, root and one kernel setting.
Requirements
| OS | Linux x86-64, root |
| GPUs | NVIDIA H100 SXM, H200, B200 or L40S |
| Driver | 580 or 610 branch. A snapshot restores under any release of the branch it was built on: why. |
| Containers | Docker with the NVIDIA Container Toolkit (nvidia-ctk) |
| Kernel | kernel.io_uring_disabled=2: CRIU cannot checkpoint io_uring |
| Disk | Room for snapshots in /var/lib/warmctl: from 9 GiB (Qwen3-0.6B) to 678 GiB (DeepSeek-V4.1-Flash), sizes in the catalog. Local NVMe restores fastest. |
Install warmctl
With the install script
$ curl -fsSL https://warmctl.io/install.sh | sh
The script puts the release for linux-amd64 in /opt/warmctl and warmctl on your PATH.
Not published yet. The script ships with the public release. Until then, install from the release archive you got with early access.
From the release archive
$ mkdir -p /opt/warmctl $ tar xzf warmctl-v2.0.0-beta.4-linux-amd64.tar.gz -C /opt/warmctl $ ln -sf warmctl-linux-amd64 /opt/warmctl/warmctl $ export PATH=/opt/warmctl:$PATH
The archive holds warmctl-linux-amd64 and cuinterpose/, NVIDIA cuInterpose, which multi-GPU engines run under. Keep the two side by side: warmctl looks for cuinterpose/ next to its binary.
Prepare the host
Docker and the NVIDIA runtime
Install Docker and the NVIDIA Container Toolkit, then register the runtime with Docker:
$ nvidia-ctk runtime configure --runtime=docker $ systemctl restart docker
Turn off io_uring
Every snapshot is taken with io_uring off, and a restored engine expects the kernel as it was. Set it now and keep it across reboots:
$ sysctl -w kernel.io_uring_disabled=2 $ echo kernel.io_uring_disabled=2 > /etc/sysctl.d/99-warmctl.conf
Check the host
$ warmctl doctor ok docker 28.3.3 (API 1.51) ok gpus 8 x NVIDIA H100 80GB HBM3, driver 580.173.02 ok io_uring kernel.io_uring_disabled=2 (snapshots need 2) ok nvidia-runtime nvidia-ctk on PATH: true ok kernel 6.11.0-1016-nvidia
Each line is one check; a FAIL says what is missing, and doctor then exits non-zero.
Configure (optional)
With no configuration, short names like qwen3-8b resolve in the public registry, registry.warmctl.io/warmctl. To pull through your own mirror or a shared file system first:
registry: registry.warmctl.io/warmctl mirrors: [harbor.acme.internal/warmctl] cache: /mnt/shared/warmctl
Every key and variable: Configuration.
Next
Serve your first model: pull a snapshot from the catalog and send it a request.