docs(vault): the NPU lane's one door into the container, and the pin that landed
frank-dragoon's lane section: the staging dir must live inside the payload dir (the image ships no /models, so a nested :ro bind has no mountpoint to land on), the entrypoint's rejection of HALOGEN_NPU_DIR, and the fabric-clock paragraph corrected — the vendor's root host unit is installed and reports `held (manual)` as of today, so "nothing is held" is retired along with the hand-write it replaced. dankclaw-iommu-translation-off: the deferred `pp_dpm_fclk` pin is no longer deferred; the fact is owned by [[frank-dragoon]] and this page links it.
This commit is contained in:
1 parent
b19f1c49d6
commit
bda011d26f
2 files changed
+21
-11
No files matched your search
@@ -215,9 +215,10 @@ is in `render`, so a quadlet needs `AddDevice=/dev/accel/accel0` +
|
|||||||
`GroupAdd=keep-groups`. **No NPU endpoint is deployed** — stays the
|
`GroupAdd=keep-groups`. **No NPU endpoint is deployed** — stays the
|
||||||
history of the retired endpoint; what changed is only its precondition.
|
history of the retired endpoint; what changed is only its precondition.
|
||||||
|
|
||||||
**Deliberately deferred:** the `pp_dpm_fclk` pin (level 7, 2000 MHz) from the issue's
|
**The `pp_dpm_fclk` pin (level 7, 2000 MHz) went in on 2026-10-19**, with the first thing that needed it: the
|
||||||
co-run step. Pinning the fabric clock changes iGPU timing for every workload, and
|
vendor's root host unit, installed and enabled by `frank-dragoon`'s deployer while its NPU lane is named. Pinning
|
||||||
nothing co-runs on the NPU yet; it goes in when an NPU endpoint actually exists.
|
the fabric clock changes iGPU timing for every workload, which is exactly why it waited for a co-run to exist; the
|
||||||
|
law, the hold and the serve-side re-check live in [[frank-dragoon]].
|
||||||
PerfOpt still needs Linux 7.4 — `7.0.0-38-generic` has zero `perfopt` symbols and the
|
PerfOpt still needs Linux 7.4 — `7.0.0-38-generic` has zero `perfopt` symbols and the
|
||||||
26.04 archive caps at `7.0.0-38.38`.
|
26.04 archive caps at `7.0.0-38.38`.
|
||||||
|
|
||||||
|
|||||||
@@ -219,7 +219,7 @@ created it — earlier topologies in .
|
|||||||
- Deploy waits for :7770 to be free: a rootless container binds it at CREATE and exits 126, and a
|
- Deploy waits for :7770 to be free: a rootless container binds it at CREATE and exits 126, and a
|
||||||
leftover Quadlet beside the root unit guarantees the race.
|
leftover Quadlet beside the root unit guarantees the race.
|
||||||
|
|
||||||
## The NPU lane (present in the image, not enabled)
|
## The NPU lane (XDNA2, armed by one env var)
|
||||||
|
|
||||||
XDNA2 executes only vendor-precompiled AIE partition programs — that is the wall the TTS attempt died at
|
XDNA2 executes only vendor-precompiled AIE partition programs — that is the wall the TTS attempt died at
|
||||||
([[Frank TTS]]) — and flash-server ships those programs. `HALOGEN_NPU_MODELS=<names>` starts a second engine **in the
|
([[Frank TTS]]) — and flash-server ships those programs. `HALOGEN_NPU_MODELS=<names>` starts a second engine **in the
|
||||||
@@ -235,8 +235,10 @@ Embedding contract on that lane: `POST /v1/embeddings`, `model: "qwen3-embedding
|
|||||||
(`Instruct: …\nQuery:…`), `base64` accepted, and LangChain's `OpenAIEmbeddings` needs
|
(`Instruct: …\nQuery:…`), `base64` accepted, and LangChain's `OpenAIEmbeddings` needs
|
||||||
`check_embedding_ctx_length=False`.
|
`check_embedding_ctx_length=False`.
|
||||||
|
|
||||||
Four prerequisites the trio does not satisfy today, from the vendor's own host list — and this box is one of the two
|
Four host prerequisites, each refused **by name** in the serve script and mirrored in `deploy_llm_dragoon` — a
|
||||||
configurations they test (Ubuntu 26.04's XRT 2.21 `libxrt2`+`libxrt-npu2`, the kernel's `amdxdna`, `iommu=pt`):
|
precondition that surfaces as an engine crash-loop is a gate that was never written. All four are satisfied on this
|
||||||
|
box as of 2026-10-19; the endpoint still runs with the lane **off** until that day's mount fix merges, and the first
|
||||||
|
armed boot's evidence lands here with it:
|
||||||
|
|
||||||
1. `--device /dev/accel/accel0` plus `--group-add keep-groups` (the pattern ComfyUI uses for `/dev/kfd`; `dank` is
|
1. `--device /dev/accel/accel0` plus `--group-add keep-groups` (the pattern ComfyUI uses for `/dev/kfd`; `dank` is
|
||||||
already in `render`).
|
already in `render`).
|
||||||
@@ -248,11 +250,18 @@ configurations they test (Ubuntu 26.04's XRT 2.21 `libxrt2`+`libxrt-npu2`, the k
|
|||||||
engine holds the clock itself only when it runs as root with `/sys` mounted; `frank-dragoon` is a **rootless**
|
engine holds the clock itself only when it runs as root with `/sys` mounted; `frank-dragoon` is a **rootless**
|
||||||
`podman run` under `User=dank`, so the path is the vendor's root host unit (`deploy/host/halogen-fabric-clock`) —
|
`podman run` under `User=dank`, so the path is the vendor's root host unit (`deploy/host/halogen-fabric-clock`) —
|
||||||
which is exactly the `pp_dpm_fclk` level-7 pin deferred in [[dankclaw-iommu-translation-off]] with the words "it
|
which is exactly the `pp_dpm_fclk` level-7 pin deferred in [[dankclaw-iommu-translation-off]] with the words "it
|
||||||
goes in when an NPU endpoint actually exists". Held: about a watt. Unheld: the hang. Measured 2026-10-19 nothing
|
goes in when an NPU endpoint actually exists". Held: about a watt. Unheld: the hang. The deployer installs and
|
||||||
is held (fabric DPM lists 400–2000 MHz with no forced level, graphics clock sitting at 857 of 2900 MHz).
|
enables that unit whenever the lane is named, and `halogen-fabric-clock status` reports `held (manual)` here as of
|
||||||
4. `HALOGEN_DOWNLOAD=peonist-ai/halogen-qwen3.8-flash-next` on a boot with a **writable** `/models/npu` — the payload
|
2026-10-19; the serve script re-reads the same two sysfs files at every start and refuses by name if the top level
|
||||||
mount is `:ro` by law, so the programs land via a throwaway writable run or a dedicated read-write bind for that
|
is not the starred one, because a hold done by hand is a countdown to the next reboot.
|
||||||
one subdirectory; the vendor notes a read-only volume works but re-runs the conversion at every start.
|
4. The programs are staged under `$FRANK_DRAGOON_NPU_DIR`, which **must sit inside the payload dir**
|
||||||
|
(`/home/dank/models/halogen-v2-abliterated/npu`): the payload's read-only mount is the container's only handle on
|
||||||
|
`/models`. A nested bind at `/models/npu` cannot work — the image ships no `/models`, so runc has to `mkdir` the
|
||||||
|
mountpoint through a read-only parent and dies at container init (measured 2026-10-19: 52 crash-loop restarts with
|
||||||
|
chat down before the mount shape was fixed). `HALOGEN_NPU_DIR` is no escape; the shipped entrypoint rejects it by
|
||||||
|
name ("our NPU models live under `/models/npu/<id>/`"). Nothing downloads at boot — `HALOGEN_DOWNLOAD` stays
|
||||||
|
unset, so the container opens no outbound connection; `scripts/download-frank-dragoon-npu.sh` pins every file by
|
||||||
|
size and sha256 against the catalog and the payload mount carries the tree in.
|
||||||
|
|
||||||
Price: the programs and their weights sit in host RAM beside the 62.9 GiB of locked weights ("a few GB in all" for
|
Price: the programs and their weights sit in host RAM beside the 62.9 GiB of locked weights ("a few GB in all" for
|
||||||
the default set; ~1.1 GiB for `embeddinggemma-2`), and **the Flash model decodes slower while the NPU works** — same
|
the default set; ~1.1 GiB for `embeddinggemma-2`), and **the Flash model decodes slower while the NPU works** — same
|
||||||
|
|||||||
Reference in new issue
Block a user