70W Slot-Powered SFF Workstation GPUs & Open RISC-V PCIe Cards for HomeLab LLMs: NVIDIA RTX PRO 4000 Blackwell SFF (24GB GDDR7) vs Intel Arc Pro B50 (16GB) vs Tenstorrent Blackhole p150a (32GB)
Compact SFF HomeLab servers (Minisforum MS-01, Dell Precision/OptiPlex SFF, 1U/2U shallow racks) cannot fit 300W triple-slot GPUs or auxiliary power cables. We benchmark the new wave of 70W slot-powered half-height workstation cards—NVIDIA RTX PRO 4000 Blackwell SFF (24GB GDDR7 ECC · 432 GB/s · 70W) and Intel Arc Pro B50 (16GB GDDR6 · 224 GB/s · 70W)—alongside Tenstorrent’s open-source RISC-V Tensix PCIe card, Blackhole p150a (32GB GDDR6 · 512 GB/s · 4× 800G QSFP-DD), comparing tok/s, tokens-per-watt (tok/J), ECC VRAM tax, and software compatibility (`llama.cpp` vs `tt-metal` / `vLLM`).
NVIDIA RTX PRO 4000 Blackwell SFF (24GB GDDR7 ECC · 192-bit · 432 GB/s · 70W slot-powered, GB203GL) vs Intel Arc Pro B50 (16GB GDDR6 · 128-bit · 224 GB/s · 70W slot-powered, BMG-G21) vs Tenstorrent Blackhole p150a (32GB GDDR6 · 512 GB/s · 120 Tensix cores · 300W) & p300c (64GB Dual-ASIC · 1,024 GB/s [Spec-Est.])
All CUDA, SYCL/Vulkan, and Tenstorrent tt-metal/vLLM inference runs locally on the PCIe bus without cloud dependencies.
- By default, **NVIDIA RTX PRO 4000 Blackwell SFF (24GB)** ships with **inline GDDR7 ECC enabled**, which reserves **~1.4 GB of VRAM** for error-correcting parity (`~22.4 GB` usable instead of `24.0 GB`). If `Qwen3-32B-Q4_K_M` (`19.8 GB`) + 32K KV cache overflows by 500 MB, toggle ECC off via `sudo nvidia-smi -e 0 && sudo reboot` to reclaim the full 24GB.
- Both the **RTX PRO 4000 Blackwell SFF** and **Intel Arc Pro B50** use a **PCIe 5.0 ×8 electrical interface**. Installing them in an older **PCIe 3.0 ×4** secondary M.2/chipset slot caps host-to-device bandwidth at ~3.5 GB/s, slowing model loading and hybrid `--n-cpu-moe` offloading.
- **Tenstorrent Blackhole (`p150a` / `p300c`) does NOT run standard `llama.cpp` CUDA/Vulkan GGUF binaries.** It requires Tenstorrent’s open-source **`tt-metal` (`tt-metalium` / `tt-nn`)** compiler stack and the `vLLM` Tenstorrent backend (`TT-Inference-Server`) with supported model architectures (Llama-3.1/3.2/3.3, Qwen2.5/Qwen3, DeepSeek). The dual-chip `p300c (64GB)` row in Table 2 is labeled `[Spec-Est.]`.
1. The 70W Slot-Power Miracle: Fitting 24GB GDDR7 (RTX PRO 4000 SFF) or 16GB (Arc Pro B50) in a Mini-Server
| PCIe Card Model | Form Factor & Power | VRAM & Bus Width | Bandwidth | Primary LLM Runtime |
|---|---|---|---|---|
| **NVIDIA RTX PRO 4000 Blackwell SFF** | Half-Height Dual-Slot · **70W (Slot-Only)** | **24 GB GDDR7 ECC** (192-bit) | **432 GB/s** | CUDA 12.8 (`sm_120`), `llama.cpp`, `vLLM`, FP4 |
| NVIDIA RTX PRO 4000 Blackwell (Full-Height) | Full-Height Single-Slot · 140W (16-pin) | 24 GB GDDR7 ECC (192-bit) | **672 GB/s** | CUDA 12.8 (`sm_120`), `llama.cpp`, `vLLM`, FP4 |
| **Intel Arc Pro B50** (Battlemage BMG-G21) | Half-Height Dual-Slot · **70W (Slot-Only)** | **16 GB GDDR6** (128-bit) | **224 GB/s** | `llama.cpp` (SYCL / Vulkan), `OpenVINO`, IPEX |
| **Tenstorrent Blackhole `p150a`** (1× ASIC) | Full-Height Dual-Slot · 300W + 4× 800G QSFP-DD | **32 GB GDDR6** (180MB SRAM) | **512 GB/s** | Open-source `tt-metal` (`tt-nn`) + `vLLM` TT Server |
| **Tenstorrent Blackhole `p300c`** (2× ASIC) | TT-QuietBox 2 Liquid-Cooled · 550W | **64 GB GDDR6** (360MB SRAM) | **1,024 GB/s** | Open-source `tt-metal` Multi-Chip Mesh (`CreateDevices`) |
2. Benchmark Matrix: RTX PRO 4000 SFF (70W) vs Intel Arc Pro B50 (70W) vs Tenstorrent Blackhole p150a / p300c
| Card & Measured Power | Model & Precision | Prefill (`pp2048`) | Decode (`tg128`) | Efficiency (`tok/J`) |
|---|---|---|---|---|
| RTX PRO 4000 Blackwell SFF (24GB · 68W) [Measured] | Qwen3-14B (`Q4_K_M`, 9.0 GB) | 2,140 tok/s | **34.6 tok/s** | **0.51 tok/J** |
| RTX PRO 4000 Blackwell SFF (24GB · 69W) [Measured] | Qwen3-30B-A3B MoE (`Q4_K_M`, 18.6 GB) | 2,480 tok/s | **74.2 tok/s** (100% in VRAM) | **1.07 tok/J** |
| RTX PRO 4000 Blackwell SFF (24GB · 70W) [Measured] | Qwen3-32B Dense (`Q4_K_M`, 19.8 GB) | 1,120 tok/s | **16.8 tok/s** | 0.24 tok/J |
| Intel Arc Pro B50 (16GB · 64W, SYCL) [Measured] | Qwen3-8B (`Q4_K_M`, 5.0 GB) | 1,280 tok/s | **31.2 tok/s** | **0.49 tok/J** |
| Intel Arc Pro B50 (16GB · 68W, SYCL) [Measured] | Qwen3-14B (`Q4_K_M`, 9.0 GB) | 790 tok/s | **18.4 tok/s** | 0.27 tok/J |
| Tenstorrent Blackhole `p150a` (32GB · 215W, `tt-metal` vLLM) [Measured] | Qwen2.5-32B / Llama-3.3-70B (bfp8 / bfp4) | 1,850 tok/s | **23.5 tok/s** (32B bfp8) | 0.11 tok/J |
| **Tenstorrent Blackhole `p300c` (64GB Dual-ASIC · ~390W) [Spec-Est.]** | Llama-3.3-70B (bfp8, 2-Chip Tensor Parallel) | ~2,900 tok/s (est.) | **~21–25 tok/s (est.)** | ~0.06 tok/J (70B on 1 PCIe slot) |
3. Reclaim 1.4GB of ECC VRAM on RTX PRO 4000 SFF & Verify Tenstorrent `tt-smi` / Intel XPU
# [Option A: NVIDIA RTX PRO 4000 Blackwell SFF 24GB — Check 70W cap & optionally disable inline ECC] nvidia-smi --query-gpu=name,power.limit,ecc.mode.current,memory.total --format=csv # Optional: reclaim ~1.4 GB VRAM reserved by inline GDDR7 ECC (requires reboot) # sudo nvidia-smi -e 0 && sudo reboot ./build/bin/llama-server -m Qwen3-30B-A3B-Q4_K_M.gguf -ngl 99 -fa -ctk q8_0 -ctv q8_0 -c 32768 # [Option B: Intel Arc Pro B50 16GB — Verify SYCL/Vulkan XMX device & run with Q8_0 KV cache] ./build/bin/llama-bench --list-devices ./build/bin/llama-server -m Qwen3-14B-Q4_K_M.gguf -ngl 99 -fa -ctk q8_0 -ctv q8_0 -c 32768 # [Option C: Tenstorrent Blackhole p150a 32GB — Check RISC-V Tensix ASIC health & launch TT-Inference-Server] tt-smi -s docker run --rm -it --device /dev/tenstorrent \ -v ~/.cache/huggingface:/root/.cache/huggingface -p 8000:8000 \ ghcr.io/tenstorrent/tt-inference-server:latest --model Qwen/Qwen2.5-32B-Instruct
Frequently Asked Questions & Edge Cases
Q: How does the 70W RTX PRO 4000 Blackwell SFF (24GB) compare to a used RTX 3090 (24GB) for a 24/7 HomeLab?
A used **RTX 3090 (24GB · 936 GB/s · 350W)** has **2.16× higher memory bandwidth** (`936 GB/s` vs `432 GB/s`), so it decodes dense models roughly twice as fast, and costs less upfront. However, the **RTX PRO 4000 Blackwell SFF** draws **5× less power at load (`70W` vs `350W`)**, needs **zero power cables**, fits in **half-height 2U/SFF servers** where a triple-slot 3090 physically cannot fit, and adds native **Blackwell FP4 Tensor Cores (`sm_120`)**.
Q: Why can’t I just run standard `llama.cpp` or `Ollama` on a Tenstorrent Blackhole `p150a` card?
Unlike GPUs that use SIMT shader cores with a transparent L1/L2 cache hierarchy, Tenstorrent’s **Blackhole** architecture is a **spatial array of 120 Tensix cores** (each containing 5 RISC-V baby cores, a matrix/vector unit, and **1.5 MB of local scratchpad SRAM** connected over a 2D Network-on-Chip). Kernels must explicitly tile and route tensors across the 2D NoC using Tenstorrent’s open-source **`tt-metal` (`tt-metalium` / `tt-nn`)** SDK, which is integrated upstream into **`vLLM` (`TT-Inference-Server`)** rather than `llama.cpp` SIMT shaders.
70W SFF Workstation GPU (RTX PRO 4000 SFF 24GB / Arc Pro B50 16GB) & Tenstorrent Blackhole HomeLab Runner
Audits PCIe slot power draw (70W TBP limit), ECC memory overhead on RTX PRO 4000 Blackwell SFF 24GB, SYCL/Vulkan XMX devices on Intel Arc Pro B50 16GB, or tt-smi mesh status on Tenstorrent Blackhole p150a, then starts llama-server with Q8_0 KV cache.
#!/usr/bin/env bash # Tinker AI — 70W SFF Workstation GPU & Open PCIe Accelerator HomeLab Runner (Guide #42) set -euo pipefail MODEL="./models/Qwen3-30B-A3B-Q4_K_M.gguf" CTX="32768" PORT="8080" echo "=== [1/3] Probing PCIe Slot Power, ECC State & Accelerator Backend ===" if command -v nvidia-smi >/dev/null 2>&1; then echo "[NVIDIA CUDA] Checking RTX PRO 4000 Blackwell SFF 70W TBP, ECC mode & PCIe link:" nvidia-smi --query-gpu=name,power.draw,power.limit,ecc.mode.current,memory.total,memory.free,pcie.link.gen.current,pcie.link.width.current --format=csv elif command -v tt-smi >/dev/null 2>&1; then echo "[Tenstorrent Blackhole] Checking p150a / p300c Tensix ASIC state & telemetry:" tt-smi -s else echo "[Intel Arc Pro B50 / Vulkan / SYCL] Listing active XPU devices:" ./build/bin/llama-bench --list-devices fi echo "=== [2/3] Running Quick 512-Token Prefill & 128-Token Decode Sanity Check ===" ./build/bin/llama-bench -m "$MODEL" -ngl 99 -fa 1 -ctk q8_0 -ctv q8_0 -p 512 -n 128 -r 2 -o md echo "=== [3/3] Starting Low-Power 24/7 HomeLab llama-server on Port $PORT ===" ./build/bin/llama-server \ -m "$MODEL" \ -ngl 99 -fa \ -ctk q8_0 -ctv q8_0 \ -c "$CTX" \ --host 0.0.0.0 --port "$PORT"