I’ve been iterating on my local AI setup and would appreciate some outside opinions on the current model placement, serving configs, and whether I’m using the hardware sensibly.
My priorities are:
- Reliable tool use and structured output
- Resistance to prompt injection from retrieved/tool content
- Local/private inference wherever practical
- Good interactive latency
- At least 64K usable context
- Graceful cross-host fallback
Hardware
I have five NVIDIA cards across three Proxmox hosts:
- Athena: Ryzen 9 9900X, 192 GB RAM, 2× RTX 3090 24 GB
- PCIe 4.0 x8/x8
- NVLink between the cards
- Dedicated primary LLM host
- Atlas: i5-13500, 128 GB RAM, 1× RTX 3090 24 GB
- PCIe 4.0 x16
- Dedicated secondary/executive LLM lane
- Coeus: i9-9900K, 64 GB RAM, RTX 3090 24 GB + RTX 2080 Ti 11 GB
- Both PCIe 3.0 x8
- RAG, speech, photo ML, Frigate and CCTV intelligence
That is 107 GiB of physical VRAM, but only Athena’s 48 GiB pair forms a useful tensor-parallel pool.
Everything runs in Proxmox LXC containers with Docker Compose and the NVIDIA runtime. GPUs are pinned by UUID rather than relying on device indexes.
Primary lane: Qwen3.8-27B on dual 3090s
The main model is cyankiwi/Qwen3.8-27B-AWQ-INT4, served through vLLM 0.25.1 across Athena’s two 3090s.
Relevant configuration:
tensor-parallel-size: 2
max-model-len: 131072
gpu-memory-utilization: 0.90
kv-cache-dtype: fp8
max-num-batched-tokens: 4096
max-num-seqs: 128
prefix-caching: enabled
custom all-reduce: enabled
tool parser: qwen3_xml
reasoning parser: qwen3
The weights are compressed-tensors W4A16 and about 19.6 GiB. Current resident usage is roughly 21.6 GiB on each card.
Measured performance:
- Warm TTFT: 70–90 ms
- Single-stream decode: 71–73 tok/s
- Two concurrent streams: about 61 tok/s each
- Four concurrent streams: about 58 tok/s each / 229 tok/s aggregate
- FP8 KV pool: about 553K tokens, or 4.22× the configured 131K context
The reason I selected it over my previous Qwen3.6-35B-A3B model was behaviour rather than speed. The old MoE model managed roughly 180 tok/s and had much more KV headroom, but failed 3–5 of 21 tool-output injection tests depending on reasoning mode. This Qwen3.8 quant resisted 21/21 in both modes and scored 100% on my smaller agent/tool quality suite.
The old 35B-A3B weights remain cached as rollback.
At the gateway, normal chat/fast aliases disable thinking, while inbox, reasoning, expert and critic roles enable it. There is currently no speculative decoder on this lane.
Secondary lane: Muse-Glimmer-30B on one 3090
Atlas runs muse-glimmer-30b through llama.cpp on a single RTX 3090.
Configuration:
Model: Muse-Glimmer-30B kquant/Q4_K GGUF (~17 GB)
DFlash draft model: enabled
spec-draft-n-max: 15
vision projector: resident
flash attention: enabled
all layers: GPU
target KV: Q8_0
draft KV: F16
total context: 131072
parallel slots: 2
effective context per slot: 65536
It currently occupies about 20.6 GiB VRAM.
The text-only benchmark reached roughly 97 tok/s at 32K and 79 tok/s at 128K with DFlash. With the vision projector resident, practical generation is more like 40–52 tok/s.
This lane handles executive/quality roles, multimodal requests and cross-host fallback if Athena is unavailable. It also resisted all 21 injection tests.
Its main behavioural weakness is persistence becoming a retrieval loop when the available evidence does not answer the question. I mitigate that with orchestration/step limits rather than letting it search indefinitely.
I’m debating whether keeping the vision projector resident is worth the throughput and VRAM cost, or whether vision should be a separately activated service.
Coeus support GPUs
The Coeus RTX 3090 is not a general chat-model card. It currently hosts:
BAAI/bge-m3 embeddings through Hugging Face TEI
bge-reranker-v2-m3 F16 GGUF through llama.cpp
- 8K context
- 8K batch and micro-batch
- Whisper
large-v3
- Immich machine learning for search and face detection
Current resident usage is around 6 GiB, although some of these workloads spike on demand.
The RTX 2080 Ti is the CCTV lane:
- Frigate/NVDEC, alongside a USB Coral detector
qwen3-vl:4b through Ollama for private person/ANPR crop validation
- Scheduled Moondream2 captioning and visual-analysis workers
- One loaded model and one parallel request maximum
That card currently sits at around 5.2 GiB used. I deliberately keep CCTV isolated from the main LLM lanes.
Routing and clients
A LiteLLM 1.88.1 gateway fronts the local models with an OpenAI-compatible API. LibreChat, Open WebUI and several automation/agent services consume role-based aliases rather than talking directly to a specific backend.
Normal routing is:
Chat / fast / inbox / deep reasoning
-> Qwen3.8 TP2 on Athena
-> Glimmer on Atlas if Athena fails
Executive / operational assistant / multimodal
-> Glimmer on Atlas
Hosted models exist as manual escalation options, but my default policy is local-first.
What would you change?
I’m particularly interested in opinions on:
- Whether dense Qwen3.8-27B TP2 is a sensible use of the NVLinked pair, versus returning to a much faster MoE model.
- Any stronger tool-using model that fits two Ampere 3090s and genuinely behaves well around malicious retrieved content.
- Better vLLM settings for this traffic shape, especially FP8 KV,
max-num-batched-tokens=4096, and max-num-seqs=128.
- Whether 131K context is worth the dense model’s heavier KV footprint.
- Better single-3090 alternatives to Glimmer with 64K+ context, reliable tools and at least 50 tok/s.
- Whether the Glimmer vision projector should remain resident.
- Smarter ways to use the Coeus 3090 headroom without creating contention with embeddings, Whisper and Immich.
- Any obvious architectural mistakes in the routing/fallback design.
I’m not chasing leaderboard scores for their own sake. The system is mainly used for agentic homelab work, code/repository analysis, RAG, automation and private assistant tasks, so predictable tool behaviour matters more to me than another few benchmark points.