Laguna-S-2.1 support was merged into upstream llama.cpp at build b10087. Because Lemonade v11.5.0 ships with an older llama.cpp-ROCm binary (build b9752), loading the model fails out of the box. This post shows how to pin a newer backend build to run Laguna today, along with temporary workarounds until upstream package updates land.

Temporary Workaround
The manual steps below are required only because a post-b10087 llama.cpp-ROCm build has not yet reached Lemonade's stable channel, and an installer bug currently causes asset downloads to 404. Once patched, enabling Laguna will only require running lemonade backends install.

What Lemonade Is

Lemonade is an open-source, cross-platform local LLM server providing an OpenAI-compatible HTTP API. While it supports multiple hardware vendors (NVIDIA, AMD, Apple Silicon, and CPU), this guide focuses on its llama.cpp-ROCm backend for AMD devices.

Architecturally, Lemonade uses a daemon (lemond) to handle model registry management and process execution (llama-server), while the lemonade CLI acts as a lightweight client. When a model load fails, detailed error logs reside in lemond, while the CLI simply returns HTTP 500.

Model Overview & Memory Requirements

Laguna-S-2.1 is a sparse Mixture-of-Experts (MoE) model. Key GGUF architectural parameters include:

Table
Property Value
Architecture laguna
Layers 48
Experts (Total / Active per token) 256 / 10
Context Window 1,048,576
Quantization Sizes Q4_K_M (89.4 GiB), Q8_0 (119.9 GiB), F16 (219.0 GiB)

There are currently no Q2 or Q3 quantizations available. System planning must account for 89.4 GiB of weights plus ~3 GiB of KV cache at a 32k context size.

Why a Newer Build Is Required

Stock Lemonade v11.5.0 bundles llama.cpp-ROCm build b9752. Attempting to load Laguna on a stock installation triggers an immediate failure:

TEXT

llama_model_load: error loading model: unknown model architecture: 'laguna'

This error occurs before VRAM allocation because build b9752 lacks the architecture loader code introduced in upstream build b10087. To fix this, we must point Lemonade to build b10155 or newer.

Manual Enablement Steps

Why lemonade backends install Fails Today

Running lemonade backends install llamacpp:rocm currently fails with a 404 error. Lemonade constructs asset download links using a pinned ROCm version field (7.13), but recent llama.cpp-ROCm releases only publish rocm-7.14 Ubuntu assets.

Setting llamacpp.rocm_bin to an absolute path bypassing filename construction short-circuits this bug.

Step 1: Download & Extract Build b10155

Download a post-b10087 build directly from the lemonade-sdk/llama.cpp releases:

BASH
RELEASE=b10155
RELEASE_DIR=~/.local/opt/llamacpp/rocm
RELEASE_URL=https://github.com/lemonade-sdk/llama.cpp/releases/download/${RELEASE}/llama-${RELEASE}-bin-ubuntu-rocm-7.14-x64.tar.gz

mkdir -p ${RELEASE_DIR}
curl -sSL "${RELEASE_URL}" | tar -xz -C "${RELEASE_DIR}"
Tip
The extracted directory will be named llama-b10154 and report version 10154. This minor mismatch between release tag and internal build ID is expected and safe. Keep llama-server in its extracted directory so it can locate its adjacent libggml-*.so libraries via $ORIGIN.

Step 2: Verify GPU Detection

Verify the binary can run on your system:

BASH
LS=${RELEASE_DIR}/llama-${RELEASE}/llama-server
"$LS" --version
"$LS" --list-devices

If --list-devices outputs Available devices: (none), it means system ROCm libraries (libamdhip64.so.7, etc.) are missing from the standalone path.

This is not an issue under Lemonade. When lemond spawns the binary, it automatically injects its bundled runtime (TheRock) into LD_LIBRARY_PATH. To test device detection using Lemonade's environment, run:

BASH
LD_LIBRARY_PATH="$(echo ~/.cache/lemonade/bin/therock/*/lib)" "$LS" --list-devices

The above assumes that you are using Lemonade as a user service and not a system one. The cache directory used will vary depending on your installation method and platform.

System Dependencies

If you intend to run llama-server standalone outside of Lemonade, install the required system libraries. For example, on Fedora you can run the following.

BASH
sudo dnf install rocblas hipblas hip-runtime-amd

Step 3: Pin the Absolute Path

Configure Lemonade to use the extracted binary:

BASH
lemonade config set llamacpp.rocm_bin="$LS"
lemonade config | grep llamacpp.rocm_bin
Flatpak Users

If you are running Lemonade via Flatpak, you must grant filesystem access to the extraction directory before setting llamacpp.rocm_bin:

BASH
flatpak override --user \
    --filesystem=~/.local/opt/llamacpp \
    ai.lemonade_server.Lemonade

To revert to stock settings in the future:

BASH
lemonade config set llamacpp.rocm_bin=builtin

Deployment Configurations

Table
Feature 4x Radeon AI PRO R9700 Strix Halo (128 GB Unified)
Architecture gfx1201 (Discrete) gfx1151 (Integrated)
VRAM / Memory 4x 32 GB Dedicated (128 GB) 128 GB Shared (94 GiB visible)
Interconnect PCIe (No XGMI) Unified Memory Bus
Key Flags -ts 1,1,1,1 --split-mode layer --load-mode mmap --cpu-moe
Decode Speed ~36 tok/s ~2.6 – 2.9 tok/s

Multi-GPU Tensor-Split (4x R9700)

For discrete multi-GPU pools connected via PCIe without XGMI interconnects, use pipeline (layer) parallelism (--split-mode layer). This avoids the high PCIe overhead associated with row-based tensor splitting.

BASH
lemonade load Laguna-S-2.1-GGUF-Q4_K_M \
  --llamacpp rocm \
  --llamacpp-device ROCm0,ROCm1,ROCm2,ROCm3 \
  --ctx-size 32768 \
  --llamacpp-args "--flash-attn on -ts 1,1,1,1 --split-mode layer"

Key Parameters:

  • -ts 1,1,1,1: Distributes layers evenly across all 4 GPUs (~22.4 GiB VRAM per card).
  • --split-mode layer: Minimizes inter-GPU communication over PCIe.
  • --flash-attn on: Reduces KV cache memory overhead.

Strix Halo Unified Memory System

On a 128 GB Strix Halo system (e.g., Ryzen AI MAX+ PRO 395), system reserves and a 32 GiB BIOS UMA carveout can leave only ~94.05 GiB of kernel-visible memory. Because the 92.4 GiB working set (weights + KV cache) leaves negligible OS memory headroom, execution requires specific flags:

BASH
lemonade load Laguna-S-2.1-GGUF-Q4_K_M \
  --llamacpp rocm \
  --llamacpp-device ROCm0 \
  --ctx-size 32768 \
  --llamacpp-args "--load-mode mmap --cpu-moe --flash-attn on --cache-type-k q8_0 --cache-type-v q8_0"

Key Parameters:

  • --load-mode mmap: Overrides Lemonade's injected --no-mmap flag. File-backed memory mapping allows the OS kernel to manage page eviction cleanly without swapping to disk.
  • --cpu-moe: Keeps MoE expert weights in CPU page cache. On unified memory, offloading experts to GTT pins memory and starves the OS page cache, dropping performance from 2.6 tok/s down to 0.9 tok/s.
  • --cache-type-k q8_0 --cache-type-v q8_0: Quantizes KV cache to save ~1.5 GiB of memory.

Additional Considerations

  • Speculative Decoding (DFlash Draft): Draft decoding with laguna-s-2.1-DFlash-BF16.gguf is currently broken on build b10155 due to internal tensor layout mismatches (expected 76, got 69).
  • vLLM-ROCm: Quantized 4-bit ROCm execution is currently unsupported in vLLM. Stick with the llama.cpp-ROCm backend for AMD hardware.
  • Reasoning Tokens: Laguna outputs thinking chains to choices[0].message.reasoning_content. Ensure your clients set sufficient max_tokens values to avoid empty content fields during generation.