Start

Install

warmctl is one static binary for Linux GPU hosts. It needs Docker with the NVIDIA runtime, root and one kernel setting.

Requirements

OSLinux x86-64, root
GPUsNVIDIA H100 SXM, H200, B200 or L40S
Driver580 or 610 branch. A snapshot restores under any release of the branch it was built on: why.
ContainersDocker with the NVIDIA Container Toolkit (nvidia-ctk)
Kernelkernel.io_uring_disabled=2: CRIU cannot checkpoint io_uring
DiskRoom 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

bash
$ 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

bash
$ 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:

bash
$ 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:

bash
$ sysctl -w kernel.io_uring_disabled=2
$ echo kernel.io_uring_disabled=2 > /etc/sysctl.d/99-warmctl.conf

Check the host

bash
$ 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:

/etc/warmctl/config.yaml
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.