feat(frank-tts-engine): synthesize on the gfx1151 iGPU (Vulkan), CPU stays as the rollback #34

Merged
dank merged 1 commits from feat/frank-tts-vulkan into main 2026-10-19 14:27:12 -07:00
Owner

The NPU is a dead end for this payload (report/tts-npu-spike-verdict-2026-10-19.md); the iGPU is the accelerator that exists on this box today. This flips frank-tts-engine from the CPU build of qwentts.cpp to ggml's Vulkan backend on the gfx1151 — sharing the card with frank-dragoon.

Four files, one shape

  • Containerfile.engine — -DGGML_VULKAN=ON, plus the three packages the door needs to configure (libvulkan-dev, glslc — Ubuntu's glslang-tools ships glslangValidator and NOT glslc, and find_package(Vulkan COMPONENTS glslc REQUIRED) fails without it — and spirv-headers), and libvulkan1 + mesa-vulkan-drivers (the RADV ICD) at runtime. No NVIDIA ICD on purpose: one Vulkan device in the enumeration is what makes the name Vulkan0 safe to write down.
  • tts-engine-start.sh — QWENTTS_DEVICE → --device, default Vulkan0. Set-but-empty passes no flag: that is the CPU rollback, and it is why the default is an -v test rather than := — := also fires on an empty value and would silently undo the rollback.
  • quadlet — AddDevice=/dev/dri + GroupAdd=keep-groups; the render node is deliberately not named because this host is hybrid (renderD128 = NVIDIA, renderD129 = amdgpu). /dev/kfd stays absent.
  • scripts/frank-tts-engine.env — QWENTTS_DEVICE=Vulkan0 and the device law in its header.

Evidence

  • Configure in the digest-pinned base on Dankclaw: Found Vulkan: /usr/lib/x86_64-linux-gnu/libvulkan.so (found version "1.3.275") found components: glslc → Including Vulkan backend.
  • Gate 1 (RADV GFX1151 visible to a rootless container off this same base with --device /dev/dri --group-add keep-groups) is recorded in the verdict report.
  • ./tests/run.sh: 451/451. The two CPU-only assertions now assert the Vulkan shape; a new test pins the rollback (empty device ⇒ no --device in argv).

Rollback: QWENTTS_DEVICE= (empty) in the env file, redeploy the service. No rebuild, nothing else on the box restarts.

Not in this PR: the deployment itself, and gate 2 (dragoon's TTFT with a synthesis in flight) — those run after merge, on the live pair.

Built in worktree /home/blank/.omp/wt/wt-tts-vulkan.


cwd: /home/blank/.omp/wt/wt-20261019-020309-6d1fc1f · session: 01a15366-7601-7175-bb69-c62186c3f8b5

The NPU is a dead end for this payload (`report/tts-npu-spike-verdict-2026-10-19.md`); the iGPU is the accelerator that exists on this box today. This flips `frank-tts-engine` from the CPU build of qwentts.cpp to ggml's **Vulkan** backend on the gfx1151 — sharing the card with `frank-dragoon`. **Four files, one shape** - `Containerfile.engine` — `-DGGML_VULKAN=ON`, plus the three packages the door needs to configure (`libvulkan-dev`, **`glslc`** — Ubuntu's `glslang-tools` ships `glslangValidator` and NOT `glslc`, and `find_package(Vulkan COMPONENTS glslc REQUIRED)` fails without it — and `spirv-headers`), and `libvulkan1` + `mesa-vulkan-drivers` (the RADV ICD) at runtime. No NVIDIA ICD on purpose: one Vulkan device in the enumeration is what makes the *name* `Vulkan0` safe to write down. - `tts-engine-start.sh` — `QWENTTS_DEVICE` → `--device`, default `Vulkan0`. **Set-but-empty passes no flag**: that is the CPU rollback, and it is why the default is an `-v` test rather than `:=` — `:=` also fires on an empty value and would silently undo the rollback. - quadlet — `AddDevice=/dev/dri` + `GroupAdd=keep-groups`; the render node is deliberately not named because this host is hybrid (`renderD128` = NVIDIA, `renderD129` = amdgpu). `/dev/kfd` stays absent. - `scripts/frank-tts-engine.env` — `QWENTTS_DEVICE=Vulkan0` and the device law in its header. **Evidence** - Configure in the digest-pinned base on Dankclaw: `Found Vulkan: /usr/lib/x86_64-linux-gnu/libvulkan.so (found version "1.3.275") found components: glslc` → `Including Vulkan backend`. - Gate 1 (RADV GFX1151 visible to a rootless container off this same base with `--device /dev/dri --group-add keep-groups`) is recorded in the verdict report. - `./tests/run.sh`: **451/451**. The two CPU-only assertions now assert the Vulkan shape; a new test pins the rollback (empty device ⇒ no `--device` in argv). **Rollback**: `QWENTTS_DEVICE=` (empty) in the env file, redeploy the service. No rebuild, nothing else on the box restarts. **Not in this PR**: the deployment itself, and gate 2 (dragoon's TTFT with a synthesis in flight) — those run after merge, on the live pair. Built in worktree `/home/blank/.omp/wt/wt-tts-vulkan`. --- cwd: /home/blank/.omp/wt/wt-20261019-020309-6d1fc1f · session: 01a15366-7601-7175-bb69-c62186c3f8b5
dank added 1 commit 2026-10-19 14:27:07 -07:00
The NPU path is a dead end for this payload (verdict:
report/tts-npu-spike-verdict-2026-10-19.md); the iGPU is the accelerator that
exists on this box today, and it is already shared with frank-dragoon.

- Containerfile.engine: -DGGML_VULKAN=ON, plus the three packages the door
  needs to configure — libvulkan-dev, spirv-headers, and glslc, which Ubuntu's
  glslang-tools does NOT ship (find_package(Vulkan COMPONENTS glslc REQUIRED)
  fails without it) — and libvulkan1 + mesa-vulkan-drivers (the RADV ICD) at
  runtime. No NVIDIA ICD on purpose: one Vulkan device in the enumeration is
  what makes the NAME Vulkan0 safe to write down.
- tts-engine-start.sh: QWENTTS_DEVICE -> --device, default Vulkan0. A value
  that is set but EMPTY passes no flag at all, which is the CPU rollback; that
  is why the default is written as an -v test and not with :=, because := also
  fires on an empty value and would silently undo the rollback.
- quadlet: AddDevice=/dev/dri + GroupAdd=keep-groups (a rootless container that
  drops its supplementary groups enumerates no render device). The node is not
  named: this host is hybrid, renderD128 is the NVIDIA card and renderD129 the
  amdgpu iGPU.
- env: QWENTTS_DEVICE=Vulkan0 plus the device law in the header, including the
  rollback line.
- tests: the two CPU-only assertions now assert the Vulkan shape, and a new one
  pins the rollback (empty device => no --device in argv). 451/451 green.

Measured before writing any of it: the configure in the digest-pinned base
answers "Found Vulkan: ... found components: glslc" and "Including Vulkan
backend"; gate 1 (RADV GFX1151 visible to a rootless container off this base)
is recorded in the verdict report.
dank merged commit 6248f02ca2 into main 2026-10-19 14:27:12 -07:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dank/serverAppConfigs#34