Reference

CLI

warmctl <command> [flags]. Positional arguments come first, flags after them. Run it as root on the GPU host; catalog --all, images oci://… and mirror --all-platforms also work from a machine without GPUs.

CommandWhat it does
buildbake a warmed engine into a snapshot
upserve a snapshot, pulling it first when needed
ps · downlist the instances serving on this host; stop one
cataloglist the registry's models this host can restore
imageslist the snapshots on this host, or a repository's tags
push · pullmove snapshots through an OCI registry or a directory
mirrorcopy models into another registry or a shared directory
verify · gccheck a snapshot against its manifest; remove unused blobs
doctorcheck this host
profilelist, check and show profiles

Naming a snapshot

Wherever a command takes a snapshot, it accepts any of these:

FormMeans
qwen3-8ba repository in the configured registry: registry.warmctl.io/warmctl/qwen3-8b by default; its latest index, from which the host's platform is taken
qwen3-8b:TAGone platform tag of it, skipping the choice
ghcr.io/acme/qwen3-8b[:TAG]a repository in another registry: the first part has a dot, a colon or is localhost
oci://REGISTRY/REPO[:TAG]the same, spelled out
/snaps/qwen3-8ba snapshot directory on this host
dir:/mnt/shared/warmctla directory of OCI image layouts, for push, pull and mirror

Shared flags

Engine flags: build, up

FlagDefault
--state-dir DIR/var/lib/warmctlsnapshots, blobs, instances and locks
--docker PATH/var/run/docker.sockDocker socket
--progress FORMATplainplain or jsonl, one JSON object per event
--no-verifya canary mismatch only warns
--threads N4weights copy threads per GPU
--cuda-execution MODEautoGPU state restore: auto, serial or parallel
--criu PATHa host CRIU binary instead of the image's
--cuda-checkpoint PATHa host cuda-checkpoint instead of the image's
--test-cpuend-to-end test on a CPU host: no GPU devices, no io_uring check

Registry flags: up, push, pull, mirror, images

FlagDefault
--concurrency N64blobs transferred at once
--plain-httptalk to the registry over plain HTTP

Credentials come from Docker's (docker login). Where short names resolve: Configuration.

build aliases: snapshot, bake

warmctl build --profile ID|FILE --model-dir DIR --output DIR [--gpus LIST] [flags]

Starts vLLM in a container with the profile, warms it over every shape the profile declares, records the canary and checkpoints the processes, the GPUs and the weights into a new snapshot directory.

FlagDefault
--profile ID|FILEa built-in profile id or a YAML file; required
--model-dir DIRthe weights on this host; required
--output DIRthe snapshot directory to create; required
--gpus LISTGPU indices, e.g. 0 or 0-7
--set KEY=VALUEoverride the profile: vllm.<flag>=…, env.<NAME>=… or ipc=<mode>; repeatable
--profile-dir DIRanother directory of profile files; repeatable
--id NAMEoutput's namerun id
--ready-timeout DUR90mhow long the engine may take to load
--part-bytes N1 GiBsize of a weights part
--cuinterpose DIRnext to warmctlthe cuInterpose build
bash
$ warmctl build --profile glm53-flash-prod-tp8 --model-dir /models/glm --gpus 0-7 --output /snaps/glm

up alias: restore

warmctl up SNAPSHOT [flags]

Resolves the snapshot (pulling the platform that fits this host), checks the host, restores the engine, runs the canary and serves an OpenAI-compatible API until it is stopped. In the warmctl runtime image it restores in place, in its own container: Run in Kubernetes.

FlagDefault
--listen ADDR127.0.0.1:8000gateway address; :8080 in place
--gpus LISTfirst freeGPU indices; by default the first free GPUs of the snapshot's model
--id NAMEsnapshot's nameinstance id, for ps and down
--canary POLICYprofile'sbitwise, tolerance, warn or off
--verify-weightscheck each weights part's SHA-256 while reloading
--model-dir DIRthe weights, when the snapshot needs them
--accept-licenseaccept the license of a model the catalog marks gated
--mode MODEautoauto, host (Docker) or in-place
--run-dir DIR/run/warmctlin place: the agent's config, sockets and work

Plus the engine and registry flags.

bash
$ warmctl up glm53-flash --listen 0.0.0.0:8000
$ warmctl up /snaps/qwen3-8b --gpus 3 --id qwen-a --listen :8001

ps

warmctl ps [--all]

Lists the instances serving on this host: id, status, address, uptime and snapshot. --all adds those whose container stopped. Also --state-dir, --docker.

down alias: stop

warmctl down ID [--grace DUR]

Stops an instance, giving the engine --grace (30 s) to finish. Also --state-dir, --docker.

catalog

warmctl catalog [--all] [--json]

Lists the models the configured registry publishes, one row per platform this host can restore, with size, status (ready in the registry, pulled on this host) and license.

FlagDefault
--allalso the platforms this host cannot restore, with the reason
--jsonprint JSON
--publish FILEpublish a catalog YAML file as <registry>/catalog:latest

images alias: ls

warmctl images [oci://REGISTRY/REPO]

Without an argument, the snapshots on this host. With a repository, its tags.

push

warmctl push DIR NAME|REGISTRY/REPO|oci://REGISTRY/REPO[:TAG] [flags]

Stores a snapshot as one OCI artifact under its platform tag and adds it to the repository's latest. Large files go as 64 MiB pieces, runs of small files as bundles.

FlagDefault
--piece-size SIZE64MiBsplit files larger than this into layers of this size
--chunk-size SIZE0upload larger blobs in chunks of this size; 0 chunks only after the registry refuses a blob as too large

pull

warmctl pull SNAPSHOT [--output DIR]

Downloads the platform this host can restore, checking each piece and file, and prints the snapshot directory (<state>/pulled/<digest> by default). Tries the cache, the mirrors, then the registry; resumes after an interruption.

mirror

warmctl mirror SNAPSHOT DESTINATION warmctl mirror --catalog DESTINATION

Copies a model, or every model of the catalog and the catalog itself, into a registry namespace (oci://harbor.acme/warmctl) or a directory (/mnt/shared/warmctl), blob by blob, skipping what is there.

FlagDefault
--catalogcopy every model of the registry's catalog
--all-platformsevery platform, not only those this host can restore

verify

warmctl verify DIR [--deep]

Checks that every file in manifest.json is present with its size; --deep also hashes each against its SHA-256.

gc

warmctl gc [--dry-run]

Removes blobs from the store that no recorded snapshot uses. --dry-run only reports them.

doctor

warmctl doctor

Checks Docker, the GPUs and driver, kernel.io_uring_disabled, the NVIDIA runtime and the kernel; one line per check, non-zero exit if any fails.

profile

warmctl profile list|check [--dir DIR] warmctl profile show|argv ID|FILE [--dir DIR]

list prints the profile ids, check resolves every profile against the hardware table, show prints a profile with its defaults applied and its warmup cases as JSON, argv the vllm serve command it runs. Format: Profiles.

version

warmctl version