Mechanical identity rename across the knowledge base, AGENTS.md, README, the
hermes config example, and homepage services.json. No behavior change; served
aliases on the LLM endpoints change with the deploy of commit 69f87c8.
109 lines
4.4 KiB
Markdown
109 lines
4.4 KiB
Markdown
# Ling-3.0-flash Q6_K Trial on Dankclaw
|
|
|
|
> **RETIRED 2026-08-17.** The `frank-large-ling` unit is disabled under the boot policy. At this page's retirement date `frank-large` ran the Qwen3.8-27B PP head (since superseded by the STRIX deployment — see [[kingjones-strix-rocmfp4]]), not the Qwen3.6-27B config described in the (obsolete) switch-back section below.
|
|
|
|
## Status
|
|
|
|
- Service: `frank-large-ling` (systemd).
|
|
- Model: `inclusionAI/Ling-3.0-flash` Q6_K (MoE, ~118B total params).
|
|
- Runtime: llama.cpp **fork** `aetherbird/llama.cpp` branch
|
|
`bailingmoe3-support` (commit `db4480bc8`, build b10411) at
|
|
`/home/dank/llama.cpp-ling`. Stock llama.cpp cannot load the
|
|
`bailingmoe3` architecture.
|
|
- Backend: `Vulkan0` (RADV) with AMD GTT.
|
|
- Spec: `draft-mtp` `n_max 3`. The MTP block is bundled in the Ling GGUF
|
|
itself (block 42) - no separate drafter file.
|
|
- Context: 262144 total, 2 slots x 131072, batch 512 / ubatch 256.
|
|
- Measured: load ~45s, generation ~7.7 t/s (cold, 4k prompt) to ~36 t/s
|
|
(tiny cached prompt). Concurrent streams both complete.
|
|
|
|
## Why Vulkan + GTT
|
|
|
|
The Strix Halo APU has 8 x 16 GB LPDDR5 modules = **128 GB physical
|
|
shared memory**. The firmware carves ~96 GiB as dedicated iGPU VRAM; the
|
|
kernel sees the remainder (~30 GiB, `MemTotal`). GRUB adds no memory
|
|
options (`iommu=pt` only).
|
|
|
|
The ROCm runtime reports 96 GiB VRAM. **Vulkan (RADV) reports a
|
|
111.2 GiB heap** (113910 MiB) because it can also reach system memory
|
|
through the GTT. For a model near 100 GiB, Vulkan is the only backend
|
|
with room. `--list-devices` shows the heap:
|
|
|
|
```
|
|
ROCm0: AMD Radeon Graphics (98304 MiB)
|
|
Vulkan0: AMD Radeon Graphics (RADV STRIX_HALO) (113910 MiB)
|
|
```
|
|
|
|
## Memory Fit (Q6_K = 98.26 GiB)
|
|
|
|
| Item | Size |
|
|
| ---- | ---- |
|
|
| Vulkan heap (llama.cpp view) | ~111.2 GiB |
|
|
| Model Q6_K file | 98.26 GiB |
|
|
| Model + MTP + graphs in heap | ~98.7 GiB |
|
|
| Free heap after load | ~10 GiB |
|
|
|
|
Ling uses gated MLA and KDA attention. KV cache stays tiny: 256k total
|
|
context costs only ~2.5 GiB. This is why 256k context fits.
|
|
|
|
## Freeze Bug (2026-08-14) - Spec Path Deadlock
|
|
|
|
### Symptom
|
|
|
|
Under 2+ concurrent streams with speculative decoding, one stream hard-freezes
|
|
mid-generation (zero output for minutes; a deadlock, not slowness). Freeze
|
|
point varies (385-1588 tokens). Single streams never freeze.
|
|
|
|
### Isolated cause
|
|
|
|
- Not context exhaustion: `truncated = 0`, under 131072 ctx.
|
|
- Not batch (3072 and 8192 both froze) and not log verbosity (0 and 4 both).
|
|
- `parallel=2` + `draft-mtp,ngram-mod` -> freeze. SPEC OFF -> no freeze.
|
|
- Culprit: the speculative-decode / context-checkpoint path in llama-server
|
|
with multiple slots on the Vulkan backend. Known bug family: PR #24891,
|
|
#24797 (server checkpoint fixes), #25144 (MTP draft crash), plus a
|
|
ggml-vulkan hang-under-sustained-compute class.
|
|
|
|
### Resolution: SPEC OFF
|
|
|
|
`SPEC_TYPE=none`, `PARALLEL=2`. All concurrent streams complete (EOS).
|
|
Speed cost: ~10-13 t/s under contention vs ~28-32 t/s single-stream with
|
|
MTP. Fallback chain if spec-off regresses: A) `PARALLEL=1` keep MTP,
|
|
B) switch back to Qwen3.6-27B (frank-large, MTP n_max 3).
|
|
|
|
## Files
|
|
|
|
- `scripts/frank-large-ling.service` - systemd unit.
|
|
- `scripts/serve-ling-flash.sh` - serve script (fork binary, Vulkan,
|
|
draft-mtp).
|
|
- `scripts/frank-large.ling.env` - tunables.
|
|
|
|
Passwordless management is installed:
|
|
`/usr/local/sbin/frank-restart-ling.sh` and `/etc/sudoers.d/frank-ling`.
|
|
|
|
## Switch Back (obsolete)
|
|
|
|
The switch-back commands below are obsolete. At retirement time
|
|
`frank-large` ran the Qwen3.8-27B pipeline-parallel head. To restore a Ling trial,
|
|
re-enable `frank-large-ling` from the repo unit
|
|
(`scripts/frank-large-ling.service`) and serve script
|
|
(`scripts/serve-ling-flash.sh`), then start it on a non-conflicting port.
|
|
|
|
## Caveats
|
|
|
|
- The `bailingmoe3` fork validates CPU and CUDA upstream. Vulkan was
|
|
validated here (load + generation + concurrent streams) on 2026-08-14.
|
|
- The tokenizer logs `special_eos_id is not in special_eog_ids` at load.
|
|
It is a warning; generation stops correctly at EOS.
|
|
- Physical RAM pressure stays low because the model fits in the UMA
|
|
carve-out. Generation speed on this APU is below the Qwen3.6-27B MTP
|
|
config (~7.7 vs ~15-19 t/s at 4k).
|
|
- The heap is effectively full (98.7 of 111.2 GiB). Do not raise the
|
|
context much without checking `--list-devices` free MiB.
|
|
|
|
## See Also
|
|
|
|
- [[frank-large-benchmark]]
|
|
- [[DFlash DSpark Speculative Decoding]]
|
|
- [[deployment]]
|