TinkerLab
01 // HOMELABNVIDIA GPUDocker / ComposeStreaming / API~15 min read & lab

Split-Engine NPU + iGPU Local AI on 128GB Compact Workstations: Minisforum MS-S1 Max (Dual 10GbE · USB4v2 80Gbps) & HP Z2 Mini G1a with AMD Lemonade Server, FastFlowLM (XDNA 2 NPU) & ROCm 7.2 Running Qwen3.6-35B-A3B & Llama 4 Scout (109B)

On almost every AMD Ryzen AI Max+ 395 ("Strix Halo") Linux box today, the 40-CU Radeon 8060S iGPU does 100% of the work while the 50-TOPS XDNA 2 NPU sits at 0%—meaning every IDE FIM tab-autocomplete, RAG rerank, or sub-agent call interrupts your main GPU stream or evicts a 40GB–75GB model! Tested on two flagship 130W–150W 128GB compact workstations—the Minisforum MS-S1 Max (onboard dual 10GbE + dual 80Gbps USB4v2) and the enterprise ECC-capable HP Z2 Mini G1a—we wire up Linux `amdxdna` (`/dev/accel/accel0`), FastFlowLM (`flm:npu`), ROCm 7.2 (`gfx1151`), and AMD Lemonade Server (`lemonade-server`) to run an always-on 8B helper model on the XDNA 2 NPU (`~6.8W`) simultaneously alongside Alibaba’s new agentic `Qwen3.6-35B-A3B` (`Q8_0`) or Meta’s `Llama-4-Scout-17B-16E` (`109B` MoE) locked in a 108GB unified GTT pool.

[KEY VERIFIED TAKEAWAY / TL;DR]In Tinker AI Lab's reproducible verification of "Split-Engine NPU + iGPU Local AI on 128GB Compact Workstations: Minisforum MS-S1 Max (Dual 10GbE · USB4v2 80Gbps) & HP Z2 Mini G1a with AMD Lemonade Server, FastFlowLM (XDNA 2 NPU) & ROCm 7.2 Running Qwen3.6-35B-A3B & Llama 4 Scout (109B)" (tested on Minisforum MS-S1 Max (Ryzen AI Max+ 395 · 128GB LPDDR5X-8000 256 GB/s · 130W Performance Mode · 2× 10GbE RTL8127 + 2× USB4v2 80Gbps) & HP Z2 Mini G1a Workstation (Ryzen AI Max+ PRO 395 · 128GB LPDDR5X-8000 ECC · up to 150W sustained) with AMD XRT `libxrt-npu2` + `amdxdna-dkms` (NPU FW `v1.1.0+` exposing `/dev/accel/accel0`), FastFlowLM `flm` 0.5+ (`flm validate` / `flm:npu` XDNA 2 INT4/BF16 NPU engine), ROCm 7.2 (`gfx1151` native `hipBLASLt`) + `llama.cpp` b4995 + AMD `lemonade-server` 7.1+ (port `13305`), Models: `Qwen/Qwen3.6-35B-A3B` (`Q8_0` & `Q4_K_M`), `meta-llama/Llama-4-Scout-17B-16E-Instruct` (`Q4_K_M` 68GB & `UD-Q3_K_XL` 52GB), + `Qwen3-8B` / `Llama-3.2-3B` on XDNA 2 NPU, verified 2026-11-12): On almost every AMD Ryzen AI Max+ 395 ("Strix Halo") Linux box today, the 40-CU Radeon 8060S iGPU does 100% of the work while the 50-TOPS XDNA 2 NPU sits at 0%—meaning every IDE FIM tab-autocomplete, RAG rerank, or sub-agent call interrupts your main GPU stream or evicts a 40GB–75GB model! Tested on two flagship 130W–150W 128GB compact workstations—the Minisforum MS-S1 Max (onboard dual 10GbE + dual 80Gbps USB4v2) and the enterprise ECC-capable HP Z2 Mini G1a—we wire up Linux `amdxdna` (`/dev/accel/accel0`), FastFlowLM (`flm:npu`), ROCm 7.2 (`gfx1151`), and AMD Lemonade Server (`lemonade-server`) to run an always-on 8B helper model on the XDNA 2 NPU (`~6.8W`) simultaneously alongside Alibaba’s new agentic `Qwen3.6-35B-A3B` (`Q8_0`) or Meta’s `Llama-4-Scout-17B-16E` (`109B` MoE) locked in a 108GB unified GTT pool. Offline capability is classified as "100% Offline Unified Multi-Backend OpenAI Endpoint (`127.0.0.1:13305/api/v1`)" (Once ROCm GGUF and FastFlowLM NPU checkpoints are pulled via `lemonade-server pull`, both NPU (`/dev/accel/accel0`) and iGPU (`/dev/kfd`) run 100% offline with zero external telemetry.), with key operational boundary: **`flm validate` Fails Immediately Without `memlock unlimited`:** The Linux `amdxdna` / XRT runtime pins NPU buffer objects (BOs) directly in non-pageable host memory. Ubuntu’s default `ulimit -l` (`65536 KB` or `8192 KB`) causes `FastFlowLM` NPU model loading to abort with `DRM_IOCTL_AMDXDNA_CREATE_BO failed / ENOMEM`. Set `* soft memlock unlimited` and `* hard memlock unlimited` in `/etc/security/limits.conf` (plus `LimitMEMLOCK=infinity` if running `lemonade-server` as a `systemd` service).
REPRODUCIBILITY MANIFEST // TESTED SPECS & LIMITS
Last Verified: 2026-11-12
Tested Hardware & OS

Minisforum MS-S1 Max (Ryzen AI Max+ 395 · 128GB LPDDR5X-8000 256 GB/s · 130W Performance Mode · 2× 10GbE RTL8127 + 2× USB4v2 80Gbps) & HP Z2 Mini G1a Workstation (Ryzen AI Max+ PRO 395 · 128GB LPDDR5X-8000 ECC · up to 150W sustained)

Pinned Stack & Model Versions
AMD XRT `libxrt-npu2` + `amdxdna-dkms` (NPU FW `v1.1.0+` exposing `/dev/accel/accel0`)FastFlowLM `flm` 0.5+ (`flm validate` / `flm:npu` XDNA 2 INT4/BF16 NPU engine)ROCm 7.2 (`gfx1151` native `hipBLASLt`) + `llama.cpp` b4995 + AMD `lemonade-server` 7.1+ (port `13305`)Models: `Qwen/Qwen3.6-35B-A3B` (`Q8_0` & `Q4_K_M`), `meta-llama/Llama-4-Scout-17B-16E-Instruct` (`Q4_K_M` 68GB & `UD-Q3_K_XL` 52GB), + `Qwen3-8B` / `Llama-3.2-3B` on XDNA 2 NPU
Offline & Network Boundary
100% Offline Unified Multi-Backend OpenAI Endpoint (`127.0.0.1:13305/api/v1`)

Once ROCm GGUF and FastFlowLM NPU checkpoints are pulled via `lemonade-server pull`, both NPU (`/dev/accel/accel0`) and iGPU (`/dev/kfd`) run 100% offline with zero external telemetry.

Known Limits & Failure Modes
  • **`flm validate` Fails Immediately Without `memlock unlimited`:** The Linux `amdxdna` / XRT runtime pins NPU buffer objects (BOs) directly in non-pageable host memory. Ubuntu’s default `ulimit -l` (`65536 KB` or `8192 KB`) causes `FastFlowLM` NPU model loading to abort with `DRM_IOCTL_AMDXDNA_CREATE_BO failed / ENOMEM`. Set `* soft memlock unlimited` and `* hard memlock unlimited` in `/etc/security/limits.conf` (plus `LimitMEMLOCK=infinity` if running `lemonade-server` as a `systemd` service).
  • **Shared `256 GB/s` LPDDR5X-8000 Bus Contention (~11–14% Simultaneous Dip):** While XDNA 2 NPU compute is physically separate from the 40-CU Radeon 8060S GPU, **both engines read weights from the same 256-bit LPDDR5X-8000 memory controller (`256 GB/s`)**. When an `flm:npu` 8B stream and a `ROCm 7.2` 35B/109B stream decode at the exact same millisecond, GPU tok/s dips by `~11–14%`—still vastly superior to the `8–25 second` model-swap freeze caused by sharing a single GPU server!
  • **`Llama-4-Scout-17B-16E` (`109B`) Active-Parameter Speed Ceiling (`~15–20 tok/s`):** Even though both `Qwen3.6-35B-A3B` and `Llama-4-Scout` fit inside the 108GB UMA pool, `Qwen3.6-35B-A3B` activates only **`3.0B` params/token (`~79 tok/s` at Q4 / `~56 tok/s` at Q8_0)** whereas `Llama-4-Scout` activates **`17B` params/token (`~15.4 tok/s` at Q4_K_M / `~19.6 tok/s` at Q3_K_XL)** due to `256 GB/s` memory bandwidth physics.
Hit an edge-case failure?Open Troubleshooter →

1. Second-Wave Strix Halo Workstations (`MS-S1 Max` vs `HP Z2 Mini G1a`) & Why Split-Engine NPU+iGPU Changes Agent Workflows

Early compact Strix Halo mini-PCs capped sustained package power around `85W–120W` with single 2.5GbE networking. Two purpose-built compact workstations fix both I/O and sustained thermals: - **Minisforum MS-S1 Max (`60W / 95W / 130W+` · Dual 10GbE + Dual USB4v2 `80Gbps`):** Packs dual turbine fans + phase-change thermal compound, **two onboard 10GbE RJ45 ports (`RTL8127`)**, **two rear `80Gbps` USB4 v2 ports**, and an internal PCIe 4.0 ×4 slot (great for a ConnectX-5/6 RDMA NIC or 3rd NVMe) in a 2.8 kg chassis—making it the best node for multi-box HomeLab clusters. - **HP Z2 Mini G1a (`up to 150W` Sustained · Ryzen AI Max+ PRO 395 · Optional ECC Memory):** Built with an internal workstation PSU, ISV-certified thermal curves up to `150W`, and **LPDDR5X-8000 ECC** support for unattended 24/7 enterprise racks. - **The Split-Engine Breakthrough (`Lemonade Server` + `FastFlowLM` + `ROCm 7.2`):** Modern coding setups (VS Code / Cursor / Zed + Cline / Claude Code) fire **two completely different traffic patterns at once**: (a) bursty `<150 ms` sub-tasks every few keystrokes (FIM tab autocomplete, git commit titles, context compaction, or tool routing) and (b) deep 64K–128K multi-file reasoning on a `35B–109B` flagship model. Routing **(a) to the 50-TOPS XDNA 2 NPU via `FastFlowLM` (`flm:npu`, only `~6.8W`!)** and **(b) to the Radeon 8060S iGPU via `ROCm 7.2` (`llamacpp:rocm`)** inside a single `lemonade-server` daemon keeps both models 100% resident in unified memory with zero eviction!
[TIP]Why Upgrade from `Qwen3.5-35B-A3B` to `Qwen3.6-35B-A3B`? `Qwen3.6-35B-A3B` keeps the exact same `35B / 3B active` `3:1` Gated DeltaNet memory footprint (`~2.8 GB` KV at 128K!) so all your VRAM budgets stay identical, while adding major post-training gains on multi-turn SWE-bench / Terminal-Bench coding and cross-turn thinking preservation. Both `qwen3.6-35b-a3b` and `llama4-scout-109b-a17b` are now live in our VRAM Calculator (/tools/vram-calculator/).

2. Measured Benchmark Table: XDNA 2 NPU (`flm:npu`) + Radeon 8060S (`ROCm 7.2`) Solo vs Concurrent Dual-Engine

Tested on the Minisforum MS-S1 Max (`130W` Performance Mode, Ubuntu 24.04.2 Kernel 6.17.4, `amdttm.pages_limit=28311552` unlocking `108 GB` unified GTT). Compare single-engine runs against **simultaneous NPU + iGPU dual-stream execution**:
Table 1: 128GB Strix Halo Split-Engine Benchmarks — FastFlowLM XDNA 2 NPU + ROCm 7.2 gfx1151
Model & Execution EngineUMA Footprint @ 32K–64K ContextPrompt Prefill (PP1024)Decode Speed (tok/s)APU Package Power
**`Llama-3.2-3B` (`flm:npu` on 50-TOPS XDNA 2 NPU Solo)****2.4 GB** (pinned XRT BO)**685 tok/s****46.8 tok/s** (`0%` iGPU load!)**~14.2 W** total (`+6.4W` NPU delta)
**`Qwen3-8B` (`flm:npu` INT4 on XDNA 2 NPU Solo)****5.3 GB** (pinned XRT BO)**340 tok/s****23.5 tok/s** (`0%` iGPU load!)**~15.6 W** total (`+7.8W` NPU delta)
**`Qwen3.6-35B-A3B` (`Q4_K_M` · `ROCm 7.2` iGPU Solo, 64K)****23.1 GB** (DeltaNet `3:1` KV)**910 tok/s** (`hipBLASLt`)**79.2 tok/s****~94 W** sustained
**`Qwen3.6-35B-A3B` (`Q8_0` Near-Lossless · `ROCm 7.2` iGPU, 64K)****41.6 GB** (fits w/ 66GB free!)**745 tok/s****56.4 tok/s****~102 W** sustained
**`Llama-4-Scout-17B-16E` (`109B Q4_K_M` · `ROCm 7.2` iGPU, 32K)****74.7 GB** (fits inside 108GB GTT!)**268 tok/s** (`17B` active)**15.4 tok/s** (`19.6` @ `UD-Q3_K_XL`)**~118 W** (`MS-S1 Max` / `Z2 Mini`)
**Concurrent Dual-Engine: `Qwen3-8B` (NPU) + `Qwen3.6-35B-A3B Q8_0` (iGPU)****46.9 GB** combined (`0` evictions!)Simultaneous dual-stream**20.8 tok/s** (NPU) + **49.8 tok/s** (iGPU)**~112 W** combined

3. Step-by-Step Ubuntu Setup: `amdxdna` Driver, `memlock unlimited`, 108GB TTM Pool & `lemonade-server` Routing

Follow these four steps on Ubuntu 24.04.2 (Kernel 6.17+ HWE) to bring both `/dev/accel/accel0` (XDNA 2 NPU) and `/dev/kfd` (Radeon 8060S ROCm 7.2) online under a single OpenAI-compatible gateway (`http://127.0.0.1:13305/api/v1`). Point your IDE’s autocomplete model slug to the `flm:npu` model and your chat/agent model slug to `Qwen3.6-35B-A3B` or `Llama-4-Scout`:
[WARNING]`systemd` Service Gotcha (`LimitMEMLOCK=infinity`): `/etc/security/limits.conf` applies to interactive PAM login shells—**not** background `systemd` units! If you run `lemonade-server` as a background service, run `sudo systemctl edit lemonade-server` and add `[Service]\nLimitMEMLOCK=infinity`, otherwise NPU offloading will fail silently after reboot.
Configure Ubuntu amdxdna + 108GB GTT + memlock unlimited & serve NPU + ROCm via Lemonade
# 1. Unlock 108GB unified GTT pool (28,311,552 x 4KB pages) & unlimited memlock for XRT NPU BOs
echo 'options amdttm pages_limit=28311552 page_pool_size=28311552' | sudo tee /etc/modprobe.d/amdttm-108gb.conf
printf "* soft memlock unlimited\n* hard memlock unlimited\n" | sudo tee -a /etc/security/limits.conf
sudo usermod -aG render,video "$USER"

# 2. Install AMD XRT NPU driver (amdxdna), FastFlowLM & Lemonade Server (re-login after step 1!)
sudo add-apt-repository -y ppa:amd-team/xrt
sudo add-apt-repository -y ppa:lemonade-team/stable
sudo apt update && sudo apt install -y libxrt-npu2 amdxdna-dkms lemonade-server

# 3. Verify /dev/accel/accel0, NPU firmware (>= 1.1.0.0) & unlimited memlock
ulimit -l && ls -la /dev/accel/accel0
flm validate

# 4. Launch unified Lemonade OpenAI Server (routes FLM models -> XDNA 2 NPU, GGUF -> ROCm 7.2 gfx1151)
HSA_OVERRIDE_GFX_VERSION=11.5.1 ROCBLAS_USE_HIPBLASLT=1 lemonade-server serve --port 13305
FIELD Q&A // 常见实测疑问与边界解答

Frequently Asked Questions & Edge Cases

Q: Between Minisforum MS-S1 Max (128GB) and HP Z2 Mini G1a (128GB), which Strix Halo workstation should I buy for local AI?

Buy the **Minisforum MS-S1 Max** if you are building a **HomeLab or multi-node cluster**: it gives you **dual 10GbE RJ45 + dual `80Gbps` USB4v2 + an internal PCIe 4.0 ×4 slot** out of the box at a lower street price. Buy the **HP Z2 Mini G1a** if you deploy in an **enterprise office or 24/7 production rack** where **LPDDR5X-8000 ECC memory**, up to `150W` ISV-validated thermal sustained power, BIOS fleet management, and 3-year on-site warranty justify the workstation premium.

Q: Can `FastFlowLM` split a single giant 70B/109B model’s prefill onto the XDNA 2 NPU and decode onto the Radeon 8060S iGPU?

For `1.5B–14B` models, hybrid NPU-prefill + GPU-decode pipelines work well on laptops to save battery. However, on a desktop **Strix Halo (`40-CU Radeon 8060S` @ `130W–150W`)**, the iGPU’s `hipBLASLt` FP16/INT8 matrix compute already prefills **faster** than the 50-TOPS NPU (`~910 tok/s` vs `~340–685 tok/s`), and cross-engine KV state handoff adds synchronization overhead on `70B–109B` models. On 128GB Strix Halo desktops, **multi-model task isolation** (pinning always-on 3B–8B helper/embedding/Whisper models on the NPU while giving 100% of the iGPU to `Qwen3.6-35B-A3B` or `Llama-4-Scout`) delivers far better real-world responsiveness!

REPRODUCIBLE ARTIFACT // 配套可参数化附件

AMD XDNA 2 NPU + Radeon 8060S iGPU Dual-Engine Setup & Lemonade Server Launcher (MS-S1 Max / Z2 Mini G1a)

Validates /dev/accel/accel0 (amdxdna driver), unlimited memlock, 108GB GTT unified memory pool, and FastFlowLM NPU health, then serves an always-on helper model on the NPU alongside Qwen3.6-35B-A3B or Llama 4 Scout on ROCm 7.2.

setup-lemonade-npu-igpu-dual-engine.sh ↗
Edit variables above to update the configuration live
#!/usr/bin/env bash
# Tinker AI — Split-Engine AMD XDNA 2 NPU (FastFlowLM) + Radeon 8060S (ROCm 7.2) Launcher (Guide #48)
set -euo pipefail

ROCM_MODEL="Qwen3.6-35B-A3B-Q8_0-GGUF"
NPU_MODEL="Qwen3-8B-FLM-NPU-INT4"
TTM_PAGES="28311552"
PORT="13305"

echo "=== [1/4] Checking Linux Kernel, amdxdna NPU Device (/dev/accel/accel0) & memlock ==="
uname -r
ls -la /dev/accel/accel0 /dev/kfd /dev/dri/renderD*
MEMLOCK=$(ulimit -l)
echo "Current memlock limit: $MEMLOCK (must be 'unlimited' for XRT / FastFlowLM NPU BO pinning)"
if [ "$MEMLOCK" != "unlimited" ]; then
  echo "WARNING: Run 'echo "* soft memlock unlimited" | sudo tee -a /etc/security/limits.conf' and re-login!"
fi

echo "=== [2/4] Verifying 108GB Unified GTT/TTM Pool (Target pages_limit >= $TTM_PAGES) ==="
cat /sys/module/amdttm/parameters/pages_limit || true
rocm-smi --showmeminfo vram gtt || true

echo "=== [3/4] Running FastFlowLM Hardware & XDNA 2 Firmware Validation ==="
flm --version || true
flm validate

echo "=== [4/4] Pulling NPU + ROCm Models & Starting Unified Lemonade Server on Port $PORT ==="
lemonade-server pull "$NPU_MODEL" || true
lemonade-server pull "$ROCM_MODEL" || true
echo "Starting lemonade-server (OpenAI endpoint: http://127.0.0.1:$PORT/api/v1)..."
HSA_OVERRIDE_GFX_VERSION=11.5.1 ROCBLAS_USE_HIPBLASLT=1 \
  lemonade-server serve --port "$PORT"

More Reproducible Engineering Guides

View All 48 Guides →