New Hardware GPU Memory & Driver Trap (AMD Strix Halo 15.5GB GTT / Intel Arc B580 / DGX Spark UMA)
Diagnose why 128GB AMD Strix Halo only sees 15.5GB VRAM on Linux, why Intel Arc B580 falls back to CPU in Docker, and why Unified Memory hosts hit OOM from Linux page cache.
Which hardware architecture is failing to allocate expected GPU memory or falling back to slow CPU execution?
uname -r && lspci | grep -iE "vga|display|3d"
Read Full Reproducible Guide →All 3 Terminal Diagnostic Probes in "New Hardware GPU Memory & Driver Trap (AMD Strix Halo 15.5GB GTT / Intel Arc B580 / DGX Spark UMA)"
Complete static reference of every read-only probe command, baseline hint, and branch transition in this decision tree.
Which hardware architecture is failing to allocate expected GPU memory or falling back to slow CPU execution?
uname -r && lspci | grep -iE "vga|display|3d"
- • AMD Ryzen AI Max+ 395 (Strix Halo 128GB) caps at ~15.5GB VRAM or runs slowly on ROCm
→ step-strix-halo-symptom - • Intel Arc B580 (12GB Battlemage) or NVIDIA Unified Memory (DGX Spark / Jetson Super) fails
→ step-arc-or-uma-symptom
Inspect `amdttm` page limits and `rocminfo`. Does the model fail to load (>15.5GB OOM), or does it load but evaluate prompts slower than Vulkan?
cat /sys/module/amdttm/parameters/pages_limit && cat /proc/cmdline
- • Models >15.5GB fail with OOM (or `amdgpu.gttsize` warning in dmesg)
→ sol-strix-halo-amdttm-96gb - • 96GB VRAM is visible, but ROCm prompt eval is 40–50% slower than Vulkan
→ sol-strix-halo-hipblaslt
Are you running Intel Arc B580 (Xe2) inside Docker/Linux, or running a 70B+ model on NVIDIA DGX Spark / Jetson Unified Memory?
ls -l /dev/dri/renderD128 && free -h
- • Intel Arc B580 (12GB) ignores XPU/Vulkan and runs at 3 tok/s on CPU
→ sol-arc-b580-dri-sycl - • NVIDIA DGX Spark / Jetson Super throws CUDA OOM despite `free -h` showing 40GB+ available
→ sol-uma-page-cache-drop
4 Verified Root Causes, Fix Configs & Commands in "New Hardware GPU Memory & Driver Trap (AMD Strix Halo 15.5GB GTT / Intel Arc B580 / DGX Spark UMA)"
Fix: Allocate 96GB UMA in BIOS or Set amdttm.pages_limit on Kernel 6.16.9+
sol-strix-halo-amdttm-96gbOn Linux kernels 6.14+, the legacy `amdgpu.gttsize` boot parameter is deprecated and ignored on Strix Halo (`gfx1151`), leaving the default TTM/GTT pool capped at ~15.5GB unless configured via BIOS UMA Frame Buffer or `amdttm.pages_limit`.
- Recommended: Enter BIOS -> Advanced -> UMA Frame Buffer Size and set it to 96GB (leaving 32GB for Linux OS on a 128GB machine) on Kernel 6.16.9+.
- Or for dynamic GTT allocation without locking static BIOS RAM: replace `amdgpu.gttsize` with `amdttm.pages_limit=25165824 amdttm.page_pool_size=25165824` (96GB in 4KB pages) in `/etc/default/grub` and reboot.
# Set 96GB (25,165,824 x 4KB pages) in GRUB for AMD Strix Halo (gfx1151): sudo sed -i 's/amdgpu.gttsize=[0-9]*//g' /etc/default/grub sudo grubby --update-kernel=ALL --args="amdttm.pages_limit=25165824 amdttm.page_pool_size=25165824" || sudo update-grub # Reboot and verify 96GB pool
[BOUNDARY]Never assign 100% of 128GB RAM to `amdttm.pages_limit`; always leave at least 24GB–32GB for the Linux kernel, Docker daemon, and mmap buffers to avoid OOM-killer freezes.
cat /sys/module/amdttm/parameters/pages_limitFix: Enable ROCBLAS_USE_HIPBLASLT=1 and Flash Attention on gfx1151
sol-strix-halo-hipblasltDefault `rocBLAS` fallback routines lack tuned matrix kernels for RDNA 3.5 (`gfx1151`), causing untuned ROCm builds to run slower than Vulkan (`RADV`). Routing GEMM calls through `hipBLASLt` on ROCm 7.2+ unlocks native `gfx1151` acceleration.
- Export `ROCBLAS_USE_HIPBLASLT=1`, `OLLAMA_FLASH_ATTENTION=1`, and `OLLAMA_KV_CACHE_TYPE=q8_0` in your Ollama systemd service or `llama-server` environment.
- For maximum single-user stability without ROCm driver dependencies, use the `llama.cpp` Vulkan (`RADV`) backend, which achieves 78+ tok/s on `Qwen3-30B-A3B-Q4_K_M`.
sudo mkdir -p /etc/systemd/system/ollama.service.d cat << 'EOF' | sudo tee /etc/systemd/system/ollama.service.d/strix-halo.conf [Service] Environment="ROCBLAS_USE_HIPBLASLT=1" Environment="OLLAMA_FLASH_ATTENTION=1" Environment="OLLAMA_KV_CACHE_TYPE=q8_0" EOF sudo systemctl daemon-reload && sudo systemctl restart ollama
[BOUNDARY]Strix Halo has ~256 GB/s LPDDR5X bandwidth: sparse MoE models (`Qwen3-30B-A3B`, 3.3B active) hit 75–88 tok/s, while dense 70B Q4 models are physically bandwidth-bound to ~6 tok/s.
systemctl show ollama --property=EnvironmentFix: Pass /dev/dri with Numerical Render GID and Enable Xe2 SYCL / Vulkan Backend
sol-arc-b580-dri-syclIntel Arc B580 (`Battlemage Xe2`) requires Linux Kernel 6.12+ (`xe` driver) and explicit `/dev/dri` + numeric `render` group GID passthrough in Docker; otherwise `llama.cpp` / IPEX-LLM silently falls back to CPU.
- Look up the numeric group ID of `/dev/dri/renderD128` via `stat -c "%g" /dev/dri/renderD128` on the host.
- Pass `--device /dev/dri:/dev/dri --group-add <RENDER_GID>` and `GGML_VK_VISIBLE_DEVICES=0` (or `ONEAPI_DEVICE_SELECTOR=level_zero:0` for IPEX-LLM SYCL) to the container.
RENDER_GID=$(stat -c "%g" /dev/dri/renderD128) docker run -d --name tinker-arc-llm \ --device /dev/dri:/dev/dri \ --group-add "$RENDER_GID" \ -e GGML_VK_VISIBLE_DEVICES=0 \ -p 127.0.0.1:11434:11434 \ ollama/ollama:0.5.7
[BOUNDARY]Intel Arc B580 has 12GB GDDR6 (456 GB/s) with a ~10.6GB safe usable ceiling; keep 8B–12B models under num_ctx=16384 with q8_0 KV cache.
docker exec tinker-arc-llm ls -l /dev/dri/renderD128Fix: Flush Linux Page Cache & Reclaim GUI Memory on Unified Memory Hosts (DGX Spark / Jetson)
sol-uma-page-cache-dropOn ARM64 Unified Memory systems (NVIDIA DGX Spark GB10 128GB & Jetson Orin Nano Super 8GB), the Linux kernel caches `.gguf` files in RAM (`buff/cache`). Unlike standard `malloc`, CUDA unified memory (`cudaMallocManaged`) cannot always evict dirty filesystem page caches fast enough during contiguous 70B+ or 4B allocations, triggering spurious CUDA OOMs.
- Drop clean filesystem page caches (`echo 3 | sudo tee /proc/sys/vm/drop_caches`) before loading a 70B–120B model on DGX Spark or a 4B model on Jetson Orin Nano Super.
- On Jetson Orin Nano Super (8GB), disable the Ubuntu GNOME desktop (`sudo systemctl set-default multi-user.target`) to permanently reclaim ~1.1GB of unified memory.
# 1. Immediately flush Linux filesystem page cache before loading large models: sync && echo 3 | sudo tee /proc/sys/vm/drop_caches # 2. Tune vm.vfs_cache_pressure so unified memory prefers GPU allocations over file cache: sudo sysctl -w vm.vfs_cache_pressure=200
[BOUNDARY]Dropping `drop_caches=3` is non-destructive (dirty pages are synced first) and typically frees 15GB–45GB on DGX Spark and 0.8GB–1.5GB on Jetson.
free -hNew Hardware GPU & Unified Memory Troubleshooting: Intel Arc B580 Docker Fallback, AMD Strix Halo 15.5GB Cap & DGX Spark Page Cache OOM
Root-cause diagnostics and one-line verification scripts for three high-frequency new-hardware failures: Intel Arc B580 (12GB Xe2) silent CPU fallback in Docker, AMD Strix Halo deprecated `amdgpu.gttsize` caps, and NVIDIA DGX Spark (GB10 128GB) unified memory page-cache OOMs.
Intel Arc B580 (12GB GDDR6 Xe2) · AMD Ryzen AI Max+ 395 (128GB UMA) · NVIDIA DGX Spark (GB10 128GB Coherent Unified Memory)
Linux Kernel 6.12+ (xe) / 6.16.9+ (amdttm) · Docker Engine 27.5 · Ollama 0.6.2 / llama.cpp Vulkan & SYCL · NVIDIA Driver 570.x (GB10 UMA)
100% Local Kernel & Runtime Diagnostics — All diagnostic probes inspect local `/sys`, `/proc`, `/dev/dri`, and container runtime namespaces offline.