any AMD card.
serves LLMs.

Vulkan runs on every AMD card; ROCm only makes the supported ones faster.

RX 580RX 68007900 XTXMI210APUs
install github
cameod
:9090
vulkan
amdgpu
ready

01how it works

Detect the card. Pull a model. Serve it.

The CLI and the cameod browser console are thin clients over the same brain. One box, or a list of them — same commands.

01

Classify

cameo gpu-status reads the GPU, picks a tier, and chooses Vulkan or ROCm. Every default is overridable.

02

Pull

cameo pull tinyllama fetches a GGUF into the shared cache the daemon and CLI both use.

03

Serve

cameo serve opens an OpenAI-compatible door. Or open :9090 and drive it from the console.

  forge-01
$ cameo gpu-status  3 AMD GPUs · tiers 1/2/3 · vulkan OK $ cameo pull tinyllama  cached · /var/lib/cameo/models $ cameo serve tinyllama --params 1.1  http://127.0.0.1:8080/v1/chat/completions

02what your card does

Three tiers. Vulkan on all of them.

Cameo never silently fails on unsupported hardware. It classifies the card and says so in plain language. Training needs ROCm (tiers 1–2). Inference does not.

1 train + serve7900 XTX · MI210 · official ROCm ROCm, Vulkan fallback
2 serveRX 6800 · 6700 XT · HSA override inference; training community-tested
3 vulkanRX 580 · APUs · no ROCm path inference only
  first boot · tty1
================  Cameo  ================GPU 0  Radeon RX 580 8G  pci  0000:01:00.0  vram 8192 MiB  arch gfx803  tier ● Tier 3   no training  why  gfx803 has no usable ROCm path:        Vulkan-only inference, no training.-----------------------------------------Web console:  http://192.168.1.40:9090

That's the real first-boot printout for a tier-3 drawer card — the tier in plain language, the reason, then the console URL. Check yours with cameo gpu-status; the tier is a smart default, not a verdict.

03the console

Administer it from a browser.

cameod ships in the ISO and starts on boot. It binds :9090 with a key — GPUs, tiers, endpoints, model cache, a playground. No extra web stack.

04one card → a cluster

Same two commands on 1, 4, or 9 cards.

A single old Radeon, a multi-GPU box, a small cluster: detect, pull, serve. The placement brain picks a node; you start the serve on that node.

one card ×1 a box ×4 a cluster ×9 one card ×1 a box ×4 a cluster ×9

05install

Two ways in.

The container runs on the host’s GPU driver and works anywhere — the recommended path. The ISO is a bootable Arch appliance that is the console: flash it, boot the box, done.

Container recommended

Build the Vulkan image, pass the GPU through, open the console on :9090.

podman build -f containers/Containerfile -t cameo:vulkan .
podman run --rm -p 9090:9090 \
  -v cameo-models:/var/lib/cameo/models \
  --device=/dev/kfd --device=/dev/dri \
  --group-add video --group-add render \
  cameo:vulkan

ISO appliance

Flash the image, boot the box. "Install to disk" is the default entry; first boot prints your card's tier, the console URL, and a key.

Flash it, then boot:

sudo dd if=cameo-*.iso of=/dev/sdX \
  bs=4M status=progress oflag=sync

Or build it yourself on an Arch host:

git clone https://github.com/sadlowskik/cameo
sudo ./scripts/build-iso.sh   # CAMEO_EDITION=lite for old cards

Beta, pre-v1 — verify the download against SHA256SUMS before flashing, and note the disk installer erases the drive you pick. Source, issues, and docs: github.com/sadlowskik/cameo.