ADR 0113 — Unchosen install profiles try the GPU
- Status: Accepted
- Date: 2026-10-29
- Amends:
- ADR 0049 — a stored profile that nobody chose no longer pins the CPU build
- Related: ADR 0012 (Windows silent installs keep their CPU default), ADR 0086
Context
Section titled “Context”A Linux machine with an RTX 5070 Ti and a working Vulkan driver embedded on the CPU, and imprint doctor reported “llama.cpp found no GPU it can use”. The real cause was elsewhere:
install.shpiped from curl has no terminal, so it chosecpuwithout asking and passed--profile cpu.- Pressing Enter at its prompt also chose
cpu, although the prompt showsgpuas the default. data/profile.jsonrecordedcpu, and every laterimprint setupandimprint updateinstalled the CPU build again.
On the same machine, the Vulkan wheel from llm-gpu.lock.txt, installed in a scratch venv, found the GPU (ggml_vulkan: 0 = NVIDIA GeForce RTX 5070 Ti, offload True).
Decision
Section titled “Decision”profile.jsongainschosen, set when the profile came from--profile,IMPRINT_PROFILEorimprint profile set.- Setup keeps a stored profile only when it is marked
chosen. Any other stored value, including everyprofile.jsonwritten before this field existed, resolves toauto: setup installs the GPU build and keeps it when llama.cpp finds a GPU. When that replaces a storedcpu, setup says so and namesimprint profile set cpu. install.shpasses a profile only when the user typed one or answered its prompt. It prompts only on a fresh interactive install, and Enter picksgpu, as the prompt says.imprint doctorand Settings say that the cpu install profile installed the CPU build, rather than that no GPU was found.
Rejected alternatives
Section titled “Rejected alternatives”- Change only
install.sh. Every existing install would keep its recordedcpuuntil the user foundimprint profile set; the owner asked for setup and bootstrap to fix it themselves. - Treat a stored
cpuas a choice unless it matches a known installer default.profile.jsonnever recorded where its value came from, so a default cannot be told apart from a choice.
Consequences
Section titled “Consequences”- An existing installation that recorded
cpu, chosen or not, switches toautoon its nextimprint setuporimprint update. Where llama.cpp finds no GPU,autoinstalls the CPU build as before. A user who had deliberately picked the CPU on a GPU machine gets the GPU build once and has to runimprint profile set cpu. - Windows silent installs still pass
-Profile cpuon a first install (ADR 0012). That is an explicit value, so it stays CPU.
Invalidation conditions
Section titled “Invalidation conditions”- If users report losing a deliberate CPU choice after an update, then the migration needs to ask before switching.
- If the GPU build becomes the default for every profile, or the profiles are removed, then
chosenis obsolete.
Validation
Section titled “Validation”go test ./cmd/, includingTestResolveInstallProfile: fresh install, stored default, stored choice, flag, environment, unknown value.tests/test_llama_runtime.py:cpu_profile.imprint doctoron the machine above reportsCPU: the cpu install profile installed llama.cpp's CPU build.bash -n install.sh, including the empty-arguments expansion underset -u.- Not executed: a full
imprint setupthat switches an installed CPU build to the GPU build.