Profile Qwen3-TTS hybrid Radeon and CPU route

This commit is contained in:
tzhouam committed 2026-09-23 19:59:04 +08:00
1 parent 54c086acae
commit 4fee1dbe39
54 files changed
+5323 -6

No files matched your search

@@ -0,0 +1,190 @@
#!/usr/bin/env python3
"""Probe whole-model Qwen3-TTS on a named native Windows DirectML adapter.
This is a standalone feasibility run; it does not claim Omni integration or
that every operator executes on the target adapter.
"""
from __future__ import annotations
import argparse
import hashlib
import json
import os
import platform
import sys
import time
import traceback
from pathlib import Path
def _sha256(path: Path) -> str:
digest = hashlib.sha256()
with path.open("rb") as stream:
for chunk in iter(lambda: stream.read(8 * 1024 * 1024), b""):
digest.update(chunk)
return digest.hexdigest()
def main() -> None:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--model-dir", type=Path, required=True)
parser.add_argument("--output-wav", type=Path, required=True)
parser.add_argument("--output-report", type=Path, required=True)
parser.add_argument("--device-index", type=int, default=1)
parser.add_argument("--expected-device-name", default="AMD Radeon(TM) 890M")
parser.add_argument("--dtype", choices=("float16", "bfloat16", "float32"), default="float16")
parser.add_argument("--text", default="Hello from the local computer.")
parser.add_argument("--speaker", default="Ryan")
parser.add_argument("--max-new-tokens", type=int, default=64)
parser.add_argument("--repetition-penalty", type=float)
parser.add_argument("--trace-cat", action="store_true")
parser.add_argument("--workaround-empty-int64-cat", action="store_true")
parser.add_argument("--subtalker-greedy", action="store_true")
parser.add_argument("--threads", type=int, default=8)
args = parser.parse_args()
if args.device_index < 0 or args.threads <= 0 or args.max_new_tokens <= 0:
parser.error("device index must be nonnegative; threads and token limit positive")
os.environ["HF_HUB_OFFLINE"] = "1"
os.environ["TRANSFORMERS_OFFLINE"] = "1"
import numpy as np
import soundfile as sf
import torch
import torch_directml
import transformers
from qwen_tts import Qwen3TTSModel
torch.set_num_threads(args.threads)
names = [torch_directml.device_name(i).rstrip("\x00") for i in range(torch_directml.device_count())]
if args.device_index >= len(names) or args.expected_device_name not in names[args.device_index]:
raise RuntimeError(f"requested DirectML adapter is absent: index={args.device_index}, adapters={names}")
device = torch_directml.device(args.device_index)
report = {
"scope": "standalone real-weight Qwen3-TTS DirectML feasibility; no Omni, streaming, or all-operator placement claim",
"platform": platform.platform(),
"python": platform.python_version(),
"torch": torch.__version__,
"torch_directml": getattr(torch_directml, "__version__", "unknown"),
"transformers": transformers.__version__,
"adapters": names,
"requested_index": args.device_index,
"target_device": str(device),
"model_dir": str(args.model_dir.resolve()),
"talker_sha256": _sha256(args.model_dir / "model.safetensors"),
"speech_tokenizer_sha256": _sha256(args.model_dir / "speech_tokenizer" / "model.safetensors"),
"dtype": args.dtype,
"attention": "sdpa",
"threads": args.threads,
"text": args.text,
"speaker": args.speaker,
"max_new_tokens": args.max_new_tokens,
"repetition_penalty_override": args.repetition_penalty,
"workaround_empty_int64_cat": args.workaround_empty_int64_cat,
"subtalker_greedy": args.subtalker_greedy,
"seed": 42,
"status": "started",
}
try:
started = time.perf_counter()
model = Qwen3TTSModel.from_pretrained(
str(args.model_dir.resolve()),
device_map="cpu",
dtype=getattr(torch, args.dtype),
attn_implementation="sdpa",
local_files_only=True,
)
report["cpu_load_s"] = time.perf_counter() - started
report["phase"] = "move_to_directml"
started = time.perf_counter()
model.model.to(device)
report["device_move_s"] = time.perf_counter() - started
report["model_devices"] = sorted({str(parameter.device) for parameter in model.model.parameters()})
if report["model_devices"] != [str(device)]:
raise RuntimeError(f"model parameters not wholly on DirectML target: {report['model_devices']}")
# Qwen's wrapper captures its device at construction, before this move.
model.device = device
report["phase"] = "generate"
if args.trace_cat or args.workaround_empty_int64_cat:
original_cat = torch.cat
def traced_cat(tensors, *cat_args, **cat_kwargs):
tensors = tuple(tensors)
dim = cat_kwargs.get("dim", cat_args[0] if cat_args else 0)
axis = dim % tensors[0].ndim if tensors else dim
if (
args.workaround_empty_int64_cat
and len(tensors) == 2
and tensors[0].device == device
and tensors[1].device == device
and tensors[0].dtype == torch.int64
and tensors[1].dtype == torch.int64
and tensors[0].ndim == tensors[1].ndim
and tensors[0].numel() == 0
and tensors[0].shape[axis] == 0
and all(tensors[0].shape[i] == tensors[1].shape[i] for i in range(tensors[0].ndim) if i != axis)
):
print("EMPTY_INT64_CAT_IDENTITY", file=sys.stderr, flush=True)
return tensors[1].clone()
try:
return original_cat(tensors, *cat_args, **cat_kwargs)
except Exception:
print(
"CAT_FAILURE " + repr([(str(x.device), str(x.dtype), tuple(x.shape)) for x in tensors]),
file=sys.stderr,
flush=True,
)
raise
torch.cat = traced_cat
torch.manual_seed(42)
started = time.perf_counter()
generation_overrides = {}
if args.repetition_penalty is not None:
generation_overrides["repetition_penalty"] = args.repetition_penalty
if args.subtalker_greedy:
generation_overrides["subtalker_dosample"] = False
wavs, sample_rate = model.generate_custom_voice(
text=args.text,
language="English",
speaker=args.speaker,
max_new_tokens=args.max_new_tokens,
do_sample=True,
non_streaming_mode=True,
**generation_overrides,
)
report["request_s"] = time.perf_counter() - started
if len(wavs) != 1 or sample_rate <= 0:
raise RuntimeError("expected one waveform at a valid sample rate")
wav = np.asarray(wavs[0], dtype=np.float32).reshape(-1)
if not wav.size or not np.isfinite(wav).all():
raise RuntimeError("waveform is empty or non-finite")
report["rms"] = float(np.sqrt(np.mean(wav.astype(np.float64) ** 2)))
report["peak_abs"] = float(np.max(np.abs(wav)))
report["nonzero_samples"] = int(np.count_nonzero(wav))
if report["rms"] <= 1e-5:
raise RuntimeError("waveform is effectively silent")
args.output_wav.parent.mkdir(parents=True, exist_ok=True)
sf.write(args.output_wav, wav, sample_rate, subtype="PCM_16")
report.update(
status="passed",
phase="complete",
sample_rate=sample_rate,
samples=int(wav.size),
duration_s=float(wav.size / sample_rate),
wav_sha256=_sha256(args.output_wav),
)
except BaseException as exc:
report.update(status="failed", error_type=type(exc).__name__, error=str(exc), traceback=traceback.format_exc())
if isinstance(exc, UnicodeDecodeError):
report["backend_error_bytes_hex"] = exc.object.hex()
report["backend_error_cp936"] = exc.object.decode("cp936", errors="replace")
raise
finally:
args.output_report.parent.mkdir(parents=True, exist_ok=True)
args.output_report.write_text(json.dumps(report, indent=2) + "\n", encoding="utf-8")
print(json.dumps(report, indent=2))
if __name__ == "__main__":
main()
@@ -32,6 +32,7 @@ def main() -> None:
parser.add_argument("--output-report", type=Path, required=True)
parser.add_argument("--text", default="Hello from the local computer.")
parser.add_argument("--speaker", default="Ryan")
parser.add_argument("--dtype", choices=("float16", "bfloat16", "float32"), default="bfloat16")
parser.add_argument("--max-new-tokens", type=int, default=64)
parser.add_argument("--threads", type=int, default=8)
parser.add_argument("--warmups", type=int, default=0)
@@ -57,7 +58,7 @@ def main() -> None:
model = Qwen3TTSModel.from_pretrained(
str(args.model_dir.resolve()),
device_map="cpu",
dtype=torch.bfloat16,
dtype=getattr(torch, args.dtype),
attn_implementation="sdpa",
local_files_only=True,
)
@@ -116,7 +117,7 @@ def main() -> None:
"talker_sha256": _sha256(checkpoint),
"speech_tokenizer_sha256": _sha256(tokenizer_weights),
"model_devices": model_devices,
"dtype": "bfloat16",
"dtype": args.dtype,
"attention": "sdpa",
"threads": args.threads,
"text": args.text,
@@ -0,0 +1,140 @@
#!/usr/bin/env python3
"""Profile complete serial text-to-WAV requests against a resident CrispASR server.
The caller must separately retain and inspect the server's actual placement log.
HTTP success and a nonzero WAV do not establish speech quality.
"""
from __future__ import annotations
import argparse
import array
import hashlib
import io
import json
import math
import sys
import threading
import time
import urllib.request
import wave
from pathlib import Path
def _rank(values: list[float], fraction: float) -> float:
ordered = sorted(values)
return ordered[math.ceil(fraction * len(ordered)) - 1]
def main() -> None:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--endpoint", default="http://127.0.0.1:18175/v1/audio/speech")
parser.add_argument("--text", default="Hello from the local computer.")
parser.add_argument("--seed", type=int, default=42)
parser.add_argument("--warmups", type=int, default=1)
parser.add_argument("--repeats", type=int, default=20)
parser.add_argument("--server-pid", type=int)
parser.add_argument("--output-report", type=Path, required=True)
parser.add_argument("--output-wav", type=Path, required=True)
args = parser.parse_args()
if args.warmups < 0 or args.repeats <= 0:
parser.error("warmups must be nonnegative and repeats positive")
import psutil
process = psutil.Process(args.server_pid) if args.server_pid else None
samples: list[dict] = []
done = threading.Event()
def sample_memory() -> None:
if process is None:
return
while not done.is_set():
try:
memory = process.memory_full_info()
samples.append({
"unix": time.time(),
"working_set_bytes": memory.rss,
"private_bytes": getattr(memory, "private", None),
"host_available_bytes": psutil.virtual_memory().available,
})
except psutil.Error:
break
done.wait(0.25)
sampler = threading.Thread(target=sample_memory, daemon=True)
sampler.start()
payload = json.dumps({"input": args.text, "response_format": "wav", "seed": args.seed}).encode()
def request_one(*, save_wav: bool) -> dict:
request = urllib.request.Request(
args.endpoint, data=payload, headers={"Content-Type": "application/json"}, method="POST"
)
started = time.perf_counter()
with urllib.request.urlopen(request, timeout=180) as response:
status = response.status
wav_bytes = response.read()
wall_s = time.perf_counter() - started
if status != 200:
raise RuntimeError(f"speech endpoint returned HTTP {status}")
with wave.open(io.BytesIO(wav_bytes), "rb") as audio:
channels, width, sample_rate, frames = (
audio.getnchannels(), audio.getsampwidth(), audio.getframerate(), audio.getnframes()
)
pcm = audio.readframes(frames)
if channels != 1 or width != 2 or sample_rate <= 0 or not frames:
raise RuntimeError("expected nonempty 16-bit mono WAV")
values = array.array("h")
values.frombytes(pcm)
if sys.byteorder != "little":
values.byteswap()
rms = math.sqrt(sum(value * value for value in values) / len(values)) / 32768
if rms <= 1e-5:
raise RuntimeError("speech WAV is effectively silent")
if save_wav:
args.output_wav.parent.mkdir(parents=True, exist_ok=True)
args.output_wav.write_bytes(wav_bytes)
return {
"wall_s": wall_s,
"sample_rate": sample_rate,
"frames": frames,
"duration_s": frames / sample_rate,
"rms_pcm16_normalized": rms,
"pcm_sha256": hashlib.sha256(pcm).hexdigest(),
"sha256": hashlib.sha256(wav_bytes).hexdigest(),
"bytes": len(wav_bytes),
}
try:
warmups = [request_one(save_wav=False) for _ in range(args.warmups)]
measured = [request_one(save_wav=i == 0) for i in range(args.repeats)]
finally:
done.set()
sampler.join(timeout=2)
walls = [row["wall_s"] for row in measured]
report = {
"scope": "complete serial HTTP text-to-WAV requests in one resident server; speech quality and placement assessed separately",
"endpoint": args.endpoint,
"text": args.text,
"seed": args.seed,
"concurrency": 1,
"warmups": warmups,
"measured": measured,
"nearest_rank_p50_wall_s": _rank(walls, 0.5),
"nearest_rank_p95_wall_s": _rank(walls, 0.95),
"all_same_wav_sha256": len({row["sha256"] for row in measured}) == 1,
"all_same_pcm_sha256": len({row["pcm_sha256"] for row in measured}) == 1,
"server_pid": args.server_pid,
"memory_samples": samples,
"sampled_max_working_set_bytes": max((row["working_set_bytes"] for row in samples), default=None),
"sampled_max_private_bytes": max((row["private_bytes"] for row in samples if row["private_bytes"] is not None), default=None),
"sampled_min_host_available_bytes": min((row["host_available_bytes"] for row in samples), default=None),
}
args.output_report.parent.mkdir(parents=True, exist_ok=True)
args.output_report.write_text(json.dumps(report, indent=2) + "\n", encoding="utf-8")
print(json.dumps({key: value for key, value in report.items() if key not in {"memory_samples", "measured", "warmups"}}, indent=2))
if __name__ == "__main__":
main()
@@ -1,9 +1,10 @@
# 2026-09-23 WSL CPU and native Windows expansion
This extends the [60-cell device × model matrix](../e2e_profiling_20260922/evidence/summary/README.md) with previously unrun WSL CPU and native Windows paths. The September 22 timing tables remain historical. MiniCPM-o now has separate 20-request serial text-to-speech timing runs on WSL CPU and native Windows GPU, plus one synthetic image and one synthetic audio input on each platform; each InternVLA timing remains one observation. Spark has a 20-request Omni output-head component profile on the HX370 AMD NPU and separate 20-request **complete text** profiles through standalone llama.cpp on native Windows CPU and Radeon 890M. Qwen3-TTS has a separate 20-request complete standalone text-to-WAV profile on native Windows CPU. None is a sustained or full-modality profile; the standalone paths still need Omni integration. The [checkpoint manifests](../e2e_recovery_20260923/README.md) pin the earlier real weights; the [Spark NPU component record](evidence/spark_amd_npu_output_head/README.md), [CPU/Radeon whole-model record](evidence/spark_radeon890m_llamacpp/README.md), and [native CPU Qwen TTS record](evidence/qwen_tts_native_cpu/README.md) pin their respective artifacts. No model, precision or context was silently substituted.
This extends the [60-cell device × model matrix](../e2e_profiling_20260922/evidence/summary/README.md) with previously unrun WSL CPU and native Windows paths. The September 22 timing tables remain historical. MiniCPM-o now has separate 20-request serial text-to-speech timing runs on WSL CPU and native Windows GPU, plus one synthetic image and one synthetic audio input on each platform; each InternVLA timing remains one observation. Spark has a 20-request Omni output-head component profile on the HX370 AMD NPU and separate 20-request **complete text** profiles through standalone llama.cpp on native Windows CPU and Radeon 890M. Qwen3-TTS has separate 20-request complete standalone text-to-WAV profiles on native Windows CPU and a CPU+Radeon 890M hybrid route. None is a sustained or full-modality profile; the standalone paths still need Omni integration. The [checkpoint manifests](../e2e_recovery_20260923/README.md) pin the earlier real weights; the [Spark NPU component record](evidence/spark_amd_npu_output_head/README.md), [CPU/Radeon whole-model record](evidence/spark_radeon890m_llamacpp/README.md), [native CPU Qwen TTS record](evidence/qwen_tts_native_cpu/README.md), and [joint CPU+Radeon TTS record](evidence/qwen_tts_radeon890m_joint/README.md) pin their respective artifacts. No model, precision or context was silently substituted.
| Device / model | Verified depth | Observed output and time | Remaining gate |
|---|---|---|---|
| Native Windows HX370 CPU+Radeon 890M / Qwen3-TTS 0.6B CustomVoice Q8_0 GGUF plus F16 codec | Scoped complete standalone CrispASR text-to-WAV path with Vulkan talker/codec and CPU FP32 code predictor (P for two named sentences; outside Omni; **not** all-Radeon or NPU) | Two 24 kHz WAVs of 2.56 s and 3.20 s; independently pinned Whisper tiny.en ASR WER 0 on both. One warmup + 20 serial measured resident-server requests for the first prompt had client wall p50/p95 3.310/3.345 s, all PCM hashes identical; RTF 1.29/1.31. The default Vulkan setting fell back to CPU, while all-Vulkan talker+predictor hit a 360-frame runaway cap. | Explicit Omni hybrid stage binding, quality and playback gates, loading-peak admission, cancellation, broader prompts, concurrency and sustained power/thermal behavior; [joint raw evidence](evidence/qwen_tts_radeon890m_joint/README.md), [failed DirectML attempt](evidence/qwen_tts_radeon890m_directml/README.md). |
| Native Windows HX370 CPU / Qwen3-TTS 0.6B CustomVoice, revision `85e237c12c027371202489a0ec509ded67b5e4b5` | Scoped complete standalone PyTorch text-to-WAV path (P for two named sentences; outside Omni) | Nonzero 24 kHz WAVs of 4.56 s and 3.44 s. For the first prompt, 1 warmup + 20 serial measured complete generations p50/p95 13.94/14.68 s; Whisper tiny.en ASR WER 0.20 on the first and 0.00 on the second sentence. | Omni CPU stage binding and dependency isolation, playable streaming, speech quality, memory loading peak and sustained behavior; [raw evidence](evidence/qwen_tts_native_cpu/README.md). |
| Native Windows HX370 CPU / Spark-X2.5-1.7B Q4_K_M GGUF, revision `1f7fa33b1245c14730da39e125714ad3a327901b` | Scoped complete standalone llama.cpp text path (P for two named inputs; outside Omni) | Correct `Paris` and 120-item inventory answer `1511`; 1 warmup + 20 uncached serial full inventory requests p50/p95 6.65/6.86 s, 20/20 correct. Stream-close recovery passed. | Omni whole-model stage binding, broader quality, explicit loading-peak admission and sustained behavior; [raw evidence](evidence/spark_radeon890m_llamacpp/README.md). |
| Native Windows HX370 Radeon 890M / Spark-X2.5-1.7B same GGUF | Scoped complete standalone llama.cpp Vulkan1 text path (P for two named inputs; outside Omni) | All 29 logged layer assignments on Vulkan1, with a separate Vulkan_Host buffer; correct `Paris` and `1511`; 1 warmup + 20 uncached serial inventory requests p50/p95 2.18/2.20 s, 20/20 correct. Stream-close recovery passed. | Omni binding, state and memory contract, broad quality, GPU-memory attribution and sustained power/thermal behavior; [raw evidence](evidence/spark_radeon890m_llamacpp/README.md). |
@@ -0,0 +1,4 @@
# Preserve native Windows raw records byte-for-byte.
*.json -text -eol
*.log -text -eol
*.wav binary
@@ -0,0 +1,16 @@
# Radeon 890M DirectML Qwen3-TTS attempted route
This is a **failed whole-model quality route**, not a Radeon Qwen3-TTS pass. It used the official [Qwen3-TTS 0.6B CustomVoice checkpoint](https://huggingface.co/Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice/tree/85e237c12c027371202489a0ec509ded67b5e4b5) and `qwen-tts==0.1.1` on Windows 11 build 26200. The isolated runtime had PyTorch 2.4.1+cpu, `torch-directml==0.2.5.dev240914`, Transformers 4.57.3, torchaudio 2.4.1, and AMD Radeon 890M driver `32.0.22018.6001`. `torch_directml.device_name(1)` identified Radeon 890M; all model parameters were checked on `privateuseone:1` after the move. The RTX 5090 Laptop was enumerated as device 0 but was not selected.
The [probe](../../../../experiments/probe_qwen_tts_directml.py) loads the real talker and speech tokenizer, explicitly moves the model to DirectML, and records the selected adapter, model placement, precision and failure phase. The wrapper caches `self.device` at construction; setting it to the chosen DirectML device after the model move corrected the first CPU-input/GPU-weight mismatch. The following attempts retain the next genuine boundaries:
| Attempt | Result | Raw record |
|---|---|---|
| FP16, original sampling | Reached talker token sampling, then failed at DirectML `torch.gather`. | [report](qwen_tts_dml_890m_20260923.json), [log](qwen_tts_dml_890m_20260923.log) |
| FP16, repetition penalty 1.0 | Bypassed gather, then failed at a DirectML `torch.cat` of an empty int64 prefix and one next token. A minimal `(1,0) ⊕ (1,1)` int64 DirectML reproduction failed the same way. | [report](qwen_tts_dml_890m_rp1_20260923.json), [trace](qwen_tts_dml_890m_rp1_trace_20260923.log) |
| FP16, exact empty-cat identity workaround, repetition penalty 1.0 | Reached the code predictor, then sampling failed on non-finite/negative probabilities. The same FP16 sampling failure occurred on CPU in this PyTorch 2.4.1 environment, so it cannot be assigned solely to DirectML. | [report](qwen_tts_dml_890m_workaround_20260923.json), [log](qwen_tts_dml_890m_workaround_20260923.log), [CPU FP16 log](qwen_tts_cpu_fp16_dmlenv_20260923.log) |
| FP32 | The full-model move to Radeon failed; the decoded backend error says the GPU device instance was suspended. A separate simple DirectML addition and Windows display-device check still passed afterward. | [report](qwen_tts_dml_890m_fp32_20260923.json), [log](qwen_tts_dml_890m_fp32_20260923.log) |
| BF16 | The DirectML process exited with `Invalid or unsupported data type BFloat16`; no report/WAV was emitted. | [fatal log](qwen_tts_dml_890m_bf16_20260923.log) |
| FP16, greedy code predictor, repetition penalty 1.0 and empty-cat workaround | A 5.04 s/24 kHz nonzero WAV was emitted after 189.11 s, but separately pinned Whisper tiny.en transcribed only “you” for “Hello from the local computer.” (WER 1.00). It is **not a quality pass**. | [report](qwen_tts_dml_890m_greedy_20260923.json), [WAV](qwen_tts_dml_890m_greedy_20260923.wav), [log](qwen_tts_dml_890m_greedy_20260923.log), [ASR proxy](qwen_tts_dml_890m_greedy_asr_20260923.json) |
The tested dtype/sampling changes and workaround are explicit; none is silently substituted for the accepted CPU BF16 path. These results constrain this DirectML runtime/configuration, not every possible Radeon graph or quantized artifact. The [separate Q8_0 GGUF Vulkan experiment](../qwen_tts_radeon890m_joint/README.md) found a scoped CPU+Radeon route with two intelligible named outputs. It does not repair DirectML or establish that the whole model runs on Radeon alone.
@@ -0,0 +1,71 @@
'\\wsl.localhost\Ubuntu\home\zhout\project\edge_infer'
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported. Defaulting to Windows directory.
'sox' is not recognized as an internal or external command,
operable program or batch file.
SoX could not be found!
If you do not have SoX, proceed here:
- - - http://sox.sourceforge.net/ - - -
If you do (or think that you should) have SoX, double-check your
path variables.
Setting `pad_token_id` to `eos_token_id`:2150 for open-end generation.
Traceback (most recent call last):
********
Warning: flash-attn is not installed. Will only run the manual PyTorch version. Please install flash-attn for faster inference.
********
File "\\wsl.localhost\Ubuntu\home\zhout\project\edge_infer\vllm-omni-edge\benchmarks\edge_harness\experiments\probe_qwen_tts_native_cpu.py", line 154, in <module>
main()
File "\\wsl.localhost\Ubuntu\home\zhout\project\edge_infer\vllm-omni-edge\benchmarks\edge_harness\experiments\probe_qwen_tts_native_cpu.py", line 107, in main
measured = [generate_one(save_wav=index == 0) for index in range(args.repeats)]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "\\wsl.localhost\Ubuntu\home\zhout\project\edge_infer\vllm-omni-edge\benchmarks\edge_harness\experiments\probe_qwen_tts_native_cpu.py", line 75, in generate_one
wavs, sample_rate = model.generate_custom_voice(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\utils\_contextlib.py", line 116, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\qwen_tts\inference\qwen3_tts_model.py", line 829, in generate_custom_voice
talker_codes_list, _ = self.model.generate(
^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\utils\_contextlib.py", line 116, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\qwen_tts\core\models\modeling_qwen3_tts.py", line 2272, in generate
talker_result = self.talker.generate(
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\utils\_contextlib.py", line 116, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\transformers\generation\utils.py", line 2564, in generate
result = decoding_method(
^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\transformers\generation\utils.py", line 2787, in _sample
outputs = model_forward(**model_inputs, return_dict=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\nn\modules\module.py", line 1553, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\nn\modules\module.py", line 1562, in _call_impl
return forward_call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\transformers\utils\generic.py", line 918, in wrapper
output = func(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\qwen_tts\core\models\modeling_qwen3_tts.py", line 1671, in forward
predictor_result = self.code_predictor.generate(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\utils\_contextlib.py", line 116, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\transformers\generation\utils.py", line 2564, in generate
result = decoding_method(
^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\transformers\generation\utils.py", line 2829, in _sample
next_tokens = torch.multinomial(probs, num_samples=1).squeeze(1)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: probability tensor contains either `inf`, `nan` or element < 0
@@ -0,0 +1,34 @@
{
"scope": "standalone real-weight Qwen3-TTS DirectML feasibility; no Omni, streaming, or all-operator placement claim",
"platform": "Windows-11-10.0.26200-SP0",
"python": "3.12.10",
"torch": "2.4.1+cpu",
"torch_directml": "unknown",
"transformers": "4.57.3",
"adapters": [
"NVIDIA GeForce RTX 5090 Laptop GPU",
"AMD Radeon(TM) 890M Graphics"
],
"requested_index": 1,
"target_device": "privateuseone:1",
"model_dir": "C:\\Users\\zhout\\w2\\models\\Qwen3-TTS-0.6B-85e237c",
"talker_sha256": "bc3c7e785eb961179c25450d1acff03f839e0002f2f3a5aeb67b5735c0fa2adb",
"speech_tokenizer_sha256": "836b7b357f5ea43e889936a3709af68dfe3751881acefe4ecf0dbd30ba571258",
"dtype": "float16",
"attention": "sdpa",
"threads": 8,
"text": "Hello from the local computer.",
"speaker": "Ryan",
"max_new_tokens": 64,
"seed": 42,
"status": "failed",
"cpu_load_s": 2.3304581999545917,
"phase": "generate",
"device_move_s": 1.2001519000623375,
"model_devices": [
"privateuseone:1"
],
"error_type": "UnicodeDecodeError",
"error": "'utf-8' codec can't decode byte 0xb2 in position 0: invalid start byte",
"traceback": "Traceback (most recent call last):\n File \"\\\\wsl.localhost\\Ubuntu\\home\\zhout\\project\\edge_infer\\vllm-omni-edge\\benchmarks\\edge_harness\\experiments\\probe_qwen_tts_directml.py\", line 101, in main\n wavs, sample_rate = model.generate_custom_voice(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\qwen_tts\\inference\\qwen3_tts_model.py\", line 829, in generate_custom_voice\n talker_codes_list, _ = self.model.generate(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\qwen_tts\\core\\models\\modeling_qwen3_tts.py\", line 2272, in generate\n talker_result = self.talker.generate(\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\generation\\utils.py\", line 2564, in generate\n result = decoding_method(\n ^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\generation\\utils.py\", line 2803, in _sample\n next_token_scores = logits_processor(input_ids, next_token_logits)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\generation\\logits_process.py\", line 93, in __call__\n scores = processor(input_ids, scores)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\generation\\logits_process.py\", line 402, in __call__\n score = torch.gather(scores, 1, input_ids)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nUnicodeDecodeError: 'utf-8' codec can't decode byte 0xb2 in position 0: invalid start byte\n"
}
@@ -0,0 +1,87 @@
'\\wsl.localhost\Ubuntu\home\zhout\project\edge_infer'
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported. Defaulting to Windows directory.
'sox' is not recognized as an internal or external command,
operable program or batch file.
SoX could not be found!
If you do not have SoX, proceed here:
- - - http://sox.sourceforge.net/ - - -
If you do (or think that you should) have SoX, double-check your
path variables.
Setting `pad_token_id` to `eos_token_id`:2150 for open-end generation.
Traceback (most recent call last):
********
Warning: flash-attn is not installed. Will only run the manual PyTorch version. Please install flash-attn for faster inference.
********
{
"scope": "standalone real-weight Qwen3-TTS DirectML feasibility; no Omni, streaming, or all-operator placement claim",
"platform": "Windows-11-10.0.26200-SP0",
"python": "3.12.10",
"torch": "2.4.1+cpu",
"torch_directml": "unknown",
"transformers": "4.57.3",
"adapters": [
"NVIDIA GeForce RTX 5090 Laptop GPU",
"AMD Radeon(TM) 890M Graphics"
],
"requested_index": 1,
"target_device": "privateuseone:1",
"model_dir": "C:\\Users\\zhout\\w2\\models\\Qwen3-TTS-0.6B-85e237c",
"talker_sha256": "bc3c7e785eb961179c25450d1acff03f839e0002f2f3a5aeb67b5735c0fa2adb",
"speech_tokenizer_sha256": "836b7b357f5ea43e889936a3709af68dfe3751881acefe4ecf0dbd30ba571258",
"dtype": "float16",
"attention": "sdpa",
"threads": 8,
"text": "Hello from the local computer.",
"speaker": "Ryan",
"max_new_tokens": 64,
File "\\wsl.localhost\Ubuntu\home\zhout\project\edge_infer\vllm-omni-edge\benchmarks\edge_harness\experiments\probe_qwen_tts_directml.py", line 140, in <module>
"seed": 42,
"status": "failed",
"cpu_load_s": 2.3304581999545917,
"phase": "generate",
"device_move_s": 1.2001519000623375,
"model_devices": [
"privateuseone:1"
],
"error_type": "UnicodeDecodeError",
"error": "'utf-8' codec can't decode byte 0xb2 in position 0: invalid start byte",
"traceback": "Traceback (most recent call last):\n File \"\\\\wsl.localhost\\Ubuntu\\home\\zhout\\project\\edge_infer\\vllm-omni-edge\\benchmarks\\edge_harness\\experiments\\probe_qwen_tts_directml.py\", line 101, in main\n wavs, sample_rate = model.generate_custom_voice(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\qwen_tts\\inference\\qwen3_tts_model.py\", line 829, in generate_custom_voice\n talker_codes_list, _ = self.model.generate(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\qwen_tts\\core\\models\\modeling_qwen3_tts.py\", line 2272, in generate\n talker_result = self.talker.generate(\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\generation\\utils.py\", line 2564, in generate\n result = decoding_method(\n ^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\generation\\utils.py\", line 2803, in _sample\n next_token_scores = logits_processor(input_ids, next_token_logits)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\generation\\logits_process.py\", line 93, in __call__\n scores = processor(input_ids, scores)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\generation\\logits_process.py\", line 402, in __call__\n score = torch.gather(scores, 1, input_ids)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nUnicodeDecodeError: 'utf-8' codec can't decode byte 0xb2 in position 0: invalid start byte\n"
}
main()
File "\\wsl.localhost\Ubuntu\home\zhout\project\edge_infer\vllm-omni-edge\benchmarks\edge_harness\experiments\probe_qwen_tts_directml.py", line 101, in main
wavs, sample_rate = model.generate_custom_voice(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\utils\_contextlib.py", line 116, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\qwen_tts\inference\qwen3_tts_model.py", line 829, in generate_custom_voice
talker_codes_list, _ = self.model.generate(
^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\utils\_contextlib.py", line 116, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\qwen_tts\core\models\modeling_qwen3_tts.py", line 2272, in generate
talker_result = self.talker.generate(
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\utils\_contextlib.py", line 116, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\transformers\generation\utils.py", line 2564, in generate
result = decoding_method(
^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\transformers\generation\utils.py", line 2803, in _sample
next_token_scores = logits_processor(input_ids, next_token_logits)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\transformers\generation\logits_process.py", line 93, in __call__
scores = processor(input_ids, scores)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\transformers\generation\logits_process.py", line 402, in __call__
score = torch.gather(scores, 1, input_ids)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb2 in position 0: invalid start byte
@@ -0,0 +1,14 @@
'\\wsl.localhost\Ubuntu\home\zhout\project\edge_infer'
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported. Defaulting to Windows directory.
'sox' is not recognized as an internal or external command,
operable program or batch file.
SoX could not be found!
If you do not have SoX, proceed here:
- - - http://sox.sourceforge.net/ - - -
If you do (or think that you should) have SoX, double-check your
path variables.
[F923 19:32:34.000000000 dml_util.cc:118] Invalid or unsupported data type BFloat16.
@@ -0,0 +1,34 @@
{
"scope": "standalone real-weight Qwen3-TTS DirectML feasibility; no Omni, streaming, or all-operator placement claim",
"platform": "Windows-11-10.0.26200-SP0",
"python": "3.12.10",
"torch": "2.4.1+cpu",
"torch_directml": "unknown",
"transformers": "4.57.3",
"adapters": [
"NVIDIA GeForce RTX 5090 Laptop GPU",
"AMD Radeon(TM) 890M Graphics"
],
"requested_index": 1,
"target_device": "privateuseone:1",
"model_dir": "C:\\Users\\zhout\\w2\\models\\Qwen3-TTS-0.6B-85e237c",
"talker_sha256": "bc3c7e785eb961179c25450d1acff03f839e0002f2f3a5aeb67b5735c0fa2adb",
"speech_tokenizer_sha256": "836b7b357f5ea43e889936a3709af68dfe3751881acefe4ecf0dbd30ba571258",
"dtype": "float32",
"attention": "sdpa",
"threads": 8,
"text": "Hello from the local computer.",
"speaker": "Ryan",
"max_new_tokens": 64,
"repetition_penalty_override": 1.0,
"workaround_empty_int64_cat": true,
"seed": 42,
"status": "failed",
"cpu_load_s": 1.82569450000301,
"phase": "move_to_directml",
"error_type": "UnicodeDecodeError",
"error": "'utf-8' codec can't decode byte 0xc9 in position 4: invalid continuation byte",
"traceback": "Traceback (most recent call last):\n File \"\\\\wsl.localhost\\Ubuntu\\home\\zhout\\project\\edge_infer\\vllm-omni-edge\\benchmarks\\edge_harness\\experiments\\probe_qwen_tts_directml.py\", line 98, in main\n model.model.to(device)\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\modeling_utils.py\", line 4343, in to\n return super().to(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\nn\\modules\\module.py\", line 1174, in to\n return self._apply(convert)\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\nn\\modules\\module.py\", line 780, in _apply\n module._apply(fn)\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\nn\\modules\\module.py\", line 780, in _apply\n module._apply(fn)\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\nn\\modules\\module.py\", line 780, in _apply\n module._apply(fn)\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\nn\\modules\\module.py\", line 805, in _apply\n param_applied = fn(param)\n ^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\nn\\modules\\module.py\", line 1160, in convert\n return t.to(\n ^^^^^\nUnicodeDecodeError: 'utf-8' codec can't decode byte 0xc9 in position 4: invalid continuation byte\n",
"backend_error_bytes_hex": "47505520c9e8b1b8cab5c0fdd2d1beadd4ddcda3a1a3cab9d3c32047657444657669636552656d6f766564526561736f6e20d2d4c8b7b6a8cfe0d3a6b5c4b4ebcaa9a1a3",
"backend_error_cp936": "GPU \u8bbe\u5907\u5b9e\u4f8b\u5df2\u7ecf\u6682\u505c\u3002\u4f7f\u7528 GetDeviceRemovedReason \u4ee5\u786e\u5b9a\u76f8\u5e94\u7684\u63aa\u65bd\u3002"
}
@@ -0,0 +1,76 @@
'\\wsl.localhost\Ubuntu\home\zhout\project\edge_infer'
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported. Defaulting to Windows directory.
'sox' is not recognized as an internal or external command,
operable program or batch file.
SoX could not be found!
If you do not have SoX, proceed here:
- - - http://sox.sourceforge.net/ - - -
If you do (or think that you should) have SoX, double-check your
path variables.
Traceback (most recent call last):
********
Warning: flash-attn is not installed. Will only run the manual PyTorch version. Please install flash-attn for faster inference.
********
{
"scope": "standalone real-weight Qwen3-TTS DirectML feasibility; no Omni, streaming, or all-operator placement claim",
"platform": "Windows-11-10.0.26200-SP0",
"python": "3.12.10",
"torch": "2.4.1+cpu",
"torch_directml": "unknown",
"transformers": "4.57.3",
"adapters": [
"NVIDIA GeForce RTX 5090 Laptop GPU",
"AMD Radeon(TM) 890M Graphics"
],
"requested_index": 1,
"target_device": "privateuseone:1",
"model_dir": "C:\\Users\\zhout\\w2\\models\\Qwen3-TTS-0.6B-85e237c",
"talker_sha256": "bc3c7e785eb961179c25450d1acff03f839e0002f2f3a5aeb67b5735c0fa2adb",
"speech_tokenizer_sha256": "836b7b357f5ea43e889936a3709af68dfe3751881acefe4ecf0dbd30ba571258",
"dtype": "float32",
"attention": "sdpa",
"threads": 8,
"text": "Hello from the local computer.",
"speaker": "Ryan",
"max_new_tokens": 64,
"repetition_penalty_override": 1.0,
"workaround_empty_int64_cat": true,
"seed": 42,
"status": "failed",
"cpu_load_s": 1.82569450000301,
File "\\wsl.localhost\Ubuntu\home\zhout\project\edge_infer\vllm-omni-edge\benchmarks\edge_harness\experiments\probe_qwen_tts_directml.py", line 186, in <module>
"phase": "move_to_directml",
"error_type": "UnicodeDecodeError",
"error": "'utf-8' codec can't decode byte 0xc9 in position 4: invalid continuation byte",
"traceback": "Traceback (most recent call last):\n File \"\\\\wsl.localhost\\Ubuntu\\home\\zhout\\project\\edge_infer\\vllm-omni-edge\\benchmarks\\edge_harness\\experiments\\probe_qwen_tts_directml.py\", line 98, in main\n model.model.to(device)\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\modeling_utils.py\", line 4343, in to\n return super().to(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\nn\\modules\\module.py\", line 1174, in to\n return self._apply(convert)\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\nn\\modules\\module.py\", line 780, in _apply\n module._apply(fn)\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\nn\\modules\\module.py\", line 780, in _apply\n module._apply(fn)\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\nn\\modules\\module.py\", line 780, in _apply\n module._apply(fn)\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\nn\\modules\\module.py\", line 805, in _apply\n param_applied = fn(param)\n ^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\nn\\modules\\module.py\", line 1160, in convert\n return t.to(\n ^^^^^\nUnicodeDecodeError: 'utf-8' codec can't decode byte 0xc9 in position 4: invalid continuation byte\n",
"backend_error_bytes_hex": "47505520c9e8b1b8cab5c0fdd2d1beadd4ddcda3a1a3cab9d3c32047657444657669636552656d6f766564526561736f6e20d2d4c8b7b6a8cfe0d3a6b5c4b4ebcaa9a1a3",
"backend_error_cp936": "GPU \u8bbe\u5907\u5b9e\u4f8b\u5df2\u7ecf\u6682\u505c\u3002\u4f7f\u7528 GetDeviceRemovedReason \u4ee5\u786e\u5b9a\u76f8\u5e94\u7684\u63aa\u65bd\u3002"
}
main()
File "\\wsl.localhost\Ubuntu\home\zhout\project\edge_infer\vllm-omni-edge\benchmarks\edge_harness\experiments\probe_qwen_tts_directml.py", line 98, in main
model.model.to(device)
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\transformers\modeling_utils.py", line 4343, in to
return super().to(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\nn\modules\module.py", line 1174, in to
return self._apply(convert)
^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\nn\modules\module.py", line 780, in _apply
module._apply(fn)
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\nn\modules\module.py", line 780, in _apply
module._apply(fn)
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\nn\modules\module.py", line 780, in _apply
module._apply(fn)
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\nn\modules\module.py", line 805, in _apply
param_applied = fn(param)
^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\nn\modules\module.py", line 1160, in convert
return t.to(
^^^^^
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc9 in position 4: invalid continuation byte
@@ -0,0 +1,42 @@
{
"scope": "standalone real-weight Qwen3-TTS DirectML feasibility; no Omni, streaming, or all-operator placement claim",
"platform": "Windows-11-10.0.26200-SP0",
"python": "3.12.10",
"torch": "2.4.1+cpu",
"torch_directml": "unknown",
"transformers": "4.57.3",
"adapters": [
"NVIDIA GeForce RTX 5090 Laptop GPU",
"AMD Radeon(TM) 890M Graphics"
],
"requested_index": 1,
"target_device": "privateuseone:1",
"model_dir": "C:\\Users\\zhout\\w2\\models\\Qwen3-TTS-0.6B-85e237c",
"talker_sha256": "bc3c7e785eb961179c25450d1acff03f839e0002f2f3a5aeb67b5735c0fa2adb",
"speech_tokenizer_sha256": "836b7b357f5ea43e889936a3709af68dfe3751881acefe4ecf0dbd30ba571258",
"dtype": "float16",
"attention": "sdpa",
"threads": 8,
"text": "Hello from the local computer.",
"speaker": "Ryan",
"max_new_tokens": 64,
"repetition_penalty_override": 1.0,
"workaround_empty_int64_cat": true,
"subtalker_greedy": true,
"seed": 42,
"status": "passed",
"cpu_load_s": 2.0600192999700084,
"phase": "complete",
"device_move_s": 0.9054825000930578,
"model_devices": [
"privateuseone:1"
],
"request_s": 189.10949669999536,
"rms": 0.006188759764276907,
"peak_abs": 0.03369140625,
"nonzero_samples": 120959,
"sample_rate": 24000,
"samples": 120960,
"duration_s": 5.04,
"wav_sha256": "5cd8b4928841cd389d3d20daa6ac2d4ef05d305f77ce0121ffc055f02a3b2833"
}
@@ -0,0 +1,126 @@
'\\wsl.localhost\Ubuntu\home\zhout\project\edge_infer'
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported. Defaulting to Windows directory.
'sox' is not recognized as an internal or external command,
operable program or batch file.
SoX could not be found!
If you do not have SoX, proceed here:
- - - http://sox.sourceforge.net/ - - -
If you do (or think that you should) have SoX, double-check your
path variables.
Setting `pad_token_id` to `eos_token_id`:2150 for open-end generation.
EMPTY_INT64_CAT_IDENTITY
The following generation flags are not valid and may be ignored: ['temperature']. Set `TRANSFORMERS_VERBOSITY=info` for more details.
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
EMPTY_INT64_CAT_IDENTITY
********
Warning: flash-attn is not installed. Will only run the manual PyTorch version. Please install flash-attn for faster inference.
********
{
"scope": "standalone real-weight Qwen3-TTS DirectML feasibility; no Omni, streaming, or all-operator placement claim",
"platform": "Windows-11-10.0.26200-SP0",
"python": "3.12.10",
"torch": "2.4.1+cpu",
"torch_directml": "unknown",
"transformers": "4.57.3",
"adapters": [
"NVIDIA GeForce RTX 5090 Laptop GPU",
"AMD Radeon(TM) 890M Graphics"
],
"requested_index": 1,
"target_device": "privateuseone:1",
"model_dir": "C:\\Users\\zhout\\w2\\models\\Qwen3-TTS-0.6B-85e237c",
"talker_sha256": "bc3c7e785eb961179c25450d1acff03f839e0002f2f3a5aeb67b5735c0fa2adb",
"speech_tokenizer_sha256": "836b7b357f5ea43e889936a3709af68dfe3751881acefe4ecf0dbd30ba571258",
"dtype": "float16",
"attention": "sdpa",
"threads": 8,
"text": "Hello from the local computer.",
"speaker": "Ryan",
"max_new_tokens": 64,
"repetition_penalty_override": 1.0,
"workaround_empty_int64_cat": true,
"subtalker_greedy": true,
"seed": 42,
"status": "passed",
"cpu_load_s": 2.0600192999700084,
"phase": "complete",
"device_move_s": 0.9054825000930578,
"model_devices": [
"privateuseone:1"
],
"request_s": 189.10949669999536,
"rms": 0.006188759764276907,
"peak_abs": 0.03369140625,
"nonzero_samples": 120959,
"sample_rate": 24000,
"samples": 120960,
"duration_s": 5.04,
"wav_sha256": "5cd8b4928841cd389d3d20daa6ac2d4ef05d305f77ce0121ffc055f02a3b2833"
}
@@ -0,0 +1,16 @@
{
"scope": "local Whisper tiny.en ASR proxy for generated speech; no perceptual quality claim",
"asr_model": "openai/whisper-tiny.en",
"asr_revision": "87c7102498dcde7456f24cfd30239ca606ed9063",
"asr_weights_sha256": "db59695928ded6043adaef491a53ef4e12da9611184d77c53baa691a60b958ad",
"transformers": "4.57.3",
"torch": "2.4.1+cpu",
"wav_sha256": "5cd8b4928841cd389d3d20daa6ac2d4ef05d305f77ce0121ffc055f02a3b2833",
"input_sample_rate": 24000,
"input_duration_s": 5.04,
"reference_text": "Hello from the local computer.",
"transcript": "you",
"word_error_rate": 1.0,
"asr_load_s": 0.8331252000061795,
"asr_inference_s": 0.8376452999655157
}
@@ -0,0 +1,17 @@
Using custom `forced_decoder_ids` from the (generation) config. This is deprecated in favor of the `task` and `language` flags/config options.
{
"scope": "local Whisper tiny.en ASR proxy for generated speech; no perceptual quality claim",
"asr_model": "openai/whisper-tiny.en",
"asr_revision": "87c7102498dcde7456f24cfd30239ca606ed9063",
"asr_weights_sha256": "db59695928ded6043adaef491a53ef4e12da9611184d77c53baa691a60b958ad",
"transformers": "4.57.3",
"torch": "2.4.1+cpu",
"wav_sha256": "5cd8b4928841cd389d3d20daa6ac2d4ef05d305f77ce0121ffc055f02a3b2833",
"input_sample_rate": 24000,
"input_duration_s": 5.04,
"reference_text": "Hello from the local computer.",
"transcript": "you",
"word_error_rate": 1.0,
"asr_load_s": 0.8331252000061795,
"asr_inference_s": 0.8376452999655157
}
@@ -0,0 +1,35 @@
{
"scope": "standalone real-weight Qwen3-TTS DirectML feasibility; no Omni, streaming, or all-operator placement claim",
"platform": "Windows-11-10.0.26200-SP0",
"python": "3.12.10",
"torch": "2.4.1+cpu",
"torch_directml": "unknown",
"transformers": "4.57.3",
"adapters": [
"NVIDIA GeForce RTX 5090 Laptop GPU",
"AMD Radeon(TM) 890M Graphics"
],
"requested_index": 1,
"target_device": "privateuseone:1",
"model_dir": "C:\\Users\\zhout\\w2\\models\\Qwen3-TTS-0.6B-85e237c",
"talker_sha256": "bc3c7e785eb961179c25450d1acff03f839e0002f2f3a5aeb67b5735c0fa2adb",
"speech_tokenizer_sha256": "836b7b357f5ea43e889936a3709af68dfe3751881acefe4ecf0dbd30ba571258",
"dtype": "float16",
"attention": "sdpa",
"threads": 8,
"text": "Hello from the local computer.",
"speaker": "Ryan",
"max_new_tokens": 64,
"repetition_penalty_override": 1.0,
"seed": 42,
"status": "failed",
"cpu_load_s": 1.9829754000529647,
"phase": "generate",
"device_move_s": 1.012216999894008,
"model_devices": [
"privateuseone:1"
],
"error_type": "UnicodeDecodeError",
"error": "'utf-8' codec can't decode byte 0xb2 in position 0: invalid start byte",
"traceback": "Traceback (most recent call last):\n File \"\\\\wsl.localhost\\Ubuntu\\home\\zhout\\project\\edge_infer\\vllm-omni-edge\\benchmarks\\edge_harness\\experiments\\probe_qwen_tts_directml.py\", line 123, in main\n wavs, sample_rate = model.generate_custom_voice(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\qwen_tts\\inference\\qwen3_tts_model.py\", line 829, in generate_custom_voice\n talker_codes_list, _ = self.model.generate(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\qwen_tts\\core\\models\\modeling_qwen3_tts.py\", line 2272, in generate\n talker_result = self.talker.generate(\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\generation\\utils.py\", line 2564, in generate\n result = decoding_method(\n ^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\generation\\utils.py\", line 2838, in _sample\n input_ids = torch.cat([input_ids, next_tokens[:, None]], dim=-1)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\\\\wsl.localhost\\Ubuntu\\home\\zhout\\project\\edge_infer\\vllm-omni-edge\\benchmarks\\edge_harness\\experiments\\probe_qwen_tts_directml.py\", line 108, in traced_cat\n return original_cat(tensors, *cat_args, **cat_kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nUnicodeDecodeError: 'utf-8' codec can't decode byte 0xb2 in position 0: invalid start byte\n"
}
@@ -0,0 +1,82 @@
'\\wsl.localhost\Ubuntu\home\zhout\project\edge_infer'
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported. Defaulting to Windows directory.
'sox' is not recognized as an internal or external command,
operable program or batch file.
SoX could not be found!
If you do not have SoX, proceed here:
- - - http://sox.sourceforge.net/ - - -
If you do (or think that you should) have SoX, double-check your
path variables.
Setting `pad_token_id` to `eos_token_id`:2150 for open-end generation.
Traceback (most recent call last):
********
Warning: flash-attn is not installed. Will only run the manual PyTorch version. Please install flash-attn for faster inference.
********
{
"scope": "standalone real-weight Qwen3-TTS DirectML feasibility; no Omni, streaming, or all-operator placement claim",
"platform": "Windows-11-10.0.26200-SP0",
"python": "3.12.10",
"torch": "2.4.1+cpu",
"torch_directml": "unknown",
"transformers": "4.57.3",
"adapters": [
"NVIDIA GeForce RTX 5090 Laptop GPU",
"AMD Radeon(TM) 890M Graphics"
],
"requested_index": 1,
"target_device": "privateuseone:1",
"model_dir": "C:\\Users\\zhout\\w2\\models\\Qwen3-TTS-0.6B-85e237c",
"talker_sha256": "bc3c7e785eb961179c25450d1acff03f839e0002f2f3a5aeb67b5735c0fa2adb",
"speech_tokenizer_sha256": "836b7b357f5ea43e889936a3709af68dfe3751881acefe4ecf0dbd30ba571258",
"dtype": "float16",
"attention": "sdpa",
"threads": 8,
"text": "Hello from the local computer.",
"speaker": "Ryan",
"max_new_tokens": 64,
"repetition_penalty_override": 1.0,
"seed": 42,
"status": "failed",
"cpu_load_s": 2.2846993000712246,
"phase": "generate",
"device_move_s": 1.2995686000213027,
"model_devices": [
"privateuseone:1"
],
"error_type": "UnicodeDecodeError",
"error": "'utf-8' codec can't decode byte 0xb2 in position 0: invalid start byte",
File "\\wsl.localhost\Ubuntu\home\zhout\project\edge_infer\vllm-omni-edge\benchmarks\edge_harness\experiments\probe_qwen_tts_directml.py", line 146, in <module>
"traceback": "Traceback (most recent call last):\n File \"\\\\wsl.localhost\\Ubuntu\\home\\zhout\\project\\edge_infer\\vllm-omni-edge\\benchmarks\\edge_harness\\experiments\\probe_qwen_tts_directml.py\", line 106, in main\n wavs, sample_rate = model.generate_custom_voice(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\qwen_tts\\inference\\qwen3_tts_model.py\", line 829, in generate_custom_voice\n talker_codes_list, _ = self.model.generate(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\qwen_tts\\core\\models\\modeling_qwen3_tts.py\", line 2272, in generate\n talker_result = self.talker.generate(\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\generation\\utils.py\", line 2564, in generate\n result = decoding_method(\n ^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\generation\\utils.py\", line 2838, in _sample\n input_ids = torch.cat([input_ids, next_tokens[:, None]], dim=-1)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nUnicodeDecodeError: 'utf-8' codec can't decode byte 0xb2 in position 0: invalid start byte\n"
}
main()
File "\\wsl.localhost\Ubuntu\home\zhout\project\edge_infer\vllm-omni-edge\benchmarks\edge_harness\experiments\probe_qwen_tts_directml.py", line 106, in main
wavs, sample_rate = model.generate_custom_voice(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\utils\_contextlib.py", line 116, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\qwen_tts\inference\qwen3_tts_model.py", line 829, in generate_custom_voice
talker_codes_list, _ = self.model.generate(
^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\utils\_contextlib.py", line 116, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\qwen_tts\core\models\modeling_qwen3_tts.py", line 2272, in generate
talker_result = self.talker.generate(
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\utils\_contextlib.py", line 116, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\transformers\generation\utils.py", line 2564, in generate
result = decoding_method(
^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\transformers\generation\utils.py", line 2838, in _sample
input_ids = torch.cat([input_ids, next_tokens[:, None]], dim=-1)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb2 in position 0: invalid start byte
@@ -0,0 +1,86 @@
'\\wsl.localhost\Ubuntu\home\zhout\project\edge_infer'
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported. Defaulting to Windows directory.
'sox' is not recognized as an internal or external command,
operable program or batch file.
SoX could not be found!
If you do not have SoX, proceed here:
- - - http://sox.sourceforge.net/ - - -
If you do (or think that you should) have SoX, double-check your
path variables.
Setting `pad_token_id` to `eos_token_id`:2150 for open-end generation.
CAT_FAILURE [('privateuseone:1', 'torch.int64', (1, 0)), ('privateuseone:1', 'torch.int64', (1, 1))]
Traceback (most recent call last):
File "\\wsl.localhost\Ubuntu\home\zhout\project\edge_infer\vllm-omni-edge\benchmarks\edge_harness\experiments\probe_qwen_tts_directml.py", line 163, in <module>
********
Warning: flash-attn is not installed. Will only run the manual PyTorch version. Please install flash-attn for faster inference.
********
{
"scope": "standalone real-weight Qwen3-TTS DirectML feasibility; no Omni, streaming, or all-operator placement claim",
"platform": "Windows-11-10.0.26200-SP0",
"python": "3.12.10",
"torch": "2.4.1+cpu",
"torch_directml": "unknown",
"transformers": "4.57.3",
"adapters": [
"NVIDIA GeForce RTX 5090 Laptop GPU",
"AMD Radeon(TM) 890M Graphics"
],
"requested_index": 1,
"target_device": "privateuseone:1",
"model_dir": "C:\\Users\\zhout\\w2\\models\\Qwen3-TTS-0.6B-85e237c",
"talker_sha256": "bc3c7e785eb961179c25450d1acff03f839e0002f2f3a5aeb67b5735c0fa2adb",
"speech_tokenizer_sha256": "836b7b357f5ea43e889936a3709af68dfe3751881acefe4ecf0dbd30ba571258",
"dtype": "float16",
"attention": "sdpa",
"threads": 8,
"text": "Hello from the local computer.",
"speaker": "Ryan",
"max_new_tokens": 64,
"repetition_penalty_override": 1.0,
"seed": 42,
"status": "failed",
"cpu_load_s": 1.9829754000529647,
"phase": "generate",
"device_move_s": 1.012216999894008,
"model_devices": [
"privateuseone:1"
],
"error_type": "UnicodeDecodeError",
"error": "'utf-8' codec can't decode byte 0xb2 in position 0: invalid start byte",
"traceback": "Traceback (most recent call last):\n File \"\\\\wsl.localhost\\Ubuntu\\home\\zhout\\project\\edge_infer\\vllm-omni-edge\\benchmarks\\edge_harness\\experiments\\probe_qwen_tts_directml.py\", line 123, in main\n wavs, sample_rate = model.generate_custom_voice(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\qwen_tts\\inference\\qwen3_tts_model.py\", line 829, in generate_custom_voice\n talker_codes_list, _ = self.model.generate(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\qwen_tts\\core\\models\\modeling_qwen3_tts.py\", line 2272, in generate\n talker_result = self.talker.generate(\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\generation\\utils.py\", line 2564, in generate\n result = decoding_method(\n ^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\generation\\utils.py\", line 2838, in _sample\n input_ids = torch.cat([input_ids, next_tokens[:, None]], dim=-1)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\\\\wsl.localhost\\Ubuntu\\home\\zhout\\project\\edge_infer\\vllm-omni-edge\\benchmarks\\edge_harness\\experiments\\probe_qwen_tts_directml.py\", line 108, in traced_cat\n return original_cat(tensors, *cat_args, **cat_kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nUnicodeDecodeError: 'utf-8' codec can't decode byte 0xb2 in position 0: invalid start byte\n"
}
main()
File "\\wsl.localhost\Ubuntu\home\zhout\project\edge_infer\vllm-omni-edge\benchmarks\edge_harness\experiments\probe_qwen_tts_directml.py", line 123, in main
wavs, sample_rate = model.generate_custom_voice(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\utils\_contextlib.py", line 116, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\qwen_tts\inference\qwen3_tts_model.py", line 829, in generate_custom_voice
talker_codes_list, _ = self.model.generate(
^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\utils\_contextlib.py", line 116, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\qwen_tts\core\models\modeling_qwen3_tts.py", line 2272, in generate
talker_result = self.talker.generate(
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\utils\_contextlib.py", line 116, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\transformers\generation\utils.py", line 2564, in generate
result = decoding_method(
^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\transformers\generation\utils.py", line 2838, in _sample
input_ids = torch.cat([input_ids, next_tokens[:, None]], dim=-1)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "\\wsl.localhost\Ubuntu\home\zhout\project\edge_infer\vllm-omni-edge\benchmarks\edge_harness\experiments\probe_qwen_tts_directml.py", line 108, in traced_cat
return original_cat(tensors, *cat_args, **cat_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb2 in position 0: invalid start byte
@@ -0,0 +1,36 @@
{
"scope": "standalone real-weight Qwen3-TTS DirectML feasibility; no Omni, streaming, or all-operator placement claim",
"platform": "Windows-11-10.0.26200-SP0",
"python": "3.12.10",
"torch": "2.4.1+cpu",
"torch_directml": "unknown",
"transformers": "4.57.3",
"adapters": [
"NVIDIA GeForce RTX 5090 Laptop GPU",
"AMD Radeon(TM) 890M Graphics"
],
"requested_index": 1,
"target_device": "privateuseone:1",
"model_dir": "C:\\Users\\zhout\\w2\\models\\Qwen3-TTS-0.6B-85e237c",
"talker_sha256": "bc3c7e785eb961179c25450d1acff03f839e0002f2f3a5aeb67b5735c0fa2adb",
"speech_tokenizer_sha256": "836b7b357f5ea43e889936a3709af68dfe3751881acefe4ecf0dbd30ba571258",
"dtype": "float16",
"attention": "sdpa",
"threads": 8,
"text": "Hello from the local computer.",
"speaker": "Ryan",
"max_new_tokens": 64,
"repetition_penalty_override": 1.0,
"workaround_empty_int64_cat": true,
"seed": 42,
"status": "failed",
"cpu_load_s": 2.1119523000670597,
"phase": "generate",
"device_move_s": 0.9917556999716908,
"model_devices": [
"privateuseone:1"
],
"error_type": "RuntimeError",
"error": "probability tensor contains either `inf`, `nan` or element < 0",
"traceback": "Traceback (most recent call last):\n File \"\\\\wsl.localhost\\Ubuntu\\home\\zhout\\project\\edge_infer\\vllm-omni-edge\\benchmarks\\edge_harness\\experiments\\probe_qwen_tts_directml.py\", line 142, in main\n wavs, sample_rate = model.generate_custom_voice(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\qwen_tts\\inference\\qwen3_tts_model.py\", line 829, in generate_custom_voice\n talker_codes_list, _ = self.model.generate(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\qwen_tts\\core\\models\\modeling_qwen3_tts.py\", line 2272, in generate\n talker_result = self.talker.generate(\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\generation\\utils.py\", line 2564, in generate\n result = decoding_method(\n ^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\generation\\utils.py\", line 2787, in _sample\n outputs = model_forward(**model_inputs, return_dict=True)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\nn\\modules\\module.py\", line 1553, in _wrapped_call_impl\n return self._call_impl(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\nn\\modules\\module.py\", line 1562, in _call_impl\n return forward_call(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\utils\\generic.py\", line 918, in wrapper\n output = func(self, *args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\qwen_tts\\core\\models\\modeling_qwen3_tts.py\", line 1671, in forward\n predictor_result = self.code_predictor.generate(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\generation\\utils.py\", line 2564, in generate\n result = decoding_method(\n ^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\generation\\utils.py\", line 2829, in _sample\n next_tokens = torch.multinomial(probs, num_samples=1).squeeze(1)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nRuntimeError: probability tensor contains either `inf`, `nan` or element < 0\n"
}
@@ -0,0 +1,105 @@
'\\wsl.localhost\Ubuntu\home\zhout\project\edge_infer'
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported. Defaulting to Windows directory.
'sox' is not recognized as an internal or external command,
operable program or batch file.
SoX could not be found!
If you do not have SoX, proceed here:
- - - http://sox.sourceforge.net/ - - -
If you do (or think that you should) have SoX, double-check your
path variables.
Setting `pad_token_id` to `eos_token_id`:2150 for open-end generation.
EMPTY_INT64_CAT_IDENTITY
Traceback (most recent call last):
********
Warning: flash-attn is not installed. Will only run the manual PyTorch version. Please install flash-attn for faster inference.
********
{
"scope": "standalone real-weight Qwen3-TTS DirectML feasibility; no Omni, streaming, or all-operator placement claim",
"platform": "Windows-11-10.0.26200-SP0",
"python": "3.12.10",
"torch": "2.4.1+cpu",
"torch_directml": "unknown",
"transformers": "4.57.3",
"adapters": [
"NVIDIA GeForce RTX 5090 Laptop GPU",
"AMD Radeon(TM) 890M Graphics"
],
"requested_index": 1,
"target_device": "privateuseone:1",
"model_dir": "C:\\Users\\zhout\\w2\\models\\Qwen3-TTS-0.6B-85e237c",
"talker_sha256": "bc3c7e785eb961179c25450d1acff03f839e0002f2f3a5aeb67b5735c0fa2adb",
"speech_tokenizer_sha256": "836b7b357f5ea43e889936a3709af68dfe3751881acefe4ecf0dbd30ba571258",
"dtype": "float16",
"attention": "sdpa",
"threads": 8,
"text": "Hello from the local computer.",
"speaker": "Ryan",
File "\\wsl.localhost\Ubuntu\home\zhout\project\edge_infer\vllm-omni-edge\benchmarks\edge_harness\experiments\probe_qwen_tts_directml.py", line 182, in <module>
"max_new_tokens": 64,
"repetition_penalty_override": 1.0,
"workaround_empty_int64_cat": true,
"seed": 42,
"status": "failed",
"cpu_load_s": 2.1119523000670597,
"phase": "generate",
"device_move_s": 0.9917556999716908,
"model_devices": [
"privateuseone:1"
],
"error_type": "RuntimeError",
"error": "probability tensor contains either `inf`, `nan` or element < 0",
"traceback": "Traceback (most recent call last):\n File \"\\\\wsl.localhost\\Ubuntu\\home\\zhout\\project\\edge_infer\\vllm-omni-edge\\benchmarks\\edge_harness\\experiments\\probe_qwen_tts_directml.py\", line 142, in main\n wavs, sample_rate = model.generate_custom_voice(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\qwen_tts\\inference\\qwen3_tts_model.py\", line 829, in generate_custom_voice\n talker_codes_list, _ = self.model.generate(\n ^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\qwen_tts\\core\\models\\modeling_qwen3_tts.py\", line 2272, in generate\n talker_result = self.talker.generate(\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\generation\\utils.py\", line 2564, in generate\n result = decoding_method(\n ^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\generation\\utils.py\", line 2787, in _sample\n outputs = model_forward(**model_inputs, return_dict=True)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\nn\\modules\\module.py\", line 1553, in _wrapped_call_impl\n return self._call_impl(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\nn\\modules\\module.py\", line 1562, in _call_impl\n return forward_call(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\utils\\generic.py\", line 918, in wrapper\n output = func(self, *args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\qwen_tts\\core\\models\\modeling_qwen3_tts.py\", line 1671, in forward\n predictor_result = self.code_predictor.generate(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\torch\\utils\\_contextlib.py\", line 116, in decorate_context\n return func(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\generation\\utils.py\", line 2564, in generate\n result = decoding_method(\n ^^^^^^^^^^^^^^^^\n File \"C:\\Users\\zhout\\w2\\qwen_dml_venv\\Lib\\site-packages\\transformers\\generation\\utils.py\", line 2829, in _sample\n next_tokens = torch.multinomial(probs, num_samples=1).squeeze(1)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nRuntimeError: probability tensor contains either `inf`, `nan` or element < 0\n"
}
main()
File "\\wsl.localhost\Ubuntu\home\zhout\project\edge_infer\vllm-omni-edge\benchmarks\edge_harness\experiments\probe_qwen_tts_directml.py", line 142, in main
wavs, sample_rate = model.generate_custom_voice(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\utils\_contextlib.py", line 116, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\qwen_tts\inference\qwen3_tts_model.py", line 829, in generate_custom_voice
talker_codes_list, _ = self.model.generate(
^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\utils\_contextlib.py", line 116, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\qwen_tts\core\models\modeling_qwen3_tts.py", line 2272, in generate
talker_result = self.talker.generate(
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\utils\_contextlib.py", line 116, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\transformers\generation\utils.py", line 2564, in generate
result = decoding_method(
^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\transformers\generation\utils.py", line 2787, in _sample
outputs = model_forward(**model_inputs, return_dict=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\nn\modules\module.py", line 1553, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\nn\modules\module.py", line 1562, in _call_impl
return forward_call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\transformers\utils\generic.py", line 918, in wrapper
output = func(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\qwen_tts\core\models\modeling_qwen3_tts.py", line 1671, in forward
predictor_result = self.code_predictor.generate(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\torch\utils\_contextlib.py", line 116, in decorate_context
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\transformers\generation\utils.py", line 2564, in generate
result = decoding_method(
^^^^^^^^^^^^^^^^
File "C:\Users\zhout\w2\qwen_dml_venv\Lib\site-packages\transformers\generation\utils.py", line 2829, in _sample
next_tokens = torch.multinomial(probs, num_samples=1).squeeze(1)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: probability tensor contains either `inf`, `nan` or element < 0
@@ -0,0 +1,4 @@
# Preserve native Windows raw records byte-for-byte.
*.json -text -eol
*.log -text -eol
*.wav binary
@@ -0,0 +1,3 @@
# GGUF weights and runtime binaries stay in local model storage.
*.gguf
*.exe
@@ -0,0 +1,35 @@
# Native Windows CPU + Radeon 890M Qwen3-TTS scoped whole-model path
The 0.6B CustomVoice model completed two named English **text-to-WAV** requests in [CrispASR v0.8.35](https://github.com/CrispStrobe/CrispASR/releases/tag/v0.8.35), outside Omni. This is a **joint CPU+iGPU result**: the talker and codec were routed to Radeon 890M Vulkan, while the iterative code predictor was explicitly pinned to CPU FP32. It is not an all-Radeon pass or a CPU+iGPU+NPU pass. The [DirectML route failed quality](../qwen_tts_radeon890m_directml/README.md). Neither route establishes Omni streaming or release qualification.
The host was Windows 11 build 26200 on Ryzen AI 9 HX 370 with Radeon 890M driver `32.0.22018.6001`; an RTX 5090 Laptop was also present. `GGML_VK_VISIBLE_DEVICES=1` exposed only the Radeon adapter, enumerated as `Vulkan0`; `-dev 1` selected the original physical adapter. The [first placement log](crisp_tts_radeon_cp_cpu_20260923.log) records `AMD Radeon(TM) 890M Graphics`, `using preferred GPU backend: Vulkan0`, `code_pred CPU-pinned (72 tensors, 432 MB, copy=f32)`, and `codec: GPU default - loading weights onto Vulkan0`. The [runtime's routing source](https://github.com/CrispStrobe/CrispASR/blob/v0.8.35/src/qwen3_tts.cpp) routes the talker off Vulkan unless `CRISPASR_QWEN3_TTS_VULKAN_NATIVE=1`; that override was set for the passing runs, and the CPU-talkback message was absent. This is placement evidence for the named runtime configuration, not a per-operator profiler trace.
The runtime ZIP `crispasr-windows-x86_64-vulkan.zip` is 36,826,421 bytes, SHA256 `8c4f6483d3dad9ab4066f3853b48306e16e5b4010d1bf42054c81bf439166b3f`; its embedded build reports git `00c9e752` and CPU/Vulkan backends. The talker is the [Q8_0 GGUF conversion](https://huggingface.co/cstr/qwen3-tts-0.6b-customvoice-GGUF/tree/29094dcb46f19b0898616aa9aeb876aa9aa6e086), revision `29094dcb46f19b0898616aa9aeb876aa9aa6e086`, file SHA256 `5227dcbc4df7c5533341d111cc469fa491a48e722b23dd10f553181b52dff2d9` (967,980,192 bytes). The codec is the [F16 tokenizer GGUF](https://huggingface.co/cstr/qwen3-tts-tokenizer-12hz-GGUF/tree/344e279551177654762e5c7d39e217834325f222), revision `344e279551177654762e5c7d39e217834325f222`, SHA256 `70dc95dbfdd9aa5d9d406236ff771d061bf17b0cda02a72513953355606e719b` (358,453,280 bytes). The loader logged a 28-layer/1024-hidden talker, five-layer code predictor, 16 codebooks and 24 kHz mono output. These are quantized/converter artifacts, distinct from the original HF safetensors in the [CPU PyTorch record](../qwen_tts_native_cpu/README.md). The converter's source-checkpoint revision, calibration details and same-checkpoint numerical parity are not established by this record; the two ASR cases are only scoped task checks. Weights and binaries are local, not committed.
| Workload / mode | Observed output | Timing and quality proxy | Raw record |
|---|---|---|---|
| “Hello from the local computer.”, Ryan, seed 42 | 32 frames, 2.56 s / 24 kHz mono WAV | CLI process wall 6.75 s including model load; runtime generation+codec 3.37 s. Separately pinned Whisper tiny.en transcribed the exact sentence (WER 0). | [placement/run log](crisp_tts_radeon_cp_cpu_20260923.log), [WAV](crisp_tts_radeon_cp_cpu_20260923.wav), [ASR report](crisp_tts_radeon_cp_cpu_asr_20260923.json) |
| “The blue car is parked beside the library.”, Ryan, seed 42 | 40 frames, 3.20 s / 24 kHz mono WAV | CLI process wall 7.17 s including model load; runtime generation+codec 4.03 s. Whisper tiny.en transcribed the exact sentence (WER 0). | [run log](crisp_tts_radeon_cp_cpu_second_20260923.log), [WAV](crisp_tts_radeon_cp_cpu_second_20260923.wav), [ASR report](crisp_tts_radeon_cp_cpu_second_asr_20260923.json) |
| Resident HTTP server, first sentence, seed 42 | 1 excluded warmup + 20 serial complete text-to-WAV requests; each had the same 2.56 s PCM audio | Nearest-rank client wall p50/p95 **3.310/3.345 s** (RTF 1.29/1.31). All 20 PCM SHA256 values matched; full WAV-container hashes varied. The saved profile WAV again transcribed exactly (WER 0). | [20-request profile and memory samples](crisp_tts_joint_profile20_pcm_20260923.json), [first measured WAV](crisp_tts_joint_profile20_pcm_20260923.wav), [ASR report](crisp_tts_joint_profile20_pcm_asr_20260923.json), [server log](crisp_tts_joint_server_20260923.stderr.log) |
The server process was already loaded before the measured profile. Its 0.25 s samples during the profile observed at most 3,266,732,032 bytes working set and 4,398,071,808 bytes private, with host available RAM at least 26,836,635,648 bytes. These are **not** loading peaks, model-only unique RAM, or iGPU allocation measurements. The 20 measured requests used one repeated prompt at concurrency one; no playback stream, cancellation, broader speech-quality suite, concurrent admission, power mode or 30-minute thermal run was checked. Whisper tiny.en is an intelligibility proxy, not a perceptual or speaker-fidelity score. The measured RTF exceeds 1, so this does not meet M2's real-time playback gate.
The safe default Vulkan CLI [fell back to CPU for the talker and codec](crisp_tts_radeon_20260923.log); its 7.20 s output must not be counted as a Radeon result. Forcing all Qwen TTS stages onto Vulkan with the [native override](crisp_tts_radeon_native_20260923.log) hit the 360-frame runaway cap without EOS, and [disabling flash attention](crisp_tts_radeon_no_fa_20260923.log) did not repair it; both output WAVs are retained but the runtime explicitly says to discard them. Pinning the code predictor to CPU FP32 yielded the two named passing outputs above. A separate [flash-attention-on diagnostic](crisp_tts_radeon_cp_cpu_fa_20260923.log) produced PCM identical to the first passing no-flash run, so the CPU predictor pin, not the flash-attention setting, was the decisive change in this case. General numerical parity and task quality remain unproven. The result should be integrated only as a bounded whole-session stage with explicit hybrid placement and memory admission, then compared with CPU and other backends on matched output and power conditions.
Reproduce the first named CLI request in PowerShell after verifying the binary and GGUF hashes:
```powershell
$env:GGML_VK_VISIBLE_DEVICES = '1'
$env:CRISPASR_QWEN3_TTS_VULKAN_NATIVE = '1'
$env:CRISPASR_QWEN3_TTS_CP_BACKEND = 'cpu-f32'
$bin = 'C:\Users\zhout\w2\crispasr-v0.8.35-vulkan\crispasr-windows-x86_64-vulkan\crispasr.exe'
$dir = 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b'
& $bin --gpu-backend vulkan -dev 1 --no-flash-attn --verbose `
--backend qwen3-tts-customvoice `
-m "$dir\qwen3-tts-12hz-0.6b-customvoice-q8_0.gguf" `
--codec-model "$dir\qwen3-tts-tokenizer-12hz.gguf" `
--voice ryan --tts 'Hello from the local computer.' `
--tts-output 'C:\Users\zhout\w2\qwen_joint.wav' -n 96 --seed 42
```
For the resident profile, launch the same binary with `--server --host 127.0.0.1 --port 18175` in place of `--tts`/`--tts-output`, retaining the same environment and `--voice ryan`. Then run [profile_crisp_tts_http.py](../../../../experiments/profile_crisp_tts_http.py) with `--server-pid`, `--warmups 1`, `--repeats 20`, `--output-report` and `--output-wav`. The server uses its startup Ryan voice when the HTTP body omits `voice`; the log confirms the selected speaker. The server also auto-loaded an unrelated punctuation component during startup, before timing; this did not enter measured request wall time. Stop the server after profiling.
@@ -0,0 +1,14 @@
{
"scope": "complete serial HTTP text-to-WAV requests in one resident server; speech quality and placement assessed separately",
"endpoint": "http://127.0.0.1:18175/v1/audio/speech",
"text": "Hello from the local computer.",
"seed": 42,
"concurrency": 1,
"nearest_rank_p50_wall_s": 3.3100590999238193,
"nearest_rank_p95_wall_s": 3.3347201000433415,
"all_same_wav_sha256": false,
"server_pid": 59628,
"sampled_max_working_set_bytes": 3265462272,
"sampled_max_private_bytes": 4396638208,
"sampled_min_host_available_bytes": 26668068864
}
@@ -0,0 +1,15 @@
{
"scope": "complete serial HTTP text-to-WAV requests in one resident server; speech quality and placement assessed separately",
"endpoint": "http://127.0.0.1:18175/v1/audio/speech",
"text": "Hello from the local computer.",
"seed": 42,
"concurrency": 1,
"nearest_rank_p50_wall_s": 3.309862600057386,
"nearest_rank_p95_wall_s": 3.345391200040467,
"all_same_wav_sha256": false,
"all_same_pcm_sha256": true,
"server_pid": 59628,
"sampled_max_working_set_bytes": 3266732032,
"sampled_max_private_bytes": 4398071808,
"sampled_min_host_available_bytes": 26836635648
}
@@ -0,0 +1,16 @@
{
"scope": "local Whisper tiny.en ASR proxy for generated speech; no perceptual quality claim",
"asr_model": "openai/whisper-tiny.en",
"asr_revision": "87c7102498dcde7456f24cfd30239ca606ed9063",
"asr_weights_sha256": "db59695928ded6043adaef491a53ef4e12da9611184d77c53baa691a60b958ad",
"transformers": "4.57.3",
"torch": "2.4.1+cpu",
"wav_sha256": "d000699e97685fc0041ec1e374d31879f32a1e84fe8aa8b57fc0c3436e4d32ce",
"input_sample_rate": 24000,
"input_duration_s": 2.56,
"reference_text": "Hello from the local computer.",
"transcript": "Hello from the local computer.",
"word_error_rate": 0.0,
"asr_load_s": 0.8723513999721035,
"asr_inference_s": 0.8797434000298381
}
@@ -0,0 +1,17 @@
Using custom `forced_decoder_ids` from the (generation) config. This is deprecated in favor of the `task` and `language` flags/config options.
{
"scope": "local Whisper tiny.en ASR proxy for generated speech; no perceptual quality claim",
"asr_model": "openai/whisper-tiny.en",
"asr_revision": "87c7102498dcde7456f24cfd30239ca606ed9063",
"asr_weights_sha256": "db59695928ded6043adaef491a53ef4e12da9611184d77c53baa691a60b958ad",
"transformers": "4.57.3",
"torch": "2.4.1+cpu",
"wav_sha256": "d000699e97685fc0041ec1e374d31879f32a1e84fe8aa8b57fc0c3436e4d32ce",
"input_sample_rate": 24000,
"input_duration_s": 2.56,
"reference_text": "Hello from the local computer.",
"transcript": "Hello from the local computer.",
"word_error_rate": 0.0,
"asr_load_s": 0.8723513999721035,
"asr_inference_s": 0.8797434000298381
}
@@ -0,0 +1,214 @@
crispasr 0.8.35 (git 00c9e752, Release) [backends: cpu,vulkan]
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = AMD Radeon(TM) 890M Graphics (AMD proprietary driver) | uma: 1 | fp16: 1 | bf16: 1 | fp4: 0 | warp size: 64 | shared memory: 32768 | int dot: 1 | matrix cores: KHR_coopmat
cpu-isa: OK — built for AVX2/FMA/F16C/BMI2/AVX; host CPU supports the build's ISA baseline
crispasr_init_gpu_backend: using preferred GPU backend: Vulkan0
qwen3_tts: code_pred CPU-pinned (72 tensors, 432 MB, copy=f32)
qwen3_tts: kv cache 448 MiB (head_dim=128 max_ctx=4096 n_kv=8 n_layers=28)
qwen3_tts: loaded C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-12hz-0.6b-customvoice-q8_0.gguf (talker 28L/1024 code_pred 5L vocab 3072)
qwen3_tts: codec: GPU default - loading weights onto Vulkan0
qwen3_tts: codec loaded from 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-tokenizer-12hz.gguf' (8L d=512/1024 rvq=16)
qwen3_tts: codec encoder loaded (SEANet+xfmr+RVQ)
crispasr[qwen3-tts]: codec loaded from 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-tokenizer-12hz.gguf'
crispasr-server: warmup completed in 0 ms
crispasr-server: backend 'qwen3-tts-customvoice' loaded, model 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-12hz-0.6b-customvoice-q8_0.gguf'
crispasr-server: auto-enabling punctuation restoration for backend 'qwen3-tts'
crispasr[punc]: downloading https://huggingface.co/cstr/fireredpunc-GGUF/resolve/main/fireredpunc-q4_k.gguf
crispasr: downloading via WinHTTP...
fireredpunc: 12L, d=768, ffn=3072, heads=12, vocab=21128, labels=5
crispasr_init_gpu_backend: using preferred GPU backend: Vulkan0
crispasr-server: loaded punctuation model 'C:\Users\zhout/.cache/crispasr/fireredpunc-q4_k.gguf'
crispasr-server: listening on 127.0.0.1:18175
POST /inference — upload audio (native JSON)
POST /v1/audio/transcriptions — OpenAI-compatible API
POST /v1/audio/speech — TTS (OpenAI-compatible)
POST /load — hot-swap model
GET /health — server status
GET /backends — list backends
GET /v1/models — model info
GET /v1/voices — list voices in --voice-dir
/voices, /v1/audio/voices — aliases (llama-swap compat)
POST /v1/voices — upload voice file (multipart)
DELETE /v1/voices/:name — delete voice file
crispasr-server: warning: --voice-dir not set; /v1/voices will return empty and /v1/audio/speech will reject requests with a 'voice' field
crispasr: warning: 'qwen3-tts-customvoice' does not record whether its preset voice belongs to a real person, so no spoken AI
disclosure was added. If the voice is that of an identifiable individual, the output is a
deep fake under EU AI Act Art. 3(60) and you carry the Art. 50(4) duty to disclose it.
Pass --speaker-identity real_person to have CrispASR prepend the disclosure, or
--speaker-identity synthetic to silence this.
qwen3_tts: selected CustomVoice speaker 'ryan' (spk_id=3061)
crispasr[qwen3-tts]: CustomVoice speaker = 'ryan' (available: aiden, dylan, eric, ono_anna, ryan, serena, sohee, uncle_fu, vivian)
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3069 ms codec=207 ms total=3276 ms audio=2.6 s rtf=1.280
crispasr-server: synthesized 2.6s audio in 3.55s (RTF=1.39) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3430 ms codec=205 ms total=3635 ms audio=2.6 s rtf=1.420
crispasr-server: synthesized 2.6s audio in 3.64s (RTF=1.42) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3077 ms codec=204 ms total=3282 ms audio=2.6 s rtf=1.282
crispasr-server: synthesized 2.6s audio in 3.28s (RTF=1.28) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3079 ms codec=204 ms total=3283 ms audio=2.6 s rtf=1.283
crispasr-server: synthesized 2.6s audio in 3.29s (RTF=1.28) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3078 ms codec=205 ms total=3283 ms audio=2.6 s rtf=1.282
crispasr-server: synthesized 2.6s audio in 3.28s (RTF=1.28) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3090 ms codec=210 ms total=3300 ms audio=2.6 s rtf=1.289
crispasr-server: synthesized 2.6s audio in 3.30s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3099 ms codec=204 ms total=3303 ms audio=2.6 s rtf=1.290
crispasr-server: synthesized 2.6s audio in 3.30s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3086 ms codec=208 ms total=3294 ms audio=2.6 s rtf=1.287
crispasr-server: synthesized 2.6s audio in 3.30s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3070 ms codec=206 ms total=3276 ms audio=2.6 s rtf=1.280
crispasr-server: synthesized 2.6s audio in 3.29s (RTF=1.28) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3069 ms codec=204 ms total=3273 ms audio=2.6 s rtf=1.279
crispasr-server: synthesized 2.6s audio in 3.27s (RTF=1.28) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3100 ms codec=205 ms total=3305 ms audio=2.6 s rtf=1.291
crispasr-server: synthesized 2.6s audio in 3.31s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3083 ms codec=209 ms total=3292 ms audio=2.6 s rtf=1.286
crispasr-server: synthesized 2.6s audio in 3.29s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3072 ms codec=226 ms total=3299 ms audio=2.6 s rtf=1.289
crispasr-server: synthesized 2.6s audio in 3.30s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3083 ms codec=209 ms total=3293 ms audio=2.6 s rtf=1.286
crispasr-server: synthesized 2.6s audio in 3.29s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3086 ms codec=215 ms total=3301 ms audio=2.6 s rtf=1.289
crispasr-server: synthesized 2.6s audio in 3.30s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=2997 ms codec=211 ms total=3209 ms audio=2.6 s rtf=1.253
crispasr-server: synthesized 2.6s audio in 3.21s (RTF=1.25) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3086 ms codec=209 ms total=3294 ms audio=2.6 s rtf=1.287
crispasr-server: synthesized 2.6s audio in 3.30s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3089 ms codec=209 ms total=3298 ms audio=2.6 s rtf=1.288
crispasr-server: synthesized 2.6s audio in 3.30s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3105 ms codec=212 ms total=3317 ms audio=2.6 s rtf=1.296
crispasr-server: synthesized 2.6s audio in 3.33s (RTF=1.30) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3088 ms codec=203 ms total=3291 ms audio=2.6 s rtf=1.285
crispasr-server: synthesized 2.6s audio in 3.29s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3079 ms codec=207 ms total=3286 ms audio=2.6 s rtf=1.284
crispasr-server: synthesized 2.6s audio in 3.29s (RTF=1.28) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3092 ms codec=205 ms total=3297 ms audio=2.6 s rtf=1.288
crispasr-server: synthesized 2.6s audio in 3.30s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3209 ms codec=203 ms total=3412 ms audio=2.6 s rtf=1.333
crispasr-server: synthesized 2.6s audio in 3.41s (RTF=1.33) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3061 ms codec=206 ms total=3267 ms audio=2.6 s rtf=1.276
crispasr-server: synthesized 2.6s audio in 3.27s (RTF=1.28) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3106 ms codec=206 ms total=3312 ms audio=2.6 s rtf=1.294
crispasr-server: synthesized 2.6s audio in 3.31s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3075 ms codec=207 ms total=3282 ms audio=2.6 s rtf=1.282
crispasr-server: synthesized 2.6s audio in 3.29s (RTF=1.28) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3093 ms codec=205 ms total=3298 ms audio=2.6 s rtf=1.288
crispasr-server: synthesized 2.6s audio in 3.30s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3097 ms codec=203 ms total=3300 ms audio=2.6 s rtf=1.289
crispasr-server: synthesized 2.6s audio in 3.30s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3079 ms codec=204 ms total=3283 ms audio=2.6 s rtf=1.282
crispasr-server: synthesized 2.6s audio in 3.28s (RTF=1.28) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3079 ms codec=209 ms total=3288 ms audio=2.6 s rtf=1.284
crispasr-server: synthesized 2.6s audio in 3.29s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3073 ms codec=207 ms total=3279 ms audio=2.6 s rtf=1.281
crispasr-server: synthesized 2.6s audio in 3.28s (RTF=1.28) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3091 ms codec=205 ms total=3296 ms audio=2.6 s rtf=1.287
crispasr-server: synthesized 2.6s audio in 3.30s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3082 ms codec=203 ms total=3284 ms audio=2.6 s rtf=1.283
crispasr-server: synthesized 2.6s audio in 3.29s (RTF=1.28) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3066 ms codec=207 ms total=3273 ms audio=2.6 s rtf=1.279
crispasr-server: synthesized 2.6s audio in 3.28s (RTF=1.28) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3074 ms codec=203 ms total=3277 ms audio=2.6 s rtf=1.280
crispasr-server: synthesized 2.6s audio in 3.28s (RTF=1.28) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3069 ms codec=218 ms total=3287 ms audio=2.6 s rtf=1.284
crispasr-server: synthesized 2.6s audio in 3.29s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3086 ms codec=205 ms total=3292 ms audio=2.6 s rtf=1.286
crispasr-server: synthesized 2.6s audio in 3.29s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3107 ms codec=204 ms total=3312 ms audio=2.6 s rtf=1.294
crispasr-server: synthesized 2.6s audio in 3.31s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3113 ms codec=211 ms total=3324 ms audio=2.6 s rtf=1.299
crispasr-server: synthesized 2.6s audio in 3.34s (RTF=1.30) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3075 ms codec=213 ms total=3289 ms audio=2.6 s rtf=1.285
crispasr-server: synthesized 2.6s audio in 3.29s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3110 ms codec=205 ms total=3315 ms audio=2.6 s rtf=1.295
crispasr-server: synthesized 2.6s audio in 3.32s (RTF=1.30) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3101 ms codec=207 ms total=3307 ms audio=2.6 s rtf=1.292
crispasr-server: synthesized 2.6s audio in 3.31s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3087 ms codec=216 ms total=3303 ms audio=2.6 s rtf=1.290
crispasr-server: synthesized 2.6s audio in 3.31s (RTF=1.29) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
@@ -0,0 +1,69 @@
crispasr 0.8.35 (git 00c9e752, Release) [backends: cpu,vulkan]
=== build info ===
version : 0.8.35
git sha : 00c9e752
git date : 2026-09-21T20:44:31Z
git subject : release-_bump_VERSION_to_0.8.35
build date : 2026-09-21T21:04:24Z
build type : Release
compiler : msvc 1951
os : windows
arch : x86_64
ggml backends : cpu,vulkan
=== runtime env ===
PATH = C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\powershell;C:\Users\zhout\.codex\tmp\arg0\codex-arg05Acw4D;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\libheif\libheif\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\jxrlib\jxrlib\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\poppler\Library\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\bin\override;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.4\bin\x64;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.4\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA App\NvDLISR;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Program Files\Git\cmd;C:\Program Files\NVIDIA Corporation\Nsight Compute 2026.3.0\;C:\Users\zhout\.cargo\bin;C:\Users\zhout\AppData\Local\Programs\Python\Python312\Scripts\;C:\Users\zhout\AppData\Local\Programs\Python\Python312\;C:\Users\zhout\AppData\Local\Programs\Python\Launcher\;c:\Users\zhout\AppData\Local\Programs\cursor\resources\app\codeBin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\powershell;C:\Users\zhout\AppData\Local\Microsoft\WindowsApps;C:\Users\zhout\AppData\Local\Programs\cursor\resources\app\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\bin\fallback;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\node\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\git\cmd;C:\Program Files\WindowsApps\OpenAI.Codex_26.917.6896.0_x64__2p2nqsd0c76g0\app\resources
LD_LIBRARY_PATH = (unset)
LIBRARY_PATH = (unset)
CUDA_HOME = (unset)
CUDA_PATH = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.4
CUDA_VISIBLE_DEVICES = 1
NVIDIA_VISIBLE_DEVICES = (unset)
NVIDIA_DRIVER_CAPABILITIES = (unset)
GGML_CUDA_DEBUG = 1
GGML_VK_VISIBLE_DEVICES = 1
GGML_VK_PIPELINE_CACHE_DEBUG = 1
CRISPASR_USE_CUDA_COMPAT = (unset)
CRISPASR_BACKEND = (unset)
CRISPASR_CACHE_DIR = (unset)
=== ggml backends + devices ===
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = AMD Radeon(TM) 890M Graphics (AMD proprietary driver) | uma: 1 | fp16: 1 | bf16: 1 | fp4: 0 | warp size: 64 | shared memory: 32768 | int dot: 1 | matrix cores: KHR_coopmat
registered backends: 2
[0] Vulkan (devices: 1)
[1] CPU (devices: 1)
registered devices : 2
[0] igpu name=Vulkan0 desc=AMD Radeon(TM) 890M Graphics mem=46080/48505 MiB id=?
[1] cpu name=CPU desc=AMD Ryzen AI 9 HX 370 w/ Radeon 890M mem=28341/64633 MiB id=?
crispasr[verbose]: model arg = 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-12hz-0.6b-customvoice-q8_0.gguf'
crispasr[verbose]: backend arg = 'qwen3-tts-customvoice'
crispasr[verbose]: use_gpu = true
crispasr[verbose]: gpu_backend = 'vulkan'
crispasr[verbose]: gpu_device = 1
crispasr[verbose]: cache_dir override = '(default)'
crispasr[verbose]: auto_download = false
crispasr[verbose]: n_threads = 4
crispasr[verbose]: flash_attn = true
crispasr[verbose]: resolved model = 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-12hz-0.6b-customvoice-q8_0.gguf'
crispasr_init_gpu_backend: using preferred GPU backend: Vulkan0
qwen3_tts: Vulkan backend detected — running talker on CPU (#304 Vulkan miscompute; set CRISPASR_QWEN3_TTS_VULKAN_NATIVE=1 to override)
qwen3_tts: kv cache 448 MiB (head_dim=128 max_ctx=4096 n_kv=8 n_layers=28)
qwen3_tts: loaded C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-12hz-0.6b-customvoice-q8_0.gguf (talker 28L/1024 code_pred 5L vocab 3072)
qwen3_tts: codec: CPU default - loading weights onto CPU
qwen3_tts: codec loaded from 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-tokenizer-12hz.gguf' (8L d=512/1024 rvq=16)
qwen3_tts: codec encoder loaded (SEANet+xfmr+RVQ)
crispasr[qwen3-tts]: codec loaded from 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-tokenizer-12hz.gguf'
crispasr[verbose]: backend 'qwen3-tts-customvoice' initialised OK
crispasr: warning: 'qwen3-tts-customvoice' does not record whether its preset voice belongs to a real person, so no spoken AI
disclosure was added. If the voice is that of an identifiable individual, the output is a
deep fake under EU AI Act Art. 3(60) and you carry the Art. 50(4) duty to disclose it.
Pass --speaker-identity real_person to have CrispASR prepend the disclosure, or
--speaker-identity synthetic to silence this.
qwen3_tts: selected CustomVoice speaker 'ryan' (spk_id=3061)
crispasr[qwen3-tts]: CustomVoice speaker = 'ryan' (available: aiden, dylan, eric, ono_anna, ryan, serena, sohee, uncle_fu, vivian)
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 90 frames × 16 codebooks = 1440 codes
qwen3_tts: perf — codes=3475 ms codec=3329 ms total=6804 ms audio=7.2 s rtf=0.945
crispasr: TTS output written to 'C:\Users\zhout\w2\crisp_tts_radeon_20260923.wav' (172800 samples @ 24000 Hz, 7.20 sec)
@@ -0,0 +1,69 @@
crispasr 0.8.35 (git 00c9e752, Release) [backends: cpu,vulkan]
=== build info ===
version : 0.8.35
git sha : 00c9e752
git date : 2026-09-21T20:44:31Z
git subject : release-_bump_VERSION_to_0.8.35
build date : 2026-09-21T21:04:24Z
build type : Release
compiler : msvc 1951
os : windows
arch : x86_64
ggml backends : cpu,vulkan
=== runtime env ===
PATH = C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\powershell;C:\Users\zhout\.codex\tmp\arg0\codex-arg05Acw4D;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\libheif\libheif\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\jxrlib\jxrlib\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\poppler\Library\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\bin\override;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.4\bin\x64;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.4\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA App\NvDLISR;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Program Files\Git\cmd;C:\Program Files\NVIDIA Corporation\Nsight Compute 2026.3.0\;C:\Users\zhout\.cargo\bin;C:\Users\zhout\AppData\Local\Programs\Python\Python312\Scripts\;C:\Users\zhout\AppData\Local\Programs\Python\Python312\;C:\Users\zhout\AppData\Local\Programs\Python\Launcher\;c:\Users\zhout\AppData\Local\Programs\cursor\resources\app\codeBin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\powershell;C:\Users\zhout\AppData\Local\Microsoft\WindowsApps;C:\Users\zhout\AppData\Local\Programs\cursor\resources\app\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\bin\fallback;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\node\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\git\cmd;C:\Program Files\WindowsApps\OpenAI.Codex_26.917.6896.0_x64__2p2nqsd0c76g0\app\resources
LD_LIBRARY_PATH = (unset)
LIBRARY_PATH = (unset)
CUDA_HOME = (unset)
CUDA_PATH = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.4
CUDA_VISIBLE_DEVICES = 1
NVIDIA_VISIBLE_DEVICES = (unset)
NVIDIA_DRIVER_CAPABILITIES = (unset)
GGML_CUDA_DEBUG = 1
GGML_VK_VISIBLE_DEVICES = 1
GGML_VK_PIPELINE_CACHE_DEBUG = 1
CRISPASR_USE_CUDA_COMPAT = (unset)
CRISPASR_BACKEND = (unset)
CRISPASR_CACHE_DIR = (unset)
=== ggml backends + devices ===
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = AMD Radeon(TM) 890M Graphics (AMD proprietary driver) | uma: 1 | fp16: 1 | bf16: 1 | fp4: 0 | warp size: 64 | shared memory: 32768 | int dot: 1 | matrix cores: KHR_coopmat
registered backends: 2
[0] Vulkan (devices: 1)
[1] CPU (devices: 1)
registered devices : 2
[0] igpu name=Vulkan0 desc=AMD Radeon(TM) 890M Graphics mem=46080/48505 MiB id=?
[1] cpu name=CPU desc=AMD Ryzen AI 9 HX 370 w/ Radeon 890M mem=28721/64633 MiB id=?
crispasr[verbose]: model arg = 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-12hz-0.6b-customvoice-q8_0.gguf'
crispasr[verbose]: backend arg = 'qwen3-tts-customvoice'
crispasr[verbose]: use_gpu = true
crispasr[verbose]: gpu_backend = 'vulkan'
crispasr[verbose]: gpu_device = 1
crispasr[verbose]: cache_dir override = '(default)'
crispasr[verbose]: auto_download = false
crispasr[verbose]: n_threads = 4
crispasr[verbose]: flash_attn = false
crispasr[verbose]: resolved model = 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-12hz-0.6b-customvoice-q8_0.gguf'
crispasr_init_gpu_backend: using preferred GPU backend: Vulkan0
qwen3_tts: code_pred CPU-pinned (72 tensors, 432 MB, copy=f32)
qwen3_tts: kv cache 448 MiB (head_dim=128 max_ctx=4096 n_kv=8 n_layers=28)
qwen3_tts: loaded C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-12hz-0.6b-customvoice-q8_0.gguf (talker 28L/1024 code_pred 5L vocab 3072)
qwen3_tts: codec: GPU default - loading weights onto Vulkan0
qwen3_tts: codec loaded from 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-tokenizer-12hz.gguf' (8L d=512/1024 rvq=16)
qwen3_tts: codec encoder loaded (SEANet+xfmr+RVQ)
crispasr[qwen3-tts]: codec loaded from 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-tokenizer-12hz.gguf'
crispasr[verbose]: backend 'qwen3-tts-customvoice' initialised OK
crispasr: warning: 'qwen3-tts-customvoice' does not record whether its preset voice belongs to a real person, so no spoken AI
disclosure was added. If the voice is that of an identifiable individual, the output is a
deep fake under EU AI Act Art. 3(60) and you carry the Art. 50(4) duty to disclose it.
Pass --speaker-identity real_person to have CrispASR prepend the disclosure, or
--speaker-identity synthetic to silence this.
qwen3_tts: selected CustomVoice speaker 'ryan' (spk_id=3061)
crispasr[qwen3-tts]: CustomVoice speaker = 'ryan' (available: aiden, dylan, eric, ono_anna, ryan, serena, sohee, uncle_fu, vivian)
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3023 ms codec=345 ms total=3369 ms audio=2.6 s rtf=1.316
crispasr: TTS output written to 'C:\Users\zhout\w2\crisp_tts_radeon_cp_cpu_20260923.wav' (61440 samples @ 24000 Hz, 2.56 sec)
@@ -0,0 +1,16 @@
{
"scope": "local Whisper tiny.en ASR proxy for generated speech; no perceptual quality claim",
"asr_model": "openai/whisper-tiny.en",
"asr_revision": "87c7102498dcde7456f24cfd30239ca606ed9063",
"asr_weights_sha256": "db59695928ded6043adaef491a53ef4e12da9611184d77c53baa691a60b958ad",
"transformers": "4.57.3",
"torch": "2.4.1+cpu",
"wav_sha256": "95253f7aab1b5721733395a229d09f96e7d6fff67ca9166554d5d88104a52016",
"input_sample_rate": 24000,
"input_duration_s": 2.56,
"reference_text": "Hello from the local computer.",
"transcript": "Hello from the local computer.",
"word_error_rate": 0.0,
"asr_load_s": 0.8987498000496998,
"asr_inference_s": 0.8767790000420064
}
@@ -0,0 +1,17 @@
Using custom `forced_decoder_ids` from the (generation) config. This is deprecated in favor of the `task` and `language` flags/config options.
{
"scope": "local Whisper tiny.en ASR proxy for generated speech; no perceptual quality claim",
"asr_model": "openai/whisper-tiny.en",
"asr_revision": "87c7102498dcde7456f24cfd30239ca606ed9063",
"asr_weights_sha256": "db59695928ded6043adaef491a53ef4e12da9611184d77c53baa691a60b958ad",
"transformers": "4.57.3",
"torch": "2.4.1+cpu",
"wav_sha256": "95253f7aab1b5721733395a229d09f96e7d6fff67ca9166554d5d88104a52016",
"input_sample_rate": 24000,
"input_duration_s": 2.56,
"reference_text": "Hello from the local computer.",
"transcript": "Hello from the local computer.",
"word_error_rate": 0.0,
"asr_load_s": 0.8987498000496998,
"asr_inference_s": 0.8767790000420064
}
@@ -0,0 +1,69 @@
crispasr 0.8.35 (git 00c9e752, Release) [backends: cpu,vulkan]
=== build info ===
version : 0.8.35
git sha : 00c9e752
git date : 2026-09-21T20:44:31Z
git subject : release-_bump_VERSION_to_0.8.35
build date : 2026-09-21T21:04:24Z
build type : Release
compiler : msvc 1951
os : windows
arch : x86_64
ggml backends : cpu,vulkan
=== runtime env ===
PATH = C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\powershell;C:\Users\zhout\.codex\tmp\arg0\codex-arg05Acw4D;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\libheif\libheif\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\jxrlib\jxrlib\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\poppler\Library\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\bin\override;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.4\bin\x64;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.4\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA App\NvDLISR;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Program Files\Git\cmd;C:\Program Files\NVIDIA Corporation\Nsight Compute 2026.3.0\;C:\Users\zhout\.cargo\bin;C:\Users\zhout\AppData\Local\Programs\Python\Python312\Scripts\;C:\Users\zhout\AppData\Local\Programs\Python\Python312\;C:\Users\zhout\AppData\Local\Programs\Python\Launcher\;c:\Users\zhout\AppData\Local\Programs\cursor\resources\app\codeBin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\powershell;C:\Users\zhout\AppData\Local\Microsoft\WindowsApps;C:\Users\zhout\AppData\Local\Programs\cursor\resources\app\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\bin\fallback;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\node\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\git\cmd;C:\Program Files\WindowsApps\OpenAI.Codex_26.917.6896.0_x64__2p2nqsd0c76g0\app\resources
LD_LIBRARY_PATH = (unset)
LIBRARY_PATH = (unset)
CUDA_HOME = (unset)
CUDA_PATH = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.4
CUDA_VISIBLE_DEVICES = 1
NVIDIA_VISIBLE_DEVICES = (unset)
NVIDIA_DRIVER_CAPABILITIES = (unset)
GGML_CUDA_DEBUG = 1
GGML_VK_VISIBLE_DEVICES = 1
GGML_VK_PIPELINE_CACHE_DEBUG = 1
CRISPASR_USE_CUDA_COMPAT = (unset)
CRISPASR_BACKEND = (unset)
CRISPASR_CACHE_DIR = (unset)
=== ggml backends + devices ===
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = AMD Radeon(TM) 890M Graphics (AMD proprietary driver) | uma: 1 | fp16: 1 | bf16: 1 | fp4: 0 | warp size: 64 | shared memory: 32768 | int dot: 1 | matrix cores: KHR_coopmat
registered backends: 2
[0] Vulkan (devices: 1)
[1] CPU (devices: 1)
registered devices : 2
[0] igpu name=Vulkan0 desc=AMD Radeon(TM) 890M Graphics mem=46080/48505 MiB id=?
[1] cpu name=CPU desc=AMD Ryzen AI 9 HX 370 w/ Radeon 890M mem=28654/64633 MiB id=?
crispasr[verbose]: model arg = 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-12hz-0.6b-customvoice-q8_0.gguf'
crispasr[verbose]: backend arg = 'qwen3-tts-customvoice'
crispasr[verbose]: use_gpu = true
crispasr[verbose]: gpu_backend = 'vulkan'
crispasr[verbose]: gpu_device = 1
crispasr[verbose]: cache_dir override = '(default)'
crispasr[verbose]: auto_download = false
crispasr[verbose]: n_threads = 4
crispasr[verbose]: flash_attn = true
crispasr[verbose]: resolved model = 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-12hz-0.6b-customvoice-q8_0.gguf'
crispasr_init_gpu_backend: using preferred GPU backend: Vulkan0
qwen3_tts: code_pred CPU-pinned (72 tensors, 432 MB, copy=f32)
qwen3_tts: kv cache 448 MiB (head_dim=128 max_ctx=4096 n_kv=8 n_layers=28)
qwen3_tts: loaded C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-12hz-0.6b-customvoice-q8_0.gguf (talker 28L/1024 code_pred 5L vocab 3072)
qwen3_tts: codec: GPU default - loading weights onto Vulkan0
qwen3_tts: codec loaded from 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-tokenizer-12hz.gguf' (8L d=512/1024 rvq=16)
qwen3_tts: codec encoder loaded (SEANet+xfmr+RVQ)
crispasr[qwen3-tts]: codec loaded from 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-tokenizer-12hz.gguf'
crispasr[verbose]: backend 'qwen3-tts-customvoice' initialised OK
crispasr: warning: 'qwen3-tts-customvoice' does not record whether its preset voice belongs to a real person, so no spoken AI
disclosure was added. If the voice is that of an identifiable individual, the output is a
deep fake under EU AI Act Art. 3(60) and you carry the Art. 50(4) duty to disclose it.
Pass --speaker-identity real_person to have CrispASR prepend the disclosure, or
--speaker-identity synthetic to silence this.
qwen3_tts: selected CustomVoice speaker 'ryan' (spk_id=3061)
crispasr[qwen3-tts]: CustomVoice speaker = 'ryan' (available: aiden, dylan, eric, ono_anna, ryan, serena, sohee, uncle_fu, vivian)
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: produced 32 frames × 16 codebooks = 512 codes
qwen3_tts: perf — codes=3042 ms codec=209 ms total=3251 ms audio=2.6 s rtf=1.270
crispasr: TTS output written to 'C:\Users\zhout\w2\crisp_tts_radeon_cp_cpu_fa_20260923.wav' (61440 samples @ 24000 Hz, 2.56 sec)
@@ -0,0 +1,69 @@
crispasr 0.8.35 (git 00c9e752, Release) [backends: cpu,vulkan]
=== build info ===
version : 0.8.35
git sha : 00c9e752
git date : 2026-09-21T20:44:31Z
git subject : release-_bump_VERSION_to_0.8.35
build date : 2026-09-21T21:04:24Z
build type : Release
compiler : msvc 1951
os : windows
arch : x86_64
ggml backends : cpu,vulkan
=== runtime env ===
PATH = C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\powershell;C:\Users\zhout\.codex\tmp\arg0\codex-arg05Acw4D;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\libheif\libheif\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\jxrlib\jxrlib\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\poppler\Library\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\bin\override;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.4\bin\x64;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.4\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA App\NvDLISR;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Program Files\Git\cmd;C:\Program Files\NVIDIA Corporation\Nsight Compute 2026.3.0\;C:\Users\zhout\.cargo\bin;C:\Users\zhout\AppData\Local\Programs\Python\Python312\Scripts\;C:\Users\zhout\AppData\Local\Programs\Python\Python312\;C:\Users\zhout\AppData\Local\Programs\Python\Launcher\;c:\Users\zhout\AppData\Local\Programs\cursor\resources\app\codeBin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\powershell;C:\Users\zhout\AppData\Local\Microsoft\WindowsApps;C:\Users\zhout\AppData\Local\Programs\cursor\resources\app\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\bin\fallback;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\node\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\git\cmd;C:\Program Files\WindowsApps\OpenAI.Codex_26.917.6896.0_x64__2p2nqsd0c76g0\app\resources
LD_LIBRARY_PATH = (unset)
LIBRARY_PATH = (unset)
CUDA_HOME = (unset)
CUDA_PATH = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.4
CUDA_VISIBLE_DEVICES = 1
NVIDIA_VISIBLE_DEVICES = (unset)
NVIDIA_DRIVER_CAPABILITIES = (unset)
GGML_CUDA_DEBUG = 1
GGML_VK_VISIBLE_DEVICES = 1
GGML_VK_PIPELINE_CACHE_DEBUG = 1
CRISPASR_USE_CUDA_COMPAT = (unset)
CRISPASR_BACKEND = (unset)
CRISPASR_CACHE_DIR = (unset)
=== ggml backends + devices ===
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = AMD Radeon(TM) 890M Graphics (AMD proprietary driver) | uma: 1 | fp16: 1 | bf16: 1 | fp4: 0 | warp size: 64 | shared memory: 32768 | int dot: 1 | matrix cores: KHR_coopmat
registered backends: 2
[0] Vulkan (devices: 1)
[1] CPU (devices: 1)
registered devices : 2
[0] igpu name=Vulkan0 desc=AMD Radeon(TM) 890M Graphics mem=46080/48505 MiB id=?
[1] cpu name=CPU desc=AMD Ryzen AI 9 HX 370 w/ Radeon 890M mem=28779/64633 MiB id=?
crispasr[verbose]: model arg = 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-12hz-0.6b-customvoice-q8_0.gguf'
crispasr[verbose]: backend arg = 'qwen3-tts-customvoice'
crispasr[verbose]: use_gpu = true
crispasr[verbose]: gpu_backend = 'vulkan'
crispasr[verbose]: gpu_device = 1
crispasr[verbose]: cache_dir override = '(default)'
crispasr[verbose]: auto_download = false
crispasr[verbose]: n_threads = 4
crispasr[verbose]: flash_attn = false
crispasr[verbose]: resolved model = 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-12hz-0.6b-customvoice-q8_0.gguf'
crispasr_init_gpu_backend: using preferred GPU backend: Vulkan0
qwen3_tts: code_pred CPU-pinned (72 tensors, 432 MB, copy=f32)
qwen3_tts: kv cache 448 MiB (head_dim=128 max_ctx=4096 n_kv=8 n_layers=28)
qwen3_tts: loaded C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-12hz-0.6b-customvoice-q8_0.gguf (talker 28L/1024 code_pred 5L vocab 3072)
qwen3_tts: codec: GPU default - loading weights onto Vulkan0
qwen3_tts: codec loaded from 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-tokenizer-12hz.gguf' (8L d=512/1024 rvq=16)
qwen3_tts: codec encoder loaded (SEANet+xfmr+RVQ)
crispasr[qwen3-tts]: codec loaded from 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-tokenizer-12hz.gguf'
crispasr[verbose]: backend 'qwen3-tts-customvoice' initialised OK
crispasr: warning: 'qwen3-tts-customvoice' does not record whether its preset voice belongs to a real person, so no spoken AI
disclosure was added. If the voice is that of an identifiable individual, the output is a
deep fake under EU AI Act Art. 3(60) and you carry the Art. 50(4) duty to disclose it.
Pass --speaker-identity real_person to have CrispASR prepend the disclosure, or
--speaker-identity synthetic to silence this.
qwen3_tts: selected CustomVoice speaker 'ryan' (spk_id=3061)
crispasr[qwen3-tts]: CustomVoice speaker = 'ryan' (available: aiden, dylan, eric, ono_anna, ryan, serena, sohee, uncle_fu, vivian)
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=10 + final=1 = T=19 trailing=1
qwen3_tts: produced 40 frames × 16 codebooks = 640 codes
qwen3_tts: perf — codes=3766 ms codec=264 ms total=4030 ms audio=3.2 s rtf=1.259
crispasr: TTS output written to 'C:\Users\zhout\w2\crisp_tts_radeon_cp_cpu_second_20260923.wav' (76800 samples @ 24000 Hz, 3.20 sec)
@@ -0,0 +1,16 @@
{
"scope": "local Whisper tiny.en ASR proxy for generated speech; no perceptual quality claim",
"asr_model": "openai/whisper-tiny.en",
"asr_revision": "87c7102498dcde7456f24cfd30239ca606ed9063",
"asr_weights_sha256": "db59695928ded6043adaef491a53ef4e12da9611184d77c53baa691a60b958ad",
"transformers": "4.57.3",
"torch": "2.4.1+cpu",
"wav_sha256": "448552ea17e6afe9a97e3458e85cde942ec5cdfe4a028fd36ab10e79b3aab5e8",
"input_sample_rate": 24000,
"input_duration_s": 3.2,
"reference_text": "The blue car is parked beside the library.",
"transcript": "The blue car is parked beside the library.",
"word_error_rate": 0.0,
"asr_load_s": 1.034827800001949,
"asr_inference_s": 0.910699600004591
}
@@ -0,0 +1,17 @@
Using custom `forced_decoder_ids` from the (generation) config. This is deprecated in favor of the `task` and `language` flags/config options.
{
"scope": "local Whisper tiny.en ASR proxy for generated speech; no perceptual quality claim",
"asr_model": "openai/whisper-tiny.en",
"asr_revision": "87c7102498dcde7456f24cfd30239ca606ed9063",
"asr_weights_sha256": "db59695928ded6043adaef491a53ef4e12da9611184d77c53baa691a60b958ad",
"transformers": "4.57.3",
"torch": "2.4.1+cpu",
"wav_sha256": "448552ea17e6afe9a97e3458e85cde942ec5cdfe4a028fd36ab10e79b3aab5e8",
"input_sample_rate": 24000,
"input_duration_s": 3.2,
"reference_text": "The blue car is parked beside the library.",
"transcript": "The blue car is parked beside the library.",
"word_error_rate": 0.0,
"asr_load_s": 1.034827800001949,
"asr_inference_s": 0.910699600004591
}
@@ -0,0 +1,71 @@
crispasr 0.8.35 (git 00c9e752, Release) [backends: cpu,vulkan]
=== build info ===
version : 0.8.35
git sha : 00c9e752
git date : 2026-09-21T20:44:31Z
git subject : release-_bump_VERSION_to_0.8.35
build date : 2026-09-21T21:04:24Z
build type : Release
compiler : msvc 1951
os : windows
arch : x86_64
ggml backends : cpu,vulkan
=== runtime env ===
PATH = C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\powershell;C:\Users\zhout\.codex\tmp\arg0\codex-arg05Acw4D;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\libheif\libheif\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\jxrlib\jxrlib\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\poppler\Library\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\bin\override;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.4\bin\x64;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.4\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA App\NvDLISR;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Program Files\Git\cmd;C:\Program Files\NVIDIA Corporation\Nsight Compute 2026.3.0\;C:\Users\zhout\.cargo\bin;C:\Users\zhout\AppData\Local\Programs\Python\Python312\Scripts\;C:\Users\zhout\AppData\Local\Programs\Python\Python312\;C:\Users\zhout\AppData\Local\Programs\Python\Launcher\;c:\Users\zhout\AppData\Local\Programs\cursor\resources\app\codeBin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\powershell;C:\Users\zhout\AppData\Local\Microsoft\WindowsApps;C:\Users\zhout\AppData\Local\Programs\cursor\resources\app\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\bin\fallback;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\node\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\git\cmd;C:\Program Files\WindowsApps\OpenAI.Codex_26.917.6896.0_x64__2p2nqsd0c76g0\app\resources
LD_LIBRARY_PATH = (unset)
LIBRARY_PATH = (unset)
CUDA_HOME = (unset)
CUDA_PATH = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.4
CUDA_VISIBLE_DEVICES = 1
NVIDIA_VISIBLE_DEVICES = (unset)
NVIDIA_DRIVER_CAPABILITIES = (unset)
GGML_CUDA_DEBUG = 1
GGML_VK_VISIBLE_DEVICES = 1
GGML_VK_PIPELINE_CACHE_DEBUG = 1
CRISPASR_USE_CUDA_COMPAT = (unset)
CRISPASR_BACKEND = (unset)
CRISPASR_CACHE_DIR = (unset)
=== ggml backends + devices ===
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = AMD Radeon(TM) 890M Graphics (AMD proprietary driver) | uma: 1 | fp16: 1 | bf16: 1 | fp4: 0 | warp size: 64 | shared memory: 32768 | int dot: 1 | matrix cores: KHR_coopmat
registered backends: 2
[0] Vulkan (devices: 1)
[1] CPU (devices: 1)
registered devices : 2
[0] igpu name=Vulkan0 desc=AMD Radeon(TM) 890M Graphics mem=46080/48505 MiB id=?
[1] cpu name=CPU desc=AMD Ryzen AI 9 HX 370 w/ Radeon 890M mem=28522/64633 MiB id=?
crispasr[verbose]: model arg = 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-12hz-0.6b-customvoice-q8_0.gguf'
crispasr[verbose]: backend arg = 'qwen3-tts-customvoice'
crispasr[verbose]: use_gpu = true
crispasr[verbose]: gpu_backend = 'vulkan'
crispasr[verbose]: gpu_device = 1
crispasr[verbose]: cache_dir override = '(default)'
crispasr[verbose]: auto_download = false
crispasr[verbose]: n_threads = 4
crispasr[verbose]: flash_attn = true
crispasr[verbose]: resolved model = 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-12hz-0.6b-customvoice-q8_0.gguf'
crispasr_init_gpu_backend: using preferred GPU backend: Vulkan0
qwen3_tts: kv cache 448 MiB (head_dim=128 max_ctx=4096 n_kv=8 n_layers=28)
qwen3_tts: loaded C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-12hz-0.6b-customvoice-q8_0.gguf (talker 28L/1024 code_pred 5L vocab 3072)
qwen3_tts: codec: GPU default - loading weights onto Vulkan0
qwen3_tts: codec loaded from 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-tokenizer-12hz.gguf' (8L d=512/1024 rvq=16)
qwen3_tts: codec encoder loaded (SEANet+xfmr+RVQ)
crispasr[qwen3-tts]: codec loaded from 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-tokenizer-12hz.gguf'
crispasr[verbose]: backend 'qwen3-tts-customvoice' initialised OK
crispasr: warning: 'qwen3-tts-customvoice' does not record whether its preset voice belongs to a real person, so no spoken AI
disclosure was added. If the voice is that of an identifiable individual, the output is a
deep fake under EU AI Act Art. 3(60) and you carry the Art. 50(4) duty to disclose it.
Pass --speaker-identity real_person to have CrispASR prepend the disclosure, or
--speaker-identity synthetic to silence this.
qwen3_tts: selected CustomVoice speaker 'ryan' (spk_id=3061)
crispasr[qwen3-tts]: CustomVoice speaker = 'ryan' (available: aiden, dylan, eric, ono_anna, ryan, serena, sohee, uncle_fu, vivian)
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: cp_direct active (persistent sched-free code_pred graphs)
qwen3_tts: ERROR: talker hit the text-proportional frame cap (360 frames for 30 input codepoints, 28.8 s of audio) without emitting EOS. The output is a runaway and should be discarded. If this reproduces on GPU but not with --gpu-backend cpu, that is expected backend arithmetic amplified by the decode loop, not a miscompute — see issue #337. Raise CRISPASR_QWEN3_TTS_MAX_FRAMES if the text genuinely needs more.
qwen3_tts: produced 360 frames × 16 codebooks = 5760 codes
qwen3_tts: codec: chunked decode T=360 chunk=150 ctx=128
qwen3_tts: perf — codes=19841 ms codec=10534 ms total=30374 ms audio=28.8 s rtf=1.055
crispasr: TTS output written to 'C:\Users\zhout\w2\crisp_tts_radeon_native_20260923.wav' (691200 samples @ 24000 Hz, 28.80 sec)
@@ -0,0 +1,71 @@
crispasr 0.8.35 (git 00c9e752, Release) [backends: cpu,vulkan]
=== build info ===
version : 0.8.35
git sha : 00c9e752
git date : 2026-09-21T20:44:31Z
git subject : release-_bump_VERSION_to_0.8.35
build date : 2026-09-21T21:04:24Z
build type : Release
compiler : msvc 1951
os : windows
arch : x86_64
ggml backends : cpu,vulkan
=== runtime env ===
PATH = C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\powershell;C:\Users\zhout\.codex\tmp\arg0\codex-arg05Acw4D;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\libheif\libheif\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\jxrlib\jxrlib\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\poppler\Library\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\bin\override;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.4\bin\x64;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.4\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA App\NvDLISR;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Program Files\Git\cmd;C:\Program Files\NVIDIA Corporation\Nsight Compute 2026.3.0\;C:\Users\zhout\.cargo\bin;C:\Users\zhout\AppData\Local\Programs\Python\Python312\Scripts\;C:\Users\zhout\AppData\Local\Programs\Python\Python312\;C:\Users\zhout\AppData\Local\Programs\Python\Launcher\;c:\Users\zhout\AppData\Local\Programs\cursor\resources\app\codeBin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\powershell;C:\Users\zhout\AppData\Local\Microsoft\WindowsApps;C:\Users\zhout\AppData\Local\Programs\cursor\resources\app\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\bin\fallback;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\node\bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\git\cmd;C:\Program Files\WindowsApps\OpenAI.Codex_26.917.6896.0_x64__2p2nqsd0c76g0\app\resources
LD_LIBRARY_PATH = (unset)
LIBRARY_PATH = (unset)
CUDA_HOME = (unset)
CUDA_PATH = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.4
CUDA_VISIBLE_DEVICES = 1
NVIDIA_VISIBLE_DEVICES = (unset)
NVIDIA_DRIVER_CAPABILITIES = (unset)
GGML_CUDA_DEBUG = 1
GGML_VK_VISIBLE_DEVICES = 1
GGML_VK_PIPELINE_CACHE_DEBUG = 1
CRISPASR_USE_CUDA_COMPAT = (unset)
CRISPASR_BACKEND = (unset)
CRISPASR_CACHE_DIR = (unset)
=== ggml backends + devices ===
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = AMD Radeon(TM) 890M Graphics (AMD proprietary driver) | uma: 1 | fp16: 1 | bf16: 1 | fp4: 0 | warp size: 64 | shared memory: 32768 | int dot: 1 | matrix cores: KHR_coopmat
registered backends: 2
[0] Vulkan (devices: 1)
[1] CPU (devices: 1)
registered devices : 2
[0] igpu name=Vulkan0 desc=AMD Radeon(TM) 890M Graphics mem=46080/48505 MiB id=?
[1] cpu name=CPU desc=AMD Ryzen AI 9 HX 370 w/ Radeon 890M mem=28665/64633 MiB id=?
crispasr[verbose]: model arg = 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-12hz-0.6b-customvoice-q8_0.gguf'
crispasr[verbose]: backend arg = 'qwen3-tts-customvoice'
crispasr[verbose]: use_gpu = true
crispasr[verbose]: gpu_backend = 'vulkan'
crispasr[verbose]: gpu_device = 1
crispasr[verbose]: cache_dir override = '(default)'
crispasr[verbose]: auto_download = false
crispasr[verbose]: n_threads = 4
crispasr[verbose]: flash_attn = false
crispasr[verbose]: resolved model = 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-12hz-0.6b-customvoice-q8_0.gguf'
crispasr_init_gpu_backend: using preferred GPU backend: Vulkan0
qwen3_tts: kv cache 448 MiB (head_dim=128 max_ctx=4096 n_kv=8 n_layers=28)
qwen3_tts: loaded C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-12hz-0.6b-customvoice-q8_0.gguf (talker 28L/1024 code_pred 5L vocab 3072)
qwen3_tts: codec: GPU default - loading weights onto Vulkan0
qwen3_tts: codec loaded from 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-tokenizer-12hz.gguf' (8L d=512/1024 rvq=16)
qwen3_tts: codec encoder loaded (SEANet+xfmr+RVQ)
crispasr[qwen3-tts]: codec loaded from 'C:\Users\zhout\w2\models\crisp_qwen3tts_0.6b\qwen3-tts-tokenizer-12hz.gguf'
crispasr[verbose]: backend 'qwen3-tts-customvoice' initialised OK
crispasr: warning: 'qwen3-tts-customvoice' does not record whether its preset voice belongs to a real person, so no spoken AI
disclosure was added. If the voice is that of an identifiable individual, the output is a
deep fake under EU AI Act Art. 3(60) and you carry the Art. 50(4) duty to disclose it.
Pass --speaker-identity real_person to have CrispASR prepend the disclosure, or
--speaker-identity synthetic to silence this.
qwen3_tts: selected CustomVoice speaker 'ryan' (spk_id=3061)
crispasr[qwen3-tts]: CustomVoice speaker = 'ryan' (available: aiden, dylan, eric, ono_anna, ryan, serena, sohee, uncle_fu, vivian)
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=7 + final=1 = T=16 trailing=1
qwen3_tts: cp_direct active (persistent sched-free code_pred graphs)
qwen3_tts: ERROR: talker hit the text-proportional frame cap (360 frames for 30 input codepoints, 28.8 s of audio) without emitting EOS. The output is a runaway and should be discarded. If this reproduces on GPU but not with --gpu-backend cpu, that is expected backend arithmetic amplified by the decode loop, not a miscompute — see issue #337. Raise CRISPASR_QWEN3_TTS_MAX_FRAMES if the text genuinely needs more.
qwen3_tts: produced 360 frames × 16 codebooks = 5760 codes
qwen3_tts: codec: chunked decode T=360 chunk=150 ctx=128
qwen3_tts: perf — codes=13797 ms codec=5107 ms total=18904 ms audio=28.8 s rtf=0.656
crispasr: TTS output written to 'C:\Users\zhout\w2\crisp_tts_radeon_no_fa_20260923.wav' (691200 samples @ 24000 Hz, 28.80 sec)
@@ -1,6 +1,6 @@
# E2E check and profiling
All 60 pairings have a disposition. The timing tables below remain the 2026-09-22 measurements. The configuration matrix and affected per-cell reasons incorporate the [2026-09-23 scoped recovery runs](../../../e2e_recovery_20260923/README.md) and [WSL CPU/native Windows expansion](../../../e2e_expansion_20260923/README.md). The expansion adds separate 20-request serial MiniCPM-o text-to-speech profiles on WSL CPU and native Windows GPU, a Spark output-head component profile on the HX370 AMD NPU, complete Spark text-request profiles through standalone llama.cpp on native Windows CPU and Radeon 890M, and a standalone Qwen3-TTS text-to-WAV profile on native Windows CPU. Profiling completion does not imply full release qualification or Omni integration.
All 60 pairings have a disposition. The timing tables below remain the 2026-09-22 measurements. The configuration matrix and affected per-cell reasons incorporate the [2026-09-23 scoped recovery runs](../../../e2e_recovery_20260923/README.md) and [WSL CPU/native Windows expansion](../../../e2e_expansion_20260923/README.md). The expansion adds separate 20-request serial MiniCPM-o text-to-speech profiles on WSL CPU and native Windows GPU, a Spark output-head component profile on the HX370 AMD NPU, complete Spark text-request profiles through standalone llama.cpp on native Windows CPU and Radeon 890M, a standalone Qwen3-TTS text-to-WAV profile on native Windows CPU, and a separate hybrid CPU+Radeon 890M Qwen3-TTS profile. Profiling completion does not imply full release qualification or Omni integration.
## Configuration × model
@@ -12,7 +12,7 @@ NOT E2E means no complete device/model workload was verified. “Scoped E2E” i
| PC HX370: CPU / native Windows | scoped E2E: standalone Spark text | scoped E2E: standalone text → WAV | NOT E2E | NOT E2E | synthetic policy pass |
| PC HX370 + RTX 5090 Laptop / WSL | profile completed | profile completed | scoped E2E: text + image | scoped E2E: text/image/audio → speech | synthetic policy pass |
| PC HX370 + RTX 5090 Laptop / Windows | profile completed | profile completed | NOT E2E | scoped E2E: text/image/audio → speech | synthetic policy pass |
| PC HX370 + Radeon 890M / Windows worker | scoped E2E: standalone Spark text | NOT E2E | NOT E2E | NOT E2E | NOT E2E |
| PC HX370 + Radeon 890M / Windows worker | scoped E2E: standalone Spark text | scoped E2E: Radeon talker/codec + CPU predictor | NOT E2E | NOT E2E | NOT E2E |
| PC HX370 + AMD NPU / Windows worker | NOT E2E (output-head component passed) | NOT E2E | NOT E2E | NOT E2E | NOT E2E |
| PC CPU+iGPU+NPU +/- discrete GPU, joint model execution | NOT E2E | NOT E2E | NOT E2E | NOT E2E | NOT E2E |
| PC Snapdragon X Elite CRD / AI Hub | NOT E2E | NOT E2E | NOT E2E | NOT E2E | NOT E2E |
@@ -46,7 +46,7 @@ NOT E2E means no complete device/model workload was verified. “Scoped E2E” i
| PC HX370 + RTX 5090 Laptop / Windows | MiniCPM-o 4.5 | SCOPED_E2E | The verified checkpoint completed native Windows three-stage BF16 text, one synthetic image, and one synthetic audio input to text+speech in separate constrained plans with 5 GiB thinker host offload and explicit 2,048/512-token limits. Text and all 32 thinker token IDs matched WSL CUDA; a 5.2 s WAV was nonzero. The red-square image produced the same description and 27 thinker token IDs as WSL plus a nonzero 5.2 s WAV in 17.15 s. The 2 s/440 Hz tone produced the same whistling description and nine IDs as WSL plus a nonzero 2.16 s WAV in 8.26 s. The initial text run needed 900/600 s startup limits after a 300 s timeout; a separate 1-warmup/20-measured serial text run had request wall p50 18.38 s/p95 18.73 s, with sampled host available RAM as low as 0.78 GB and pagefile use up to 11.17 GB. These synthetic inputs do not establish general image/audio or speech quality. | Check real image/audio suites, video input, speech intelligibility/alignment, concurrency, interruption, loading-peak admission and sustained thermal/power behavior before broader qualification; [native evidence](../../../e2e_expansion_20260923/README.md). |
| PC HX370 + RTX 5090 Laptop / Windows | InternVLA-A1 | SYNTHETIC_POLICY_PASS | The Place_Markpen checkpoint strict-loaded from a UNC path and produced finite `[1, 50, 32]` actions on synthetic zero observations/noise. Policy/output CUDA placement was checked; one native forward took 1.12 s, with 6.68 GB peak allocated. Relative L2 difference from WSL CUDA was 0.83% (no task tolerance). | Validate real observations/reference actions, units/timestamps, memory and repeated latency before task qualification; [native evidence](../../../e2e_expansion_20260923/README.md). |
| PC HX370 + Radeon 890M / Windows worker | Spark-X2.5 | SCOPED_E2E_STANDALONE | The same real Spark-X2.5-1.7B Q4_K_M GGUF completed text prefill/decode via llama.cpp Vulkan1 on Radeon 890M; the placement log assigns Spark layers to Vulkan1, not the installed RTX 5090. It returned `Paris` and `1511` on the named short/2,463-token inventory inputs. One warmup plus 20 uncached serial inventory requests were 20/20 correct, p50/p95 wall 2.18/2.20 s. Closing a stream after its first content delta was followed by a correct new request. This is outside Omni and has only a post-profile process-memory snapshot, no loading peak, device-memory attribution or sustained power/thermal check. | Add a bounded llama.cpp whole-model stage to Omni, then verify placement, state, memory admission, token quality, cancellation and full-request benefit against CPU; [standalone backend evidence](../../../e2e_expansion_20260923/evidence/spark_radeon890m_llamacpp/README.md). |
| PC HX370 + Radeon 890M / Windows worker | Qwen3-TTS 0.6B CustomVoice | NOT_E2E_PROFILEABLE | No placement- and quality-verified whole-model graph bundle/stateful adapter for this model on this AMD route. Small backend graphs do not establish model support. | Supply and validate the missing matching artifact/backend, then run the complete specified workload. |
| PC HX370 + Radeon 890M / Windows worker | Qwen3-TTS 0.6B CustomVoice | SCOPED_E2E_STANDALONE_HYBRID | The Q8_0 CustomVoice GGUF and F16 codec GGUF completed two named text-to-WAV requests in standalone CrispASR on native Windows with Vulkan0 placed on Radeon 890M for the talker/codec and the 432 MB code predictor explicitly pinned to CPU FP32. Whisper tiny.en transcribed both sentences exactly (WER 0 as an intelligibility proxy). One warmup plus 20 serial resident-server requests for one repeated prompt had nearest-rank client wall p50/p95 3.310/3.345 s for identical 2.56 s PCM (RTF 1.29/1.31). The default Vulkan configuration actually fell back to CPU; forcing all stages to Vulkan ran away to the 360-frame cap. A separate DirectML route failed waveform quality. No Omni binding, playable streaming, loading peak, broad quality or sustained power/thermal run was verified. | Bind the whole hybrid session with explicit CPU+iGPU placement/admission and cancellation; validate quality, real-time playback and full-chain benefit before broader qualification; [joint backend evidence](../../../e2e_expansion_20260923/evidence/qwen_tts_radeon890m_joint/README.md), [failed DirectML route](../../../e2e_expansion_20260923/evidence/qwen_tts_radeon890m_directml/README.md). |
| PC HX370 + Radeon 890M / Windows worker | Qwen3.8-27B | NOT_E2E_PROFILEABLE | FP32 448x448 vision tower: DirectML 85/113 nodes; normalized max error 9.095e-06 versus torch CPU. Historical component path, not full 27B or current graph-stage image-to-text integration. | Recover the hashed tower bundle and qualify its current Omni graph handoff with the language stage. |
| PC HX370 + Radeon 890M / Windows worker | MiniCPM-o 4.5 | NOT_E2E_PROFILEABLE | No placement- and quality-verified whole-model graph bundle/stateful adapter for this model on this AMD route. Small backend graphs do not establish model support. | Supply and validate the missing matching artifact/backend, then run the complete specified workload. |
| PC HX370 + Radeon 890M / Windows worker | InternVLA-A1 | NOT_E2E_PROFILEABLE | No placement- and quality-verified whole-model graph bundle/stateful adapter for this model on this AMD route. Small backend graphs do not establish model support. | Supply and validate the missing matching artifact/backend, then run the complete specified workload. |
+1
View File
@@ -108,6 +108,7 @@ Model support is specific to the following pairings:
| Spark-X2.5-1.7B INT8 | CPU execution; no NVIDIA dependency | Native Windows | Model path not yet qualified; CPU Add graph success is not text-model support. |
| Qwen3-TTS-12Hz-0.6B CustomVoice | CPU + RTX 5090 Laptop GPU; both stages on GPU | WSL / vLLM CUDA | Current branch: real-weight audio streaming completes; playback stalls and remaining M2 gates stay open. |
| Qwen3-TTS-12Hz-0.6B CustomVoice | CPU + RTX 5090 Laptop GPU; both stages on GPU | Native Windows / vLLM CUDA | Current branch: real-weight audio streaming completes; playback stalls and remaining M2 gates stay open. |
| Qwen3-TTS-12Hz-0.6B CustomVoice, Q8_0 GGUF talker + F16 codec | CPU + Radeon 890M iGPU; code predictor on CPU FP32, talker/codec on Radeon | Native Windows / standalone CrispASR Vulkan | Two named text-to-WAV requests and a 20-request serial resident profile passed; [placement and quality evidence](../../benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/qwen_tts_radeon890m_joint/README.md). Still outside Omni, slower than real time and unqualified for streaming or sustained use. |
| Qwen3.8-27B vision tower, FP32 ONNX | CPU + Radeon 890M iGPU | Windows / ORT DirectML | Historical component validation only; not the complete 27B model or a newly qualified graph-stage vision-to-language pipeline. |
| Qwen3.8-27B vision tower, tested A16W8 exports | CPU + AMD NPU | Windows / ORT VitisAI | Tested whole-tower artifacts were rejected by NPU partitioning. This does not rule out other exports or smaller components. |
| Qwen3.8-27B complete multimodal pipeline | CPU/iGPU/NPU, with optional discrete GPU | Target-specific | Fresh public Omni startup fails pipeline resolution on Windows/WSL; earlier bare-vLLM short-text loading is separate and not multimodal validation. |
+11
View File
@@ -56,6 +56,17 @@ documents the isolated Transformers 4.57.3 dependency and short process-memory
trace. Omni CPU stage binding, playable streaming, loading-peak admission and
sustained power/thermal tests remain M2 work.
A separate native Windows CPU+Radeon 890M Qwen3-TTS route now completes two
named text-to-WAV requests in standalone CrispASR using a Q8_0 talker, F16
codec, Vulkan talker/codec and CPU FP32 code predictor. Whisper tiny.en returned
both reference sentences exactly; one warmup and 20 serial resident-server
requests measured p50/p95 3.310/3.345 s for 2.56 s of audio. The
[placement and failed-route record](../../benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/qwen_tts_radeon890m_joint/README.md)
shows that default Vulkan silently becomes CPU for this backend, all-Vulkan
generation ran away, and DirectML did not pass quality. The explicit hybrid
route remains outside Omni and slower than real time. Its CPU+iGPU evidence
does not advance the NPU joint-execution row or mobile M2 gate.
## Architecture and prerequisites
Keep Omni's PipelineConfig, StageRuntime, StageClient, orchestration and admission