wimpy-setup: a dual-GPU inference box you can rebuild from scripts

·2 min read
wimpy-setup: a dual-GPU inference box you can rebuild from scripts

This is not a guide. It’s the actual, ordered, idempotent script set that builds my inference server — shared because rebuilding from memory is how homelabs die. Wimpy is a Ryzen 7 7700 with two GPUs serving LLM inference at the same time: an AMD Radeon AI PRO R9700 (32GB, ROCm) and an NVIDIA RTX 5060 Ti (16GB, CUDA), behind one llama-swap endpoint.

The dual-GPU part is the reason this repo exists. HIP and CUDA backends of llama.cpp share library filenames, so they can’t coexist in one prefix — there are two isolated builds (/usr/local for ROCm, /opt/llama-cuda for CUDA) and one llama-swap config with two non-exclusive groups. A -cuda model entry is the same GGUF as its AMD twin with a different binary and device pin, so either card can serve it. GPUs are pinned by UUID (the Ryzen iGPU also enumerates as a ROCm device and will happily steal your workloads if you let it).

Features:

  • Nine ordered idempotent host scripts (run-all.sh --from/--only) covering base system through KVM
  • Dual-GPU llama.cpp: ROCm gfx1201 + CUDA sm_120 builds in isolated prefixes, one llama-swap over both
  • fetch-model.sh — full GGUF acquisition pipeline: inspect, validate, GPU smoke-test, register, auto-deploy with rollback; handles HF repos, URLs, and local files
  • Automatic mmproj projector resolution for vision-language models, renamed to prevent collisions between repos
  • Mid-pipeline failures write a resume dossier instead of leaving you stranded
  • Parameterized Hermes VM provisioning (hermesvm-setup.sh --hostname X), clone-and-go for every future VM
  • Bidirectional SSH trust scripts with merge-never-replace sshd dropins — re-running can’t lock anyone out
  • Stubbed test suite that runs without network or GPU

Source: github.com/rahlquist/wimpy-setup