Add admitted RTX Vulkan Qwen3-TTS whole-session route
This commit is contained in:
1 parent
74d284acba
commit
5bb16af8ee
33 files changed
+3200
-21
No files matched your search
@@ -0,0 +1,163 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Audit complete-WAV RTX hybrid TTS evidence and Radeon route regression."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import hashlib
|
||||
import json
|
||||
import math
|
||||
import wave
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ARTIFACT_HASHES = {
|
||||
"server_sha256": "999c6af252077195adb723b96da9ee5d3cd291dc7c7a4b32dc493ae148035529",
|
||||
"talker_sha256": "5227dcbc4df7c5533341d111cc469fa491a48e722b23dd10f553181b52dff2d9",
|
||||
"codec_sha256": "70dc95dbfdd9aa5d9d406236ff771d061bf17b0cda02a72513953355606e719b",
|
||||
"punc_sha256": "faf4a43e3135bc307a66194685af00f756e6f4c28c7d9e2dd8f3517cddca5c45",
|
||||
}
|
||||
RTX_PCM = "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c"
|
||||
RADEON_PCM = "57f60228e2b456f6dfefc7e49df862c7bff6ba7cf39231ef1824f615948a1539"
|
||||
PREFILL = "qwen3_tts[customvoice]: prefill role="
|
||||
|
||||
|
||||
def sha256(path: Path) -> str:
|
||||
with path.open("rb") as stream:
|
||||
return hashlib.file_digest(stream, "sha256").hexdigest()
|
||||
|
||||
|
||||
def clean_ledger(value: dict, *, rtx: bool) -> bool:
|
||||
empty = {"host_ram": 0, "gpu_vram": 0} if rtx else {"host_ram": 0}
|
||||
return value["reserved"] == empty and value["owners"] == [] and value["quarantined"] == []
|
||||
|
||||
|
||||
def check_wav(path: Path, frames: int, pcm_hash: str) -> None:
|
||||
with wave.open(str(path), "rb") as wav:
|
||||
if (wav.getnchannels(), wav.getsampwidth(), wav.getframerate(), wav.getnframes()) != (1, 2, 24000, frames):
|
||||
raise ValueError(f"{path.name}: unexpected WAV format or frame count")
|
||||
if hashlib.sha256(wav.readframes(frames)).hexdigest() != pcm_hash:
|
||||
raise ValueError(f"{path.name}: PCM differs from the stage output")
|
||||
|
||||
|
||||
def check_log(path: Path, device: str, started: int = 1) -> int:
|
||||
log = path.read_text(encoding="utf-8", errors="replace")
|
||||
if (f"0 = {device}" not in log or "using preferred GPU backend: Vulkan0" not in log
|
||||
or "code_pred CPU-pinned" not in log
|
||||
or "codec: GPU default - loading weights onto Vulkan0" not in log
|
||||
or "falling back to CPU" in log):
|
||||
raise ValueError(f"{path.name}: hybrid device placement not verified")
|
||||
count = log.count(PREFILL)
|
||||
if count < started:
|
||||
raise ValueError(f"{path.name}: expected TTS prefill absent")
|
||||
return count
|
||||
|
||||
|
||||
def audit(root: Path) -> dict:
|
||||
profile = json.loads((root / "tts_rtx_profile20_report.json").read_text(encoding="utf-8"))
|
||||
smoke = json.loads((root / "tts_rtx_smoke_report.json").read_text(encoding="utf-8"))
|
||||
postguard = json.loads((root / "tts_rtx_postguard_report.json").read_text(encoding="utf-8"))
|
||||
radeon = json.loads((root / "tts_radeon_regression_report.json").read_text(encoding="utf-8"))
|
||||
public = json.loads((root / "tts_rtx_public_report.json").read_text(encoding="utf-8"))
|
||||
asr = json.loads((root / "tts_rtx_smoke_asr.json").read_text(encoding="utf-8"))
|
||||
refused = json.loads((root / "tts_rtx_refused_3gib.json").read_text(encoding="utf-8"))
|
||||
hardware = json.loads((root / "hardware.json").read_text(encoding="utf-8"))
|
||||
if any(report["status"] != "passed" for report in (profile, smoke, postguard, radeon, public, refused)):
|
||||
raise ValueError("one of the TTS runs failed")
|
||||
for report, device, gpu, pcm in (
|
||||
(profile, "NVIDIA GeForce RTX 5090 Laptop GPU", True, RTX_PCM),
|
||||
(smoke, "NVIDIA GeForce RTX 5090 Laptop GPU", True, RTX_PCM),
|
||||
(postguard, "NVIDIA GeForce RTX 5090 Laptop GPU", True, RTX_PCM),
|
||||
(radeon, "AMD Radeon(TM) 890M Graphics", False, RADEON_PCM),
|
||||
):
|
||||
plan = report["execution_plan"]
|
||||
if (plan["artifact_sha256"] != ARTIFACT_HASHES or plan["expected_gpu_name"] != device
|
||||
or plan["ggml_vk_visible_devices"] != ("0" if gpu else "1")
|
||||
or ("gpu_vram" in plan["reserved_bytes"]) != gpu):
|
||||
raise ValueError("TTS artifact, GPU identity or memory pools changed")
|
||||
if (report["checks"][0]["pcm_sha256"] != pcm
|
||||
or report["measured"][0]["pcm_sha256"] != pcm
|
||||
or not clean_ledger(report["ledger_after_shutdown"], rtx=gpu)):
|
||||
raise ValueError("TTS complete WAV or release changed")
|
||||
if (profile["warmup_count"] != 1 or profile["measured_count"] != 20
|
||||
or len(profile["measured"]) != 20 or not profile["all_same_pcm_sha256"]
|
||||
or any(row["pcm_sha256"] != RTX_PCM or row["frames"] != 65280
|
||||
for row in profile["measured"])):
|
||||
raise ValueError("RTX serial profile did not return 20 identical complete WAVs")
|
||||
walls = sorted(row["wall_s"] for row in profile["measured"])
|
||||
if (profile["nearest_rank_p50_wall_s"] != walls[math.ceil(20 * .5) - 1]
|
||||
or profile["nearest_rank_p95_wall_s"] != walls[math.ceil(20 * .95) - 1]):
|
||||
raise ValueError("RTX p50/p95 do not match the retained 20 samples")
|
||||
for report, gpu in ((profile, True), (radeon, False)):
|
||||
abort = report["abort_check"]
|
||||
restart = report["restart_check"]
|
||||
old_plan, fresh_plan = report["execution_plan"], restart["fresh_execution_plan"]
|
||||
if (abort["prefills_after_abort_request_start"] <= abort["prefills_before_abort_request"]
|
||||
or abort["stale_output"] or not abort["worker_exited"]
|
||||
or restart["late_output"] or not restart["same_pcm_as_before_abort"]
|
||||
or old_plan["worker_generation"] == fresh_plan["worker_generation"]
|
||||
or fresh_plan["artifact_sha256"] != ARTIFACT_HASHES
|
||||
or fresh_plan["expected_gpu_name"] != old_plan["expected_gpu_name"]
|
||||
or fresh_plan["reserved_bytes"] != old_plan["reserved_bytes"]
|
||||
or restart["fresh_request"]["stage_event"]["worker_generation"] != fresh_plan["worker_generation"]
|
||||
or not all(clean_ledger(value, rtx=gpu) for value in (
|
||||
abort["ledger_after_abort"], restart["first_runtime_ledger_after_shutdown"]
|
||||
))):
|
||||
raise ValueError("in-flight cancellation or fresh-stage recovery failed")
|
||||
if (len(public["outputs"]) != 1 or public["outputs"][0]["pcm_sha256"] != RTX_PCM
|
||||
or public["outputs"][0]["frames"] != 65280 or public["outputs"][0]["sample_rate"] != 24000):
|
||||
raise ValueError("public AsyncOmni audio differs from the RTX stage output")
|
||||
if (asr["word_error_rate"] != 0.0 or asr["transcript"] != "Hello from the local computer."
|
||||
or asr["wav_sha256"] != sha256(root / "tts_rtx_smoke.wav")):
|
||||
raise ValueError("independent ASR proxy or WAV identity failed")
|
||||
if (refused["server_log_created"] or "GPU-VRAM reservation" not in refused["error"]
|
||||
or not clean_ledger(refused["ledger_after_refusal"], rtx=True)
|
||||
or (root / "tts_rtx_refused_should_not_exist.log").exists()):
|
||||
raise ValueError("undersized GPU reservation launched or retained a worker")
|
||||
if not any(gpu["Name"] == "NVIDIA GeForce RTX 5090 Laptop GPU" for gpu in hardware["gpus"]):
|
||||
raise ValueError("RTX hardware identity absent")
|
||||
counts = {
|
||||
"smoke": check_log(root / "tts_rtx_smoke_server.log", "NVIDIA GeForce RTX 5090 Laptop GPU", 3),
|
||||
"postguard": check_log(root / "tts_rtx_postguard_server.log", "NVIDIA GeForce RTX 5090 Laptop GPU", 3),
|
||||
"profile": check_log(root / "tts_rtx_profile20_server.log", "NVIDIA GeForce RTX 5090 Laptop GPU", 24),
|
||||
"restart": check_log(root / "tts_rtx_profile20_server_restart.log", "NVIDIA GeForce RTX 5090 Laptop GPU"),
|
||||
"public": check_log(root / "tts_rtx_public_server.log", "NVIDIA GeForce RTX 5090 Laptop GPU"),
|
||||
"radeon": check_log(root / "tts_radeon_regression_server.log", "AMD Radeon(TM) 890M Graphics"),
|
||||
"radeon_restart": check_log(root / "tts_radeon_regression_server_restart.log", "AMD Radeon(TM) 890M Graphics"),
|
||||
}
|
||||
check_wav(root / "tts_rtx_smoke.wav", 65280, RTX_PCM)
|
||||
check_wav(root / "tts_rtx_postguard.wav", 65280, RTX_PCM)
|
||||
check_wav(root / "tts_rtx_profile20.wav", 65280, RTX_PCM)
|
||||
check_wav(root / "tts_radeon_regression.wav", 61440, RADEON_PCM)
|
||||
files = [path for path in root.iterdir() if path.is_file() and path.name not in ("README.md", "audit_report.json")]
|
||||
return {
|
||||
"status": "passed",
|
||||
"scope": "RTX complete-request TTS, 20 serial outputs, public API, in-flight cancel/restart, GPU admission refusal and Radeon regression",
|
||||
"profile_nearest_rank_p50_wall_s": profile["nearest_rank_p50_wall_s"],
|
||||
"profile_nearest_rank_p95_wall_s": profile["nearest_rank_p95_wall_s"],
|
||||
"rtx_pcm_sha256": RTX_PCM,
|
||||
"radeon_pcm_sha256": RADEON_PCM,
|
||||
"server_prefill_counts": counts,
|
||||
"files": {path.name: {"bytes": path.stat().st_size, "sha256": sha256(path)} for path in files},
|
||||
"limits": [
|
||||
"ASR exact transcription is an intelligibility proxy, not speaker or perceptual quality qualification.",
|
||||
"The backend emits complete WAVs and has no playable chunk stream.",
|
||||
"Declared GPU-VRAM admission is not a measured device-memory loading peak.",
|
||||
"One fresh-stage restart is not same-session continuation or sustained recovery qualification.",
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("--evidence-dir", type=Path, required=True)
|
||||
args = parser.parse_args()
|
||||
result = audit(args.evidence_dir)
|
||||
(args.evidence_dir / "audit_report.json").write_text(
|
||||
json.dumps(result, indent=2) + "\n", encoding="utf-8"
|
||||
)
|
||||
print(json.dumps({"status": result["status"], "profile_p50": result["profile_nearest_rank_p50_wall_s"]}))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,74 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Verify that an undersized discrete-GPU TTS reservation fails before load."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
from pathlib import Path
|
||||
from types import SimpleNamespace
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
for name in (
|
||||
"server_bin", "server_sha256", "talker_file", "talker_sha256", "codec_file",
|
||||
"codec_sha256", "punc_file", "punc_sha256", "server_log", "output_report",
|
||||
):
|
||||
parser.add_argument("--" + name.replace("_", "-"), required=True)
|
||||
args = parser.parse_args()
|
||||
|
||||
from vllm_omni.engine.backends.crisp_tts import CrispTTSStageClient
|
||||
from vllm_omni.engine.resource_ledger import ResourceLedger, ResourceUnavailable
|
||||
|
||||
log_path = Path(args.server_log)
|
||||
if log_path.exists():
|
||||
raise FileExistsError("refusal probe needs a fresh server-log path")
|
||||
ledger = ResourceLedger({"host_ram": 16 << 30, "gpu_vram": 16 << 30})
|
||||
reservation = ledger.reserve("undersized-rtx-tts", {"host_ram": 8 << 30, "gpu_vram": 3 << 30})
|
||||
backend = {
|
||||
"server_bin": args.server_bin,
|
||||
"server_sha256": args.server_sha256,
|
||||
"talker_file": args.talker_file,
|
||||
"talker_sha256": args.talker_sha256,
|
||||
"codec_file": args.codec_file,
|
||||
"codec_sha256": args.codec_sha256,
|
||||
"punc_file": args.punc_file,
|
||||
"punc_sha256": args.punc_sha256,
|
||||
"log_file": str(log_path),
|
||||
"expected_gpu_name": "NVIDIA GeForce RTX 5090 Laptop GPU",
|
||||
"ggml_vk_visible_devices": "0",
|
||||
"memory_overhead_bytes": 5 << 30,
|
||||
"gpu_memory_pool": "gpu_vram",
|
||||
"gpu_memory_overhead_bytes": 2 << 30,
|
||||
}
|
||||
error = None
|
||||
try:
|
||||
CrispTTSStageClient(SimpleNamespace(stage_id=0), backend, ledger, reservation)
|
||||
except ResourceUnavailable as exc:
|
||||
error = f"{type(exc).__name__}: {exc}"
|
||||
if error is None:
|
||||
raise RuntimeError("undersized GPU-VRAM reservation was admitted")
|
||||
snapshot = ledger.snapshot()
|
||||
if snapshot["reserved"] != {"host_ram": 0, "gpu_vram": 0} or snapshot["quarantined"] or log_path.exists():
|
||||
raise RuntimeError("GPU-VRAM refusal left a reservation or launched the server")
|
||||
report = {
|
||||
"status": "passed",
|
||||
"scope": "RTX TTS 3 GiB GPU-VRAM demand is refused before server launch",
|
||||
"artifact_sha256": {name: getattr(args, name) for name in (
|
||||
"server_sha256", "talker_sha256", "codec_sha256", "punc_sha256"
|
||||
)},
|
||||
"declared_gpu_reservation_bytes": 3 << 30,
|
||||
"declared_gpu_overhead_bytes": 2 << 30,
|
||||
"error": error,
|
||||
"server_log_created": False,
|
||||
"ledger_after_refusal": snapshot,
|
||||
}
|
||||
destination = Path(args.output_report)
|
||||
destination.parent.mkdir(parents=True, exist_ok=True)
|
||||
destination.write_text(json.dumps(report, indent=2) + "\n", encoding="utf-8")
|
||||
print(json.dumps({"status": report["status"], "error": report["error"]}))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -39,6 +39,7 @@ async def main() -> None:
|
||||
):
|
||||
parser.add_argument("--" + name.replace("_", "-"), required=True)
|
||||
parser.add_argument("--expected-gpu-name", default="AMD Radeon(TM) 890M Graphics")
|
||||
parser.add_argument("--ggml-vk-visible-devices", default="1")
|
||||
parser.add_argument("--warmups", type=int, default=1)
|
||||
parser.add_argument("--repeats", type=int, default=20)
|
||||
parser.add_argument("--abort-check", action="store_true")
|
||||
@@ -46,9 +47,16 @@ async def main() -> None:
|
||||
help="After in-flight cancellation, start a fresh stage and verify audio")
|
||||
parser.add_argument("--capacity-gib", type=int, default=16)
|
||||
parser.add_argument("--reserve-gib", type=int, default=8)
|
||||
parser.add_argument("--gpu-capacity-gib", type=int, default=0)
|
||||
parser.add_argument("--gpu-reserve-gib", type=int, default=0)
|
||||
args = parser.parse_args()
|
||||
if args.warmups < 0 or args.repeats <= 0 or args.reserve_gib <= 0 or args.capacity_gib < args.reserve_gib:
|
||||
parser.error("invalid warmup/repeat count or memory budget")
|
||||
if args.expected_gpu_name == "NVIDIA GeForce RTX 5090 Laptop GPU":
|
||||
if args.ggml_vk_visible_devices != "0" or args.gpu_reserve_gib < 4 or args.gpu_capacity_gib < args.gpu_reserve_gib:
|
||||
parser.error("RTX route requires Vulkan device 0 and at least 4 GiB reserved GPU VRAM")
|
||||
elif args.gpu_capacity_gib or args.gpu_reserve_gib:
|
||||
parser.error("Radeon shared-RAM route must not declare discrete GPU VRAM")
|
||||
if args.restart_check and not args.abort_check:
|
||||
parser.error("--restart-check requires --abort-check")
|
||||
|
||||
@@ -68,7 +76,7 @@ async def main() -> None:
|
||||
"punc_sha256": args.punc_sha256,
|
||||
"log_file": args.server_log,
|
||||
"expected_gpu_name": args.expected_gpu_name,
|
||||
"ggml_vk_visible_devices": "1",
|
||||
"ggml_vk_visible_devices": args.ggml_vk_visible_devices,
|
||||
"memory_overhead_bytes": 5 << 30,
|
||||
"max_text_bytes": 4096,
|
||||
"max_wav_bytes": 4 << 20,
|
||||
@@ -78,14 +86,21 @@ async def main() -> None:
|
||||
"voice": "ryan",
|
||||
"seed": 42,
|
||||
}
|
||||
capacities = {"host_ram": args.capacity_gib << 30}
|
||||
demands = {"host_ram": args.reserve_gib << 30}
|
||||
if args.gpu_reserve_gib:
|
||||
capacities["gpu_vram"] = args.gpu_capacity_gib << 30
|
||||
demands["gpu_vram"] = args.gpu_reserve_gib << 30
|
||||
backend["gpu_memory_pool"] = "gpu_vram"
|
||||
backend["gpu_memory_overhead_bytes"] = 2 << 30
|
||||
deploy = DeployConfig(
|
||||
async_chunk=False,
|
||||
stages=[StageDeployConfig(
|
||||
stage_id=0,
|
||||
backend=backend,
|
||||
resource_budget={
|
||||
"capacities": {"host_ram": args.capacity_gib << 30},
|
||||
"demands": {"host_ram": args.reserve_gib << 30},
|
||||
"capacities": capacities,
|
||||
"demands": demands,
|
||||
},
|
||||
)],
|
||||
)
|
||||
@@ -94,7 +109,7 @@ async def main() -> None:
|
||||
runtime = StageRuntime(configs, "local-qwen-tts-crisp", "", stage_init_timeout=180, async_chunk=False)
|
||||
report = {
|
||||
"scope": "complete resident Qwen3-TTS CustomVoice text-to-WAV through Omni StageRuntime/StagePool",
|
||||
"placement": "Radeon Vulkan talker/codec + CPU FP32 code predictor",
|
||||
"placement": f"{args.expected_gpu_name} Vulkan talker/codec + CPU FP32 code predictor",
|
||||
"warmup_count": args.warmups,
|
||||
"measured_count": args.repeats,
|
||||
"memory_budget": deploy.stages[0].resource_budget,
|
||||
|
||||
@@ -22,7 +22,18 @@ async def main() -> None:
|
||||
"codec_file", "codec_sha256", "punc_file", "punc_sha256", "server_log", "output_report",
|
||||
):
|
||||
parser.add_argument("--" + name.replace("_", "-"), required=True)
|
||||
parser.add_argument("--expected-gpu-name", default="AMD Radeon(TM) 890M Graphics")
|
||||
parser.add_argument("--ggml-vk-visible-devices", default="1")
|
||||
parser.add_argument("--gpu-capacity-gib", type=int, default=0)
|
||||
parser.add_argument("--gpu-reserve-gib", type=int, default=0)
|
||||
parser.add_argument("--expected-frames", type=int, default=61440)
|
||||
parser.add_argument("--expected-pcm-sha256", default="57f60228e2b456f6dfefc7e49df862c7bff6ba7cf39231ef1824f615948a1539")
|
||||
args = parser.parse_args()
|
||||
if args.expected_gpu_name == "NVIDIA GeForce RTX 5090 Laptop GPU":
|
||||
if args.ggml_vk_visible_devices != "0" or args.gpu_reserve_gib < 4 or args.gpu_capacity_gib < args.gpu_reserve_gib:
|
||||
parser.error("RTX route requires Vulkan device 0 and at least 4 GiB reserved GPU VRAM")
|
||||
elif args.gpu_capacity_gib or args.gpu_reserve_gib:
|
||||
parser.error("Radeon shared-RAM route must not declare discrete GPU VRAM")
|
||||
|
||||
from vllm_omni.entrypoints.async_omni import AsyncOmni
|
||||
from vllm_omni.model_executor.models.qwen3_tts.pipeline import QWEN3_TTS_CRISP_HYBRID_PIPELINE
|
||||
@@ -38,8 +49,8 @@ async def main() -> None:
|
||||
"punc_file": args.punc_file,
|
||||
"punc_sha256": args.punc_sha256,
|
||||
"log_file": args.server_log,
|
||||
"expected_gpu_name": "AMD Radeon(TM) 890M Graphics",
|
||||
"ggml_vk_visible_devices": "1",
|
||||
"expected_gpu_name": args.expected_gpu_name,
|
||||
"ggml_vk_visible_devices": args.ggml_vk_visible_devices,
|
||||
"memory_overhead_bytes": 5 << 30,
|
||||
"max_text_bytes": 4096,
|
||||
"max_wav_bytes": 4 << 20,
|
||||
@@ -47,7 +58,15 @@ async def main() -> None:
|
||||
"voice": "ryan",
|
||||
"seed": 42,
|
||||
}
|
||||
capacities = {"host_ram": 16 << 30}
|
||||
demands = {"host_ram": 8 << 30}
|
||||
if args.gpu_reserve_gib:
|
||||
capacities["gpu_vram"] = args.gpu_capacity_gib << 30
|
||||
demands["gpu_vram"] = args.gpu_reserve_gib << 30
|
||||
backend["gpu_memory_pool"] = "gpu_vram"
|
||||
backend["gpu_memory_overhead_bytes"] = 2 << 30
|
||||
report = {"entrypoint": "AsyncOmni.generate", "pipeline": QWEN3_TTS_CRISP_HYBRID_PIPELINE.model_type}
|
||||
report["memory_budget"] = {"capacities": capacities, "demands": demands}
|
||||
engine = None
|
||||
try:
|
||||
with tempfile.TemporaryDirectory(prefix="omni-crisp-tts-") as temporary:
|
||||
@@ -59,8 +78,8 @@ async def main() -> None:
|
||||
"stage_id": 0,
|
||||
"backend": backend,
|
||||
"resource_budget": {
|
||||
"capacities": {"host_ram": 16 << 30},
|
||||
"demands": {"host_ram": 8 << 30},
|
||||
"capacities": capacities,
|
||||
"demands": demands,
|
||||
},
|
||||
}],
|
||||
}), encoding="utf-8")
|
||||
@@ -89,9 +108,11 @@ async def main() -> None:
|
||||
})
|
||||
report["request_wall_s"] = time.perf_counter() - started
|
||||
report["outputs"] = outputs
|
||||
assert len(outputs) == 1 and outputs[0]["request_id"] == "public-tts-1"
|
||||
assert outputs[0]["sample_rate"] == 24000 and outputs[0]["frames"] == 61440
|
||||
assert outputs[0]["pcm_sha256"] == "57f60228e2b456f6dfefc7e49df862c7bff6ba7cf39231ef1824f615948a1539"
|
||||
if (len(outputs) != 1 or outputs[0]["request_id"] != "public-tts-1"
|
||||
or outputs[0]["sample_rate"] != 24000
|
||||
or outputs[0]["frames"] != args.expected_frames
|
||||
or outputs[0]["pcm_sha256"] != args.expected_pcm_sha256):
|
||||
raise RuntimeError("public audio differed from the pinned stage output")
|
||||
report["status"] = "passed"
|
||||
except BaseException as exc:
|
||||
report["status"] = "failed"
|
||||
|
||||
@@ -40,6 +40,14 @@ permutation with an unsupported PTX toolchain error. Driver 610.71 reports
|
||||
CUDA 13.3 while the installed Windows vLLM wheel was built with CUDA 13.4.
|
||||
No native image/text inference completed; the WSL pass remains separate.
|
||||
|
||||
A [native Windows RTX Qwen3-TTS Omni hybrid run](evidence/qwen_tts_windows_rtx/README.md)
|
||||
adds a separate GGUF/Vulkan complete-WAV path with RTX talker/codec and CPU
|
||||
FP32 code predictor. Two named requests, 20/20 serial outputs, public audio,
|
||||
in-flight cancellation/fresh-stage restart and an undersized GPU-VRAM refusal
|
||||
passed. The 2.72 s first utterance measured nearest-rank p50/p95 wall
|
||||
**3.153/3.231 s**; pinned Whisper tiny.en transcribed it exactly. This route
|
||||
does not establish playable streaming or replace the CUDA sustained audit.
|
||||
|
||||
A [native Windows Qwen3-TTS hybrid restart probe](evidence/qwen_tts_omni_windows_restart/README.md)
|
||||
also confirmed backend prefill before cancellation. The worker and host-RAM
|
||||
reservation drained; a fresh Omni stage with the same pinned Radeon Vulkan0
|
||||
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
# Qwen3-TTS complete-WAV Omni stage on native Windows RTX Vulkan + CPU
|
||||
|
||||
The pinned Qwen3-TTS 0.6B CustomVoice GGUF route now completes **scoped text-to-WAV requests** through Omni `StageRuntime`/`StagePool` and the public `AsyncOmni.generate` entrypoint on native Windows. CrispASR retains the talker, codec, code predictor and their internal state; Omni owns one-slot admission, request/epoch identity, terminal audio acknowledgement, bounded WAV validation and worker cancellation. The new discrete-GPU route selects **RTX 5090 Laptop Vulkan0** for talker/codec and pins the 432 MB code predictor to **CPU FP32**. It requires independent declared **8 GiB host-RAM and 4 GiB GPU-VRAM reservations** against 16 GiB controller ceilings for each pool. The [server logs](tts_rtx_profile20_server.log) verify actual Vulkan0 device identity and codec loading. This route does not use CUDA or the NPU; it is separate from the earlier full-model vLLM CUDA streaming profile.
|
||||
|
||||
The exact executable and artifacts are the same as the [earlier Radeon hybrid study](../../../e2e_expansion_20260923/evidence/qwen_tts_omni_hybrid/README.md): CrispASR v0.8.35 build `00c9e752` SHA-256 `999c6af252077195adb723b96da9ee5d3cd291dc7c7a4b32dc493ae148035529`; CustomVoice Q8_0 talker at revision `29094dcb46f19b0898616aa9aeb876aa9aa6e086` SHA-256 `5227dcbc4df7c5533341d111cc469fa491a48e722b23dd10f553181b52dff2d9`; F16 codec at revision `344e279551177654762e5c7d39e217834325f222` SHA-256 `70dc95dbfdd9aa5d9d406236ff771d061bf17b0cda02a72513953355606e719b`; cached punctuation GGUF SHA-256 `faf4a43e3135bc307a66194685af00f756e6f4c28c7d9e2dd8f3517cddca5c45`, upstream revision not recorded. Weights and binary remain in local storage outside Git. The converter's original source-checkpoint revision and full same-checkpoint numerical parity remain unestablished. [Hardware record](hardware.json): Windows 11 build 26200, Ryzen AI 9 HX 370, RTX driver `32.0.16.1071`, Performance power scheme; the Radeon 890M was present but not selected.
|
||||
|
||||
The two named requests produced finite, nonsilent 24 kHz mono PCM: “Hello from the local computer.” returned **65,280 frames (2.72 s)**, PCM SHA-256 `d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c`; “The blue car is parked beside the library.” returned **76,800 frames (3.20 s)**, PCM SHA-256 `91d66409f7b3e0c5bdaa45e2091b60b8e1c3cdd64c3909d1a7878f2e9de0043f`. One excluded warmup plus **20/20 serial** complete requests for the first sentence had identical PCM, nearest-rank request-wall p50/p95 **3.153/3.231 s** (RTF **1.16/1.19**), excluding 4.016 s server/stage startup. The [raw profile](tts_rtx_profile20_report.json) retains all samples and the [first measured WAV](tts_rtx_profile20.wav). The [smoke WAV](tts_rtx_smoke.wav) was independently transcribed by pinned Whisper tiny.en as the exact first sentence, WER 0 in the [ASR record](tts_rtx_smoke_asr.json). That is an intelligibility proxy, not speaker or perceptual quality. The RTX PCM differs from the Radeon hybrid PCM (2.72 versus 2.56 s for the first sentence); there is no same-output speedup claim.
|
||||
|
||||
The [public AsyncOmni report](tts_rtx_public_report.json) returned one terminal audio event with the same 65,280-frame PCM hash. The profile waited until the owned server logged a new TTS prefill before aborting; no stale output remained, the worker exited and both RAM reservations cleared. A fresh stage with the same artifacts and placement used a new worker generation and returned the identical first PCM with no late output. The [3 GiB GPU-VRAM refusal](tts_rtx_refused_3gib.json) happened **before server launch** because the declared weights plus 2 GiB GPU workspace/headroom exceeded that reservation; the ledger returned to zero. A one-request [Radeon regression](tts_radeon_regression_report.json) still returned the historical Radeon PCM hash, completed cancellation/restart and reserved only shared host RAM. The [auditor](audit_report.json) checks output hashes, placement logs, p50/p95, public output, refusal and both restart ledgers.
|
||||
|
||||
After tightening the backend to require a GPU pool distinct from host RAM and at least 2 GiB of declared GPU overhead, a further [RTX one-request check](tts_rtx_postguard_report.json) still returned the same PCM and cleared both reservations. Its [server log](tts_rtx_postguard_server.log) again verifies RTX Vulkan0 placement. The earlier 20-request timing was not repeated for this admission-only guard change.
|
||||
|
||||
Reproduce using [the stage probe](../../../../experiments/probe_omni_crisp_tts.py) on native Windows Python/vLLM 0.29 with this checkout on `PYTHONPATH`, `PYTHONUTF8=1`, and `VLLM_ENABLE_V1_MULTIPROCESSING=0`. Supply the four pinned local artifacts and hashes, `--expected-gpu-name "NVIDIA GeForce RTX 5090 Laptop GPU" --ggml-vk-visible-devices 0 --gpu-capacity-gib 16 --gpu-reserve-gib 4`, the output paths, and `--warmups 1 --repeats 20 --abort-check --restart-check`. The [public probe](../../../../experiments/probe_omni_crisp_tts_entrypoint.py) uses the same placement and exact expected PCM. [The admission probe](../../../../experiments/probe_crisp_tts_rtx_admission.py) verifies a 3 GiB GPU reservation is rejected. Run [the auditor](../../../../experiments/audit_qwen_tts_windows_rtx.py) on this evidence directory.
|
||||
|
||||
This is a complete-WAV path with a fresh-stage recovery check. It does **not** establish incremental playable speech, RTF below 1, a measured GPU-memory loading peak, broader voice quality, concurrent requests, or an underrun-free sustained run. The earlier CUDA 30-minute findings remain a separate model/runtime route; neither this Vulkan profile nor the Radeon profile qualifies mobile/NPU joint execution.
|
||||
+117
@@ -0,0 +1,117 @@
|
||||
{
|
||||
"status": "passed",
|
||||
"scope": "RTX complete-request TTS, 20 serial outputs, public API, in-flight cancel/restart, GPU admission refusal and Radeon regression",
|
||||
"profile_nearest_rank_p50_wall_s": 3.152671999996528,
|
||||
"profile_nearest_rank_p95_wall_s": 3.231357399956323,
|
||||
"rtx_pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"radeon_pcm_sha256": "57f60228e2b456f6dfefc7e49df862c7bff6ba7cf39231ef1824f615948a1539",
|
||||
"server_prefill_counts": {
|
||||
"smoke": 3,
|
||||
"postguard": 3,
|
||||
"profile": 24,
|
||||
"restart": 1,
|
||||
"public": 1,
|
||||
"radeon": 4,
|
||||
"radeon_restart": 1
|
||||
},
|
||||
"files": {
|
||||
"tts_rtx_postguard_report.json": {
|
||||
"bytes": 3746,
|
||||
"sha256": "d221decd60692e0321e849fe04cb2c33f1ecdf103a351b20885bc4cdfc443c8b"
|
||||
},
|
||||
"tts_rtx_postguard.wav": {
|
||||
"bytes": 130604,
|
||||
"sha256": "b650492ec4ad4d34fdd07c63517fe846a8c6a762e7d7c5d552b9a4bf88189013"
|
||||
},
|
||||
"tts_radeon_regression_report.json": {
|
||||
"bytes": 6284,
|
||||
"sha256": "7703703a91606a701d42d7247c594ae5306c60c6056e4483413d697fa5aa5b7e"
|
||||
},
|
||||
"tts_radeon_regression.wav": {
|
||||
"bytes": 122924,
|
||||
"sha256": "1bb9590f367ab531c66fc20d9b8aed9f0477fde67f2bdbe16e60de5a40b17e27"
|
||||
},
|
||||
"tts_rtx_postguard_server.log": {
|
||||
"bytes": 7305,
|
||||
"sha256": "d6c38c755d7d65fdb6ffdbb9f3fd5c439d9b55247e5b15b685e18f64994e524d"
|
||||
},
|
||||
"tts_rtx_profile20_report.json": {
|
||||
"bytes": 17276,
|
||||
"sha256": "8a1a911989568c0ddba20bac8a09d300d44756f052d511a4a67bef41933cd968"
|
||||
},
|
||||
"tts_radeon_regression_server_restart.log": {
|
||||
"bytes": 6562,
|
||||
"sha256": "fd0e94336d87079e93e65aa4453fac7824f8e5701e93791a2dc28beacdab1c3a"
|
||||
},
|
||||
"tts_rtx_public.driver.log": {
|
||||
"bytes": 4069,
|
||||
"sha256": "73ca196d9b6cd037a286ac98029ac7c160a5846712d8c46045b55072e08a9488"
|
||||
},
|
||||
"tts_rtx_public_server.log": {
|
||||
"bytes": 6569,
|
||||
"sha256": "7df3ec94f0d769d527acf26b4b5555022e6e43a4078b6ac75a5e2fff07934e60"
|
||||
},
|
||||
"tts_rtx_smoke.wav": {
|
||||
"bytes": 130604,
|
||||
"sha256": "b650492ec4ad4d34fdd07c63517fe846a8c6a762e7d7c5d552b9a4bf88189013"
|
||||
},
|
||||
"tts_rtx_smoke_server.log": {
|
||||
"bytes": 7308,
|
||||
"sha256": "9d3ac3c749afd899c87012237160562b987bc88b0312a754202f5e34bb94a025"
|
||||
},
|
||||
"tts_radeon_regression_server.log": {
|
||||
"bytes": 7387,
|
||||
"sha256": "9dffd1df8f1183409ad7eacbb5bfbbb58cf04f2eb45ee1e429586364f0640ad0"
|
||||
},
|
||||
"tts_rtx_profile20_server_restart.log": {
|
||||
"bytes": 6569,
|
||||
"sha256": "ee8f76054bf7ea15602ad8e7431fe50a62099fcc90efc27c73587f39be334035"
|
||||
},
|
||||
"tts_rtx_postguard.driver.log": {
|
||||
"bytes": 4155,
|
||||
"sha256": "e524d880c3930a88dd75600312b746b513d16a4876f12d03ce4a9291aaebe067"
|
||||
},
|
||||
"tts_rtx_smoke_asr.json": {
|
||||
"bytes": 694,
|
||||
"sha256": "55260137e40adbbd6d11244e6687f5f3d797eb82a07a6e6f0e16a522e844fc40"
|
||||
},
|
||||
"tts_rtx_refused_3gib.json": {
|
||||
"bytes": 941,
|
||||
"sha256": "2ae1f4cc446d296f51ed0482fc10c57c6326087d25002565451ba0b3d4ed2d46"
|
||||
},
|
||||
"tts_rtx_smoke_report.json": {
|
||||
"bytes": 3746,
|
||||
"sha256": "fc72ae8bd3f917384d2c717cfc343f4224c47eef363c2a3706b4e49d77c33a79"
|
||||
},
|
||||
"tts_rtx_profile20_server.log": {
|
||||
"bytes": 14742,
|
||||
"sha256": "31c35379a529585223d494d3f85795b5a73b493042012a5921c22f4688aee2c8"
|
||||
},
|
||||
"tts_rtx_profile20.wav": {
|
||||
"bytes": 130604,
|
||||
"sha256": "b650492ec4ad4d34fdd07c63517fe846a8c6a762e7d7c5d552b9a4bf88189013"
|
||||
},
|
||||
"tts_rtx_profile20.driver.log": {
|
||||
"bytes": 17829,
|
||||
"sha256": "b4a1a23faa6f5f06803036889a0faa0fa7c1b485921959dae935f98b1f1b859a"
|
||||
},
|
||||
"tts_radeon_regression.driver.log": {
|
||||
"bytes": 6837,
|
||||
"sha256": "b31f23ea2f9dca7e9557c62b44e8384d3fc69e08ffbc6079b137f9495ad13c48"
|
||||
},
|
||||
"hardware.json": {
|
||||
"bytes": 649,
|
||||
"sha256": "a0a7e3dbfc350f23ad452aecd7d6ef4d460f58e83dfa25bdcf74de94f55ba9e6"
|
||||
},
|
||||
"tts_rtx_public_report.json": {
|
||||
"bytes": 880,
|
||||
"sha256": "fabf007dd52245cabc0246db717047659af5501451077f3e7f08c09f8408a736"
|
||||
}
|
||||
},
|
||||
"limits": [
|
||||
"ASR exact transcription is an intelligibility proxy, not speaker or perceptual quality qualification.",
|
||||
"The backend emits complete WAVs and has no playable chunk stream.",
|
||||
"Declared GPU-VRAM admission is not a measured device-memory loading peak.",
|
||||
"One fresh-stage restart is not same-session continuation or sustained recovery qualification."
|
||||
]
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"gpus": [
|
||||
{
|
||||
"Name": "NVIDIA GeForce RTX 5090 Laptop GPU",
|
||||
"DriverVersion": "32.0.16.1071"
|
||||
},
|
||||
{
|
||||
"Name": "AMD Radeon(TM) 890M Graphics",
|
||||
"DriverVersion": "32.0.22018.6001"
|
||||
}
|
||||
],
|
||||
"power_scheme": "电源方案 GUID: 27fa6203-3987-4dcc-918d-748559d549ec (Performance)",
|
||||
"os": {
|
||||
"Caption": "Microsoft Windows 11 家庭版 中文版",
|
||||
"BuildNumber": "26200",
|
||||
"TotalVisibleMemorySize": 66185068
|
||||
},
|
||||
"captured_at": "2026-09-24T16:06:39.8097222+08:00",
|
||||
"cpu": {
|
||||
"Name": "AMD Ryzen AI 9 HX 370 w/ Radeon 890M ",
|
||||
"NumberOfCores": 12,
|
||||
"NumberOfLogicalProcessors": 24
|
||||
}
|
||||
}
|
||||
+203
@@ -0,0 +1,203 @@
|
||||
INFO 09-24 16:04:31 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed.
|
||||
INFO 09-24 16:04:31 [patch.py:510] inductor factorable-divisibility patch: installed.
|
||||
INFO 09-24 16:04:34 [stage_init_utils.py:768] [stage_init] Set VLLM_WORKER_MULTIPROC_METHOD=spawn
|
||||
WARNING 09-24 16:04:34 [stage_init_utils.py:1887] [stage_init] Failed to load transfer config: [Errno 13] Permission denied: 'C:\\Users\\zhout'
|
||||
WARNING 09-24 16:04:51 [stage_init_utils.py:1887] [stage_init] Failed to load transfer config: [Errno 13] Permission denied: 'C:\\Users\\zhout'
|
||||
{
|
||||
"scope": "complete resident Qwen3-TTS CustomVoice text-to-WAV through Omni StageRuntime/StagePool",
|
||||
"placement": "AMD Radeon(TM) 890M Graphics Vulkan talker/codec + CPU FP32 code predictor",
|
||||
"warmup_count": 0,
|
||||
"measured_count": 1,
|
||||
"memory_budget": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184
|
||||
},
|
||||
"demands": {
|
||||
"host_ram": 8589934592
|
||||
}
|
||||
},
|
||||
"startup_s": 5.5705983999650925,
|
||||
"execution_plan": {
|
||||
"backend": "external.crisp.tts.v1",
|
||||
"stage_id": 0,
|
||||
"worker_generation": "9ef43464d674477fb5edf0e9765a757d",
|
||||
"worker_pid": 14816,
|
||||
"artifact_sha256": {
|
||||
"server_sha256": "999c6af252077195adb723b96da9ee5d3cd291dc7c7a4b32dc493ae148035529",
|
||||
"talker_sha256": "5227dcbc4df7c5533341d111cc469fa491a48e722b23dd10f553181b52dff2d9",
|
||||
"codec_sha256": "70dc95dbfdd9aa5d9d406236ff771d061bf17b0cda02a72513953355606e719b",
|
||||
"punc_sha256": "faf4a43e3135bc307a66194685af00f756e6f4c28c7d9e2dd8f3517cddca5c45"
|
||||
},
|
||||
"placement": "Radeon Vulkan0 talker/codec + CPU FP32 code predictor",
|
||||
"expected_gpu_name": "AMD Radeon(TM) 890M Graphics",
|
||||
"ggml_vk_visible_devices": "1",
|
||||
"gpu_memory_pool": null,
|
||||
"gpu_memory_overhead_bytes": null,
|
||||
"loaded_rss_bytes": 2726912000,
|
||||
"reserved_bytes": {
|
||||
"host_ram": 8589934592
|
||||
},
|
||||
"memory_overhead_bytes": 5368709120,
|
||||
"max_text_bytes": 4096,
|
||||
"max_wav_bytes": 4194304,
|
||||
"max_audio_s": 10.0,
|
||||
"voice": "ryan",
|
||||
"seed": 42,
|
||||
"request_capacity": 1,
|
||||
"stateful_session": "CrispASR-owned; complete WAV per request",
|
||||
"evidence": "B"
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.384064600104466,
|
||||
"frames": 61440,
|
||||
"duration_s": 2.56,
|
||||
"pcm_sha256": "57f60228e2b456f6dfefc7e49df862c7bff6ba7cf39231ef1824f615948a1539",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691816156000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 1,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "9ef43464d674477fb5edf0e9765a757d",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "The blue car is parked beside the library.",
|
||||
"wall_s": 4.117532499949448,
|
||||
"frames": 76800,
|
||||
"duration_s": 3.2,
|
||||
"pcm_sha256": "4832877787577d2e47b51f325a09e17df37b7f2a95ed5297b37259977286476d",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691819546000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 2,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "9ef43464d674477fb5edf0e9765a757d",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"warmups": [],
|
||||
"measured": [
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.296963999979198,
|
||||
"frames": 61440,
|
||||
"duration_s": 2.56,
|
||||
"pcm_sha256": "57f60228e2b456f6dfefc7e49df862c7bff6ba7cf39231ef1824f615948a1539",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691823656000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 3,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "9ef43464d674477fb5edf0e9765a757d",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"nearest_rank_p50_wall_s": 3.296963999979198,
|
||||
"nearest_rank_p95_wall_s": 3.296963999979198,
|
||||
"all_same_pcm_sha256": true,
|
||||
"abort_check": {
|
||||
"prefills_before_abort_request": 3,
|
||||
"prefills_after_abort_request_start": 4,
|
||||
"stale_output": false,
|
||||
"worker_exited": true,
|
||||
"ledger_after_abort": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184
|
||||
},
|
||||
"reserved": {
|
||||
"host_ram": 0
|
||||
},
|
||||
"owners": [],
|
||||
"quarantined": []
|
||||
}
|
||||
},
|
||||
"restart_check": {
|
||||
"first_runtime_ledger_after_shutdown": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184
|
||||
},
|
||||
"reserved": {
|
||||
"host_ram": 0
|
||||
},
|
||||
"owners": [],
|
||||
"quarantined": []
|
||||
},
|
||||
"fresh_startup_s": 5.100862400024198,
|
||||
"fresh_server_log": "\\\\wsl.localhost\\Ubuntu\\home\\zhout\\project\\edge_infer\\vllm-omni-edge\\benchmarks\\edge_harness\\results\\e2e_expansion_20260924\\evidence\\qwen_tts_windows_rtx\\tts_radeon_regression_server_restart.log",
|
||||
"fresh_execution_plan": {
|
||||
"backend": "external.crisp.tts.v1",
|
||||
"stage_id": 0,
|
||||
"worker_generation": "46d98233701146dd82f01c37bdd6b773",
|
||||
"worker_pid": 7728,
|
||||
"artifact_sha256": {
|
||||
"server_sha256": "999c6af252077195adb723b96da9ee5d3cd291dc7c7a4b32dc493ae148035529",
|
||||
"talker_sha256": "5227dcbc4df7c5533341d111cc469fa491a48e722b23dd10f553181b52dff2d9",
|
||||
"codec_sha256": "70dc95dbfdd9aa5d9d406236ff771d061bf17b0cda02a72513953355606e719b",
|
||||
"punc_sha256": "faf4a43e3135bc307a66194685af00f756e6f4c28c7d9e2dd8f3517cddca5c45"
|
||||
},
|
||||
"placement": "Radeon Vulkan0 talker/codec + CPU FP32 code predictor",
|
||||
"expected_gpu_name": "AMD Radeon(TM) 890M Graphics",
|
||||
"ggml_vk_visible_devices": "1",
|
||||
"gpu_memory_pool": null,
|
||||
"gpu_memory_overhead_bytes": null,
|
||||
"loaded_rss_bytes": 2726957056,
|
||||
"reserved_bytes": {
|
||||
"host_ram": 8589934592
|
||||
},
|
||||
"memory_overhead_bytes": 5368709120,
|
||||
"max_text_bytes": 4096,
|
||||
"max_wav_bytes": 4194304,
|
||||
"max_audio_s": 10.0,
|
||||
"voice": "ryan",
|
||||
"seed": 42,
|
||||
"request_capacity": 1,
|
||||
"stateful_session": "CrispASR-owned; complete WAV per request",
|
||||
"evidence": "B"
|
||||
},
|
||||
"fresh_request": {
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.3378395000472665,
|
||||
"frames": 61440,
|
||||
"duration_s": 2.56,
|
||||
"pcm_sha256": "57f60228e2b456f6dfefc7e49df862c7bff6ba7cf39231ef1824f615948a1539",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691832468000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 1,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "46d98233701146dd82f01c37bdd6b773",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
"same_pcm_as_before_abort": true,
|
||||
"late_output": false
|
||||
},
|
||||
"status": "passed",
|
||||
"ledger_after_shutdown": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184
|
||||
},
|
||||
"reserved": {
|
||||
"host_ram": 0
|
||||
},
|
||||
"owners": [],
|
||||
"quarantined": []
|
||||
}
|
||||
}
|
||||
BIN
Binary file not shown.
+198
@@ -0,0 +1,198 @@
|
||||
{
|
||||
"scope": "complete resident Qwen3-TTS CustomVoice text-to-WAV through Omni StageRuntime/StagePool",
|
||||
"placement": "AMD Radeon(TM) 890M Graphics Vulkan talker/codec + CPU FP32 code predictor",
|
||||
"warmup_count": 0,
|
||||
"measured_count": 1,
|
||||
"memory_budget": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184
|
||||
},
|
||||
"demands": {
|
||||
"host_ram": 8589934592
|
||||
}
|
||||
},
|
||||
"startup_s": 5.5705983999650925,
|
||||
"execution_plan": {
|
||||
"backend": "external.crisp.tts.v1",
|
||||
"stage_id": 0,
|
||||
"worker_generation": "9ef43464d674477fb5edf0e9765a757d",
|
||||
"worker_pid": 14816,
|
||||
"artifact_sha256": {
|
||||
"server_sha256": "999c6af252077195adb723b96da9ee5d3cd291dc7c7a4b32dc493ae148035529",
|
||||
"talker_sha256": "5227dcbc4df7c5533341d111cc469fa491a48e722b23dd10f553181b52dff2d9",
|
||||
"codec_sha256": "70dc95dbfdd9aa5d9d406236ff771d061bf17b0cda02a72513953355606e719b",
|
||||
"punc_sha256": "faf4a43e3135bc307a66194685af00f756e6f4c28c7d9e2dd8f3517cddca5c45"
|
||||
},
|
||||
"placement": "Radeon Vulkan0 talker/codec + CPU FP32 code predictor",
|
||||
"expected_gpu_name": "AMD Radeon(TM) 890M Graphics",
|
||||
"ggml_vk_visible_devices": "1",
|
||||
"gpu_memory_pool": null,
|
||||
"gpu_memory_overhead_bytes": null,
|
||||
"loaded_rss_bytes": 2726912000,
|
||||
"reserved_bytes": {
|
||||
"host_ram": 8589934592
|
||||
},
|
||||
"memory_overhead_bytes": 5368709120,
|
||||
"max_text_bytes": 4096,
|
||||
"max_wav_bytes": 4194304,
|
||||
"max_audio_s": 10.0,
|
||||
"voice": "ryan",
|
||||
"seed": 42,
|
||||
"request_capacity": 1,
|
||||
"stateful_session": "CrispASR-owned; complete WAV per request",
|
||||
"evidence": "B"
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.384064600104466,
|
||||
"frames": 61440,
|
||||
"duration_s": 2.56,
|
||||
"pcm_sha256": "57f60228e2b456f6dfefc7e49df862c7bff6ba7cf39231ef1824f615948a1539",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691816156000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 1,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "9ef43464d674477fb5edf0e9765a757d",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "The blue car is parked beside the library.",
|
||||
"wall_s": 4.117532499949448,
|
||||
"frames": 76800,
|
||||
"duration_s": 3.2,
|
||||
"pcm_sha256": "4832877787577d2e47b51f325a09e17df37b7f2a95ed5297b37259977286476d",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691819546000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 2,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "9ef43464d674477fb5edf0e9765a757d",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"warmups": [],
|
||||
"measured": [
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.296963999979198,
|
||||
"frames": 61440,
|
||||
"duration_s": 2.56,
|
||||
"pcm_sha256": "57f60228e2b456f6dfefc7e49df862c7bff6ba7cf39231ef1824f615948a1539",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691823656000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 3,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "9ef43464d674477fb5edf0e9765a757d",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"nearest_rank_p50_wall_s": 3.296963999979198,
|
||||
"nearest_rank_p95_wall_s": 3.296963999979198,
|
||||
"all_same_pcm_sha256": true,
|
||||
"abort_check": {
|
||||
"prefills_before_abort_request": 3,
|
||||
"prefills_after_abort_request_start": 4,
|
||||
"stale_output": false,
|
||||
"worker_exited": true,
|
||||
"ledger_after_abort": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184
|
||||
},
|
||||
"reserved": {
|
||||
"host_ram": 0
|
||||
},
|
||||
"owners": [],
|
||||
"quarantined": []
|
||||
}
|
||||
},
|
||||
"restart_check": {
|
||||
"first_runtime_ledger_after_shutdown": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184
|
||||
},
|
||||
"reserved": {
|
||||
"host_ram": 0
|
||||
},
|
||||
"owners": [],
|
||||
"quarantined": []
|
||||
},
|
||||
"fresh_startup_s": 5.100862400024198,
|
||||
"fresh_server_log": "\\\\wsl.localhost\\Ubuntu\\home\\zhout\\project\\edge_infer\\vllm-omni-edge\\benchmarks\\edge_harness\\results\\e2e_expansion_20260924\\evidence\\qwen_tts_windows_rtx\\tts_radeon_regression_server_restart.log",
|
||||
"fresh_execution_plan": {
|
||||
"backend": "external.crisp.tts.v1",
|
||||
"stage_id": 0,
|
||||
"worker_generation": "46d98233701146dd82f01c37bdd6b773",
|
||||
"worker_pid": 7728,
|
||||
"artifact_sha256": {
|
||||
"server_sha256": "999c6af252077195adb723b96da9ee5d3cd291dc7c7a4b32dc493ae148035529",
|
||||
"talker_sha256": "5227dcbc4df7c5533341d111cc469fa491a48e722b23dd10f553181b52dff2d9",
|
||||
"codec_sha256": "70dc95dbfdd9aa5d9d406236ff771d061bf17b0cda02a72513953355606e719b",
|
||||
"punc_sha256": "faf4a43e3135bc307a66194685af00f756e6f4c28c7d9e2dd8f3517cddca5c45"
|
||||
},
|
||||
"placement": "Radeon Vulkan0 talker/codec + CPU FP32 code predictor",
|
||||
"expected_gpu_name": "AMD Radeon(TM) 890M Graphics",
|
||||
"ggml_vk_visible_devices": "1",
|
||||
"gpu_memory_pool": null,
|
||||
"gpu_memory_overhead_bytes": null,
|
||||
"loaded_rss_bytes": 2726957056,
|
||||
"reserved_bytes": {
|
||||
"host_ram": 8589934592
|
||||
},
|
||||
"memory_overhead_bytes": 5368709120,
|
||||
"max_text_bytes": 4096,
|
||||
"max_wav_bytes": 4194304,
|
||||
"max_audio_s": 10.0,
|
||||
"voice": "ryan",
|
||||
"seed": 42,
|
||||
"request_capacity": 1,
|
||||
"stateful_session": "CrispASR-owned; complete WAV per request",
|
||||
"evidence": "B"
|
||||
},
|
||||
"fresh_request": {
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.3378395000472665,
|
||||
"frames": 61440,
|
||||
"duration_s": 2.56,
|
||||
"pcm_sha256": "57f60228e2b456f6dfefc7e49df862c7bff6ba7cf39231ef1824f615948a1539",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691832468000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 1,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "46d98233701146dd82f01c37bdd6b773",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
"same_pcm_as_before_abort": true,
|
||||
"late_output": false
|
||||
},
|
||||
"status": "passed",
|
||||
"ledger_after_shutdown": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184
|
||||
},
|
||||
"reserved": {
|
||||
"host_ram": 0
|
||||
},
|
||||
"owners": [],
|
||||
"quarantined": []
|
||||
}
|
||||
}
|
||||
+88
@@ -0,0 +1,88 @@
|
||||
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\w2\omni029venv\Lib\site-packages\cv2\../../x64/vc17/bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\powershell;C:\Users\zhout\.codex\tmp\arg0\codex-arg0hEiqWp;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:\Users\zhout\AppData\Local\OpenAI\Codex\bin\d5b459afd5dcd195;C:\Users\zhout\AppData\Local\OpenAI\Codex\bin\80f78947ad880e6e
|
||||
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=29994/64633 MiB id=?
|
||||
|
||||
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'
|
||||
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:56011
|
||||
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=3042 ms codec=255 ms total=3297 ms audio=2.6 s rtf=1.288
|
||||
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=10 + final=1 = T=19 trailing=1
|
||||
qwen3_tts: produced 40 frames × 16 codebooks = 640 codes
|
||||
qwen3_tts: perf — codes=3800 ms codec=272 ms total=4072 ms audio=3.2 s rtf=1.273
|
||||
crispasr-server: synthesized 3.2s audio in 4.10s (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=3061 ms codec=207 ms total=3268 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=10 + final=1 = T=19 trailing=1
|
||||
+79
@@ -0,0 +1,79 @@
|
||||
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\w2\omni029venv\Lib\site-packages\cv2\../../x64/vc17/bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\powershell;C:\Users\zhout\.codex\tmp\arg0\codex-arg0hEiqWp;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:\Users\zhout\AppData\Local\OpenAI\Codex\bin\d5b459afd5dcd195;C:\Users\zhout\AppData\Local\OpenAI\Codex\bin\80f78947ad880e6e
|
||||
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=30003/64633 MiB id=?
|
||||
|
||||
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'
|
||||
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:56035
|
||||
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=3036 ms codec=215 ms total=3251 ms audio=2.6 s rtf=1.270
|
||||
crispasr-server: synthesized 2.6s audio in 3.26s (RTF=1.27) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
|
||||
+127
@@ -0,0 +1,127 @@
|
||||
INFO 09-24 16:12:41 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed.
|
||||
INFO 09-24 16:12:41 [patch.py:510] inductor factorable-divisibility patch: installed.
|
||||
INFO 09-24 16:12:44 [stage_init_utils.py:768] [stage_init] Set VLLM_WORKER_MULTIPROC_METHOD=spawn
|
||||
WARNING 09-24 16:12:44 [stage_init_utils.py:1887] [stage_init] Failed to load transfer config: [Errno 13] Permission denied: 'C:\\Users\\zhout'
|
||||
{
|
||||
"scope": "complete resident Qwen3-TTS CustomVoice text-to-WAV through Omni StageRuntime/StagePool",
|
||||
"placement": "NVIDIA GeForce RTX 5090 Laptop GPU Vulkan talker/codec + CPU FP32 code predictor",
|
||||
"warmup_count": 0,
|
||||
"measured_count": 1,
|
||||
"memory_budget": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184,
|
||||
"gpu_vram": 17179869184
|
||||
},
|
||||
"demands": {
|
||||
"host_ram": 8589934592,
|
||||
"gpu_vram": 4294967296
|
||||
}
|
||||
},
|
||||
"startup_s": 3.8103566999780014,
|
||||
"execution_plan": {
|
||||
"backend": "external.crisp.tts.v1",
|
||||
"stage_id": 0,
|
||||
"worker_generation": "052b83e9c0bb4151899f68230d6ed5d2",
|
||||
"worker_pid": 54816,
|
||||
"artifact_sha256": {
|
||||
"server_sha256": "999c6af252077195adb723b96da9ee5d3cd291dc7c7a4b32dc493ae148035529",
|
||||
"talker_sha256": "5227dcbc4df7c5533341d111cc469fa491a48e722b23dd10f553181b52dff2d9",
|
||||
"codec_sha256": "70dc95dbfdd9aa5d9d406236ff771d061bf17b0cda02a72513953355606e719b",
|
||||
"punc_sha256": "faf4a43e3135bc307a66194685af00f756e6f4c28c7d9e2dd8f3517cddca5c45"
|
||||
},
|
||||
"placement": "RTX 5090 Laptop Vulkan0 talker/codec + CPU FP32 code predictor",
|
||||
"expected_gpu_name": "NVIDIA GeForce RTX 5090 Laptop GPU",
|
||||
"ggml_vk_visible_devices": "0",
|
||||
"gpu_memory_pool": "gpu_vram",
|
||||
"gpu_memory_overhead_bytes": 2147483648,
|
||||
"loaded_rss_bytes": 714149888,
|
||||
"reserved_bytes": {
|
||||
"host_ram": 8589934592,
|
||||
"gpu_vram": 4294967296
|
||||
},
|
||||
"memory_overhead_bytes": 5368709120,
|
||||
"max_text_bytes": 4096,
|
||||
"max_wav_bytes": 4194304,
|
||||
"max_audio_s": 10.0,
|
||||
"voice": "ryan",
|
||||
"seed": 42,
|
||||
"request_capacity": 1,
|
||||
"stateful_session": "CrispASR-owned; complete WAV per request",
|
||||
"evidence": "B"
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.4533328999532387,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-692304250000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 1,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "052b83e9c0bb4151899f68230d6ed5d2",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "The blue car is parked beside the library.",
|
||||
"wall_s": 3.995061399997212,
|
||||
"frames": 76800,
|
||||
"duration_s": 3.2,
|
||||
"pcm_sha256": "91d66409f7b3e0c5bdaa45e2091b60b8e1c3cdd64c3909d1a7878f2e9de0043f",
|
||||
"stage_event": {
|
||||
"request_id": "tts-692307703000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 2,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "052b83e9c0bb4151899f68230d6ed5d2",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"warmups": [],
|
||||
"measured": [
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.2714283999521285,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-692311703000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 3,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "052b83e9c0bb4151899f68230d6ed5d2",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"nearest_rank_p50_wall_s": 3.2714283999521285,
|
||||
"nearest_rank_p95_wall_s": 3.2714283999521285,
|
||||
"all_same_pcm_sha256": true,
|
||||
"status": "passed",
|
||||
"ledger_after_shutdown": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184,
|
||||
"gpu_vram": 17179869184
|
||||
},
|
||||
"reserved": {
|
||||
"host_ram": 0,
|
||||
"gpu_vram": 0
|
||||
},
|
||||
"owners": [],
|
||||
"quarantined": []
|
||||
}
|
||||
}
|
||||
BIN
Binary file not shown.
+123
@@ -0,0 +1,123 @@
|
||||
{
|
||||
"scope": "complete resident Qwen3-TTS CustomVoice text-to-WAV through Omni StageRuntime/StagePool",
|
||||
"placement": "NVIDIA GeForce RTX 5090 Laptop GPU Vulkan talker/codec + CPU FP32 code predictor",
|
||||
"warmup_count": 0,
|
||||
"measured_count": 1,
|
||||
"memory_budget": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184,
|
||||
"gpu_vram": 17179869184
|
||||
},
|
||||
"demands": {
|
||||
"host_ram": 8589934592,
|
||||
"gpu_vram": 4294967296
|
||||
}
|
||||
},
|
||||
"startup_s": 3.8103566999780014,
|
||||
"execution_plan": {
|
||||
"backend": "external.crisp.tts.v1",
|
||||
"stage_id": 0,
|
||||
"worker_generation": "052b83e9c0bb4151899f68230d6ed5d2",
|
||||
"worker_pid": 54816,
|
||||
"artifact_sha256": {
|
||||
"server_sha256": "999c6af252077195adb723b96da9ee5d3cd291dc7c7a4b32dc493ae148035529",
|
||||
"talker_sha256": "5227dcbc4df7c5533341d111cc469fa491a48e722b23dd10f553181b52dff2d9",
|
||||
"codec_sha256": "70dc95dbfdd9aa5d9d406236ff771d061bf17b0cda02a72513953355606e719b",
|
||||
"punc_sha256": "faf4a43e3135bc307a66194685af00f756e6f4c28c7d9e2dd8f3517cddca5c45"
|
||||
},
|
||||
"placement": "RTX 5090 Laptop Vulkan0 talker/codec + CPU FP32 code predictor",
|
||||
"expected_gpu_name": "NVIDIA GeForce RTX 5090 Laptop GPU",
|
||||
"ggml_vk_visible_devices": "0",
|
||||
"gpu_memory_pool": "gpu_vram",
|
||||
"gpu_memory_overhead_bytes": 2147483648,
|
||||
"loaded_rss_bytes": 714149888,
|
||||
"reserved_bytes": {
|
||||
"host_ram": 8589934592,
|
||||
"gpu_vram": 4294967296
|
||||
},
|
||||
"memory_overhead_bytes": 5368709120,
|
||||
"max_text_bytes": 4096,
|
||||
"max_wav_bytes": 4194304,
|
||||
"max_audio_s": 10.0,
|
||||
"voice": "ryan",
|
||||
"seed": 42,
|
||||
"request_capacity": 1,
|
||||
"stateful_session": "CrispASR-owned; complete WAV per request",
|
||||
"evidence": "B"
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.4533328999532387,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-692304250000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 1,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "052b83e9c0bb4151899f68230d6ed5d2",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "The blue car is parked beside the library.",
|
||||
"wall_s": 3.995061399997212,
|
||||
"frames": 76800,
|
||||
"duration_s": 3.2,
|
||||
"pcm_sha256": "91d66409f7b3e0c5bdaa45e2091b60b8e1c3cdd64c3909d1a7878f2e9de0043f",
|
||||
"stage_event": {
|
||||
"request_id": "tts-692307703000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 2,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "052b83e9c0bb4151899f68230d6ed5d2",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"warmups": [],
|
||||
"measured": [
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.2714283999521285,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-692311703000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 3,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "052b83e9c0bb4151899f68230d6ed5d2",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"nearest_rank_p50_wall_s": 3.2714283999521285,
|
||||
"nearest_rank_p95_wall_s": 3.2714283999521285,
|
||||
"all_same_pcm_sha256": true,
|
||||
"status": "passed",
|
||||
"ledger_after_shutdown": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184,
|
||||
"gpu_vram": 17179869184
|
||||
},
|
||||
"reserved": {
|
||||
"host_ram": 0,
|
||||
"gpu_vram": 0
|
||||
},
|
||||
"owners": [],
|
||||
"quarantined": []
|
||||
}
|
||||
}
|
||||
+87
@@ -0,0 +1,87 @@
|
||||
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\w2\omni029venv\Lib\site-packages\cv2\../../x64/vc17/bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\powershell;C:\Users\zhout\.codex\tmp\arg0\codex-arg0hEiqWp;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:\Users\zhout\AppData\Local\OpenAI\Codex\bin\d5b459afd5dcd195;C:\Users\zhout\AppData\Local\OpenAI\Codex\bin\80f78947ad880e6e
|
||||
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 = 0
|
||||
NVIDIA_VISIBLE_DEVICES = (unset)
|
||||
NVIDIA_DRIVER_CAPABILITIES = (unset)
|
||||
GGML_CUDA_DEBUG = 1
|
||||
GGML_VK_VISIBLE_DEVICES = 0
|
||||
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 = NVIDIA GeForce RTX 5090 Laptop GPU (NVIDIA) | uma: 0 | fp16: 1 | bf16: 1 | fp4: 0 | warp size: 32 | shared memory: 49152 | int dot: 1 | matrix cores: NV_coopmat2
|
||||
registered backends: 2
|
||||
[0] Vulkan (devices: 1)
|
||||
[1] CPU (devices: 1)
|
||||
registered devices : 2
|
||||
[0] gpu name=Vulkan0 desc=NVIDIA GeForce RTX 5090 Laptop GPU mem=23369/24137 MiB id=0000:64:00.0
|
||||
[1] cpu name=CPU desc=AMD Ryzen AI 9 HX 370 w/ Radeon 890M mem=29495/64633 MiB id=?
|
||||
|
||||
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'
|
||||
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:50278
|
||||
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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3097 ms codec=276 ms total=3373 ms audio=2.7 s rtf=1.240
|
||||
crispasr-server: synthesized 2.7s audio in 3.39s (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=10 + final=1 = T=19 trailing=1
|
||||
qwen3_tts: produced 40 frames × 16 codebooks = 640 codes
|
||||
qwen3_tts: perf — codes=3740 ms codec=210 ms total=3950 ms audio=3.2 s rtf=1.234
|
||||
crispasr-server: synthesized 3.2s audio in 3.96s (RTF=1.24) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3140 ms codec=90 ms total=3230 ms audio=2.7 s rtf=1.188
|
||||
crispasr-server: synthesized 2.7s audio in 3.24s (RTF=1.19) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
|
||||
+574
@@ -0,0 +1,574 @@
|
||||
INFO 09-24 16:00:30 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed.
|
||||
INFO 09-24 16:00:30 [patch.py:510] inductor factorable-divisibility patch: installed.
|
||||
INFO 09-24 16:00:33 [stage_init_utils.py:768] [stage_init] Set VLLM_WORKER_MULTIPROC_METHOD=spawn
|
||||
WARNING 09-24 16:00:33 [stage_init_utils.py:1887] [stage_init] Failed to load transfer config: [Errno 13] Permission denied: 'C:\\Users\\zhout'
|
||||
WARNING 09-24 16:01:51 [stage_init_utils.py:1887] [stage_init] Failed to load transfer config: [Errno 13] Permission denied: 'C:\\Users\\zhout'
|
||||
{
|
||||
"scope": "complete resident Qwen3-TTS CustomVoice text-to-WAV through Omni StageRuntime/StagePool",
|
||||
"placement": "NVIDIA GeForce RTX 5090 Laptop GPU Vulkan talker/codec + CPU FP32 code predictor",
|
||||
"warmup_count": 1,
|
||||
"measured_count": 20,
|
||||
"memory_budget": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184,
|
||||
"gpu_vram": 17179869184
|
||||
},
|
||||
"demands": {
|
||||
"host_ram": 8589934592,
|
||||
"gpu_vram": 4294967296
|
||||
}
|
||||
},
|
||||
"startup_s": 4.015930599998683,
|
||||
"execution_plan": {
|
||||
"backend": "external.crisp.tts.v1",
|
||||
"stage_id": 0,
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"worker_pid": 32056,
|
||||
"artifact_sha256": {
|
||||
"server_sha256": "999c6af252077195adb723b96da9ee5d3cd291dc7c7a4b32dc493ae148035529",
|
||||
"talker_sha256": "5227dcbc4df7c5533341d111cc469fa491a48e722b23dd10f553181b52dff2d9",
|
||||
"codec_sha256": "70dc95dbfdd9aa5d9d406236ff771d061bf17b0cda02a72513953355606e719b",
|
||||
"punc_sha256": "faf4a43e3135bc307a66194685af00f756e6f4c28c7d9e2dd8f3517cddca5c45"
|
||||
},
|
||||
"placement": "RTX 5090 Laptop Vulkan0 talker/codec + CPU FP32 code predictor",
|
||||
"expected_gpu_name": "NVIDIA GeForce RTX 5090 Laptop GPU",
|
||||
"ggml_vk_visible_devices": "0",
|
||||
"gpu_memory_pool": "gpu_vram",
|
||||
"gpu_memory_overhead_bytes": 2147483648,
|
||||
"loaded_rss_bytes": 714362880,
|
||||
"reserved_bytes": {
|
||||
"host_ram": 8589934592,
|
||||
"gpu_vram": 4294967296
|
||||
},
|
||||
"memory_overhead_bytes": 5368709120,
|
||||
"max_text_bytes": 4096,
|
||||
"max_wav_bytes": 4194304,
|
||||
"max_audio_s": 10.0,
|
||||
"voice": "ryan",
|
||||
"seed": 42,
|
||||
"request_capacity": 1,
|
||||
"stateful_session": "CrispASR-owned; complete WAV per request",
|
||||
"evidence": "B"
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.4986286000348628,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691573421000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 1,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "The blue car is parked beside the library.",
|
||||
"wall_s": 3.776542100007646,
|
||||
"frames": 76800,
|
||||
"duration_s": 3.2,
|
||||
"pcm_sha256": "91d66409f7b3e0c5bdaa45e2091b60b8e1c3cdd64c3909d1a7878f2e9de0043f",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691576921000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 2,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"warmups": [
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.2521973999682814,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691580703000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 3,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"measured": [
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.1866965999361128,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691583953000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 4,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.148564000031911,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691587140000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 5,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.1783547999802977,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691590296000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 6,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.199253400089219,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691593468000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 7,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.1485044999280944,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691596671000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 8,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.180224100011401,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691599828000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 9,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.237403600011021,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691603000000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 10,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.231357399956323,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691606234000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 11,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.146940500009805,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691609468000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 12,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.2141203000210226,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691612625000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 13,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.1885985999833792,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691615828000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 14,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.1893894999520853,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691619015000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 15,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.1445062999846414,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691622218000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 16,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.135147999972105,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691625359000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 17,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.1181124999420717,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691628484000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 18,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.122287500067614,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691631609000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 19,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.1797285000793636,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691634734000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 20,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.1341528999619186,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691637906000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 21,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.096011199988425,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691641046000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 22,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.152671999996528,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691644140000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 23,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"nearest_rank_p50_wall_s": 3.152671999996528,
|
||||
"nearest_rank_p95_wall_s": 3.231357399956323,
|
||||
"all_same_pcm_sha256": true,
|
||||
"abort_check": {
|
||||
"prefills_before_abort_request": 23,
|
||||
"prefills_after_abort_request_start": 24,
|
||||
"stale_output": false,
|
||||
"worker_exited": true,
|
||||
"ledger_after_abort": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184,
|
||||
"gpu_vram": 17179869184
|
||||
},
|
||||
"reserved": {
|
||||
"host_ram": 0,
|
||||
"gpu_vram": 0
|
||||
},
|
||||
"owners": [],
|
||||
"quarantined": []
|
||||
}
|
||||
},
|
||||
"restart_check": {
|
||||
"first_runtime_ledger_after_shutdown": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184,
|
||||
"gpu_vram": 17179869184
|
||||
},
|
||||
"reserved": {
|
||||
"host_ram": 0,
|
||||
"gpu_vram": 0
|
||||
},
|
||||
"owners": [],
|
||||
"quarantined": []
|
||||
},
|
||||
"fresh_startup_s": 3.4445682000368834,
|
||||
"fresh_server_log": "\\\\wsl.localhost\\Ubuntu\\home\\zhout\\project\\edge_infer\\vllm-omni-edge\\benchmarks\\edge_harness\\results\\e2e_expansion_20260924\\evidence\\qwen_tts_windows_rtx\\tts_rtx_profile20_server_restart.log",
|
||||
"fresh_execution_plan": {
|
||||
"backend": "external.crisp.tts.v1",
|
||||
"stage_id": 0,
|
||||
"worker_generation": "052f47ad0bd8410fa704706d54a60f17",
|
||||
"worker_pid": 16336,
|
||||
"artifact_sha256": {
|
||||
"server_sha256": "999c6af252077195adb723b96da9ee5d3cd291dc7c7a4b32dc493ae148035529",
|
||||
"talker_sha256": "5227dcbc4df7c5533341d111cc469fa491a48e722b23dd10f553181b52dff2d9",
|
||||
"codec_sha256": "70dc95dbfdd9aa5d9d406236ff771d061bf17b0cda02a72513953355606e719b",
|
||||
"punc_sha256": "faf4a43e3135bc307a66194685af00f756e6f4c28c7d9e2dd8f3517cddca5c45"
|
||||
},
|
||||
"placement": "RTX 5090 Laptop Vulkan0 talker/codec + CPU FP32 code predictor",
|
||||
"expected_gpu_name": "NVIDIA GeForce RTX 5090 Laptop GPU",
|
||||
"ggml_vk_visible_devices": "0",
|
||||
"gpu_memory_pool": "gpu_vram",
|
||||
"gpu_memory_overhead_bytes": 2147483648,
|
||||
"loaded_rss_bytes": 714231808,
|
||||
"reserved_bytes": {
|
||||
"host_ram": 8589934592,
|
||||
"gpu_vram": 4294967296
|
||||
},
|
||||
"memory_overhead_bytes": 5368709120,
|
||||
"max_text_bytes": 4096,
|
||||
"max_wav_bytes": 4194304,
|
||||
"max_audio_s": 10.0,
|
||||
"voice": "ryan",
|
||||
"seed": 42,
|
||||
"request_capacity": 1,
|
||||
"stateful_session": "CrispASR-owned; complete WAV per request",
|
||||
"evidence": "B"
|
||||
},
|
||||
"fresh_request": {
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.317716399906203,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691651125000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 1,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "052f47ad0bd8410fa704706d54a60f17",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
"same_pcm_as_before_abort": true,
|
||||
"late_output": false
|
||||
},
|
||||
"status": "passed",
|
||||
"ledger_after_shutdown": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184,
|
||||
"gpu_vram": 17179869184
|
||||
},
|
||||
"reserved": {
|
||||
"host_ram": 0,
|
||||
"gpu_vram": 0
|
||||
},
|
||||
"owners": [],
|
||||
"quarantined": []
|
||||
}
|
||||
}
|
||||
BIN
Binary file not shown.
+569
@@ -0,0 +1,569 @@
|
||||
{
|
||||
"scope": "complete resident Qwen3-TTS CustomVoice text-to-WAV through Omni StageRuntime/StagePool",
|
||||
"placement": "NVIDIA GeForce RTX 5090 Laptop GPU Vulkan talker/codec + CPU FP32 code predictor",
|
||||
"warmup_count": 1,
|
||||
"measured_count": 20,
|
||||
"memory_budget": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184,
|
||||
"gpu_vram": 17179869184
|
||||
},
|
||||
"demands": {
|
||||
"host_ram": 8589934592,
|
||||
"gpu_vram": 4294967296
|
||||
}
|
||||
},
|
||||
"startup_s": 4.015930599998683,
|
||||
"execution_plan": {
|
||||
"backend": "external.crisp.tts.v1",
|
||||
"stage_id": 0,
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"worker_pid": 32056,
|
||||
"artifact_sha256": {
|
||||
"server_sha256": "999c6af252077195adb723b96da9ee5d3cd291dc7c7a4b32dc493ae148035529",
|
||||
"talker_sha256": "5227dcbc4df7c5533341d111cc469fa491a48e722b23dd10f553181b52dff2d9",
|
||||
"codec_sha256": "70dc95dbfdd9aa5d9d406236ff771d061bf17b0cda02a72513953355606e719b",
|
||||
"punc_sha256": "faf4a43e3135bc307a66194685af00f756e6f4c28c7d9e2dd8f3517cddca5c45"
|
||||
},
|
||||
"placement": "RTX 5090 Laptop Vulkan0 talker/codec + CPU FP32 code predictor",
|
||||
"expected_gpu_name": "NVIDIA GeForce RTX 5090 Laptop GPU",
|
||||
"ggml_vk_visible_devices": "0",
|
||||
"gpu_memory_pool": "gpu_vram",
|
||||
"gpu_memory_overhead_bytes": 2147483648,
|
||||
"loaded_rss_bytes": 714362880,
|
||||
"reserved_bytes": {
|
||||
"host_ram": 8589934592,
|
||||
"gpu_vram": 4294967296
|
||||
},
|
||||
"memory_overhead_bytes": 5368709120,
|
||||
"max_text_bytes": 4096,
|
||||
"max_wav_bytes": 4194304,
|
||||
"max_audio_s": 10.0,
|
||||
"voice": "ryan",
|
||||
"seed": 42,
|
||||
"request_capacity": 1,
|
||||
"stateful_session": "CrispASR-owned; complete WAV per request",
|
||||
"evidence": "B"
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.4986286000348628,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691573421000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 1,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "The blue car is parked beside the library.",
|
||||
"wall_s": 3.776542100007646,
|
||||
"frames": 76800,
|
||||
"duration_s": 3.2,
|
||||
"pcm_sha256": "91d66409f7b3e0c5bdaa45e2091b60b8e1c3cdd64c3909d1a7878f2e9de0043f",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691576921000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 2,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"warmups": [
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.2521973999682814,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691580703000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 3,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"measured": [
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.1866965999361128,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691583953000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 4,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.148564000031911,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691587140000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 5,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.1783547999802977,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691590296000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 6,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.199253400089219,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691593468000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 7,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.1485044999280944,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691596671000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 8,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.180224100011401,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691599828000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 9,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.237403600011021,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691603000000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 10,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.231357399956323,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691606234000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 11,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.146940500009805,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691609468000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 12,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.2141203000210226,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691612625000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 13,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.1885985999833792,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691615828000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 14,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.1893894999520853,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691619015000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 15,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.1445062999846414,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691622218000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 16,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.135147999972105,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691625359000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 17,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.1181124999420717,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691628484000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 18,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.122287500067614,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691631609000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 19,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.1797285000793636,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691634734000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 20,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.1341528999619186,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691637906000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 21,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.096011199988425,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691641046000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 22,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.152671999996528,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691644140000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 23,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "a4f8ff26359d414687b47d1b82fdcde4",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"nearest_rank_p50_wall_s": 3.152671999996528,
|
||||
"nearest_rank_p95_wall_s": 3.231357399956323,
|
||||
"all_same_pcm_sha256": true,
|
||||
"abort_check": {
|
||||
"prefills_before_abort_request": 23,
|
||||
"prefills_after_abort_request_start": 24,
|
||||
"stale_output": false,
|
||||
"worker_exited": true,
|
||||
"ledger_after_abort": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184,
|
||||
"gpu_vram": 17179869184
|
||||
},
|
||||
"reserved": {
|
||||
"host_ram": 0,
|
||||
"gpu_vram": 0
|
||||
},
|
||||
"owners": [],
|
||||
"quarantined": []
|
||||
}
|
||||
},
|
||||
"restart_check": {
|
||||
"first_runtime_ledger_after_shutdown": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184,
|
||||
"gpu_vram": 17179869184
|
||||
},
|
||||
"reserved": {
|
||||
"host_ram": 0,
|
||||
"gpu_vram": 0
|
||||
},
|
||||
"owners": [],
|
||||
"quarantined": []
|
||||
},
|
||||
"fresh_startup_s": 3.4445682000368834,
|
||||
"fresh_server_log": "\\\\wsl.localhost\\Ubuntu\\home\\zhout\\project\\edge_infer\\vllm-omni-edge\\benchmarks\\edge_harness\\results\\e2e_expansion_20260924\\evidence\\qwen_tts_windows_rtx\\tts_rtx_profile20_server_restart.log",
|
||||
"fresh_execution_plan": {
|
||||
"backend": "external.crisp.tts.v1",
|
||||
"stage_id": 0,
|
||||
"worker_generation": "052f47ad0bd8410fa704706d54a60f17",
|
||||
"worker_pid": 16336,
|
||||
"artifact_sha256": {
|
||||
"server_sha256": "999c6af252077195adb723b96da9ee5d3cd291dc7c7a4b32dc493ae148035529",
|
||||
"talker_sha256": "5227dcbc4df7c5533341d111cc469fa491a48e722b23dd10f553181b52dff2d9",
|
||||
"codec_sha256": "70dc95dbfdd9aa5d9d406236ff771d061bf17b0cda02a72513953355606e719b",
|
||||
"punc_sha256": "faf4a43e3135bc307a66194685af00f756e6f4c28c7d9e2dd8f3517cddca5c45"
|
||||
},
|
||||
"placement": "RTX 5090 Laptop Vulkan0 talker/codec + CPU FP32 code predictor",
|
||||
"expected_gpu_name": "NVIDIA GeForce RTX 5090 Laptop GPU",
|
||||
"ggml_vk_visible_devices": "0",
|
||||
"gpu_memory_pool": "gpu_vram",
|
||||
"gpu_memory_overhead_bytes": 2147483648,
|
||||
"loaded_rss_bytes": 714231808,
|
||||
"reserved_bytes": {
|
||||
"host_ram": 8589934592,
|
||||
"gpu_vram": 4294967296
|
||||
},
|
||||
"memory_overhead_bytes": 5368709120,
|
||||
"max_text_bytes": 4096,
|
||||
"max_wav_bytes": 4194304,
|
||||
"max_audio_s": 10.0,
|
||||
"voice": "ryan",
|
||||
"seed": 42,
|
||||
"request_capacity": 1,
|
||||
"stateful_session": "CrispASR-owned; complete WAV per request",
|
||||
"evidence": "B"
|
||||
},
|
||||
"fresh_request": {
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.317716399906203,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691651125000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 1,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "052f47ad0bd8410fa704706d54a60f17",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
"same_pcm_as_before_abort": true,
|
||||
"late_output": false
|
||||
},
|
||||
"status": "passed",
|
||||
"ledger_after_shutdown": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184,
|
||||
"gpu_vram": 17179869184
|
||||
},
|
||||
"reserved": {
|
||||
"host_ram": 0,
|
||||
"gpu_vram": 0
|
||||
},
|
||||
"owners": [],
|
||||
"quarantined": []
|
||||
}
|
||||
}
|
||||
+168
@@ -0,0 +1,168 @@
|
||||
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\w2\omni029venv\Lib\site-packages\cv2\../../x64/vc17/bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\powershell;C:\Users\zhout\.codex\tmp\arg0\codex-arg0hEiqWp;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:\Users\zhout\AppData\Local\OpenAI\Codex\bin\d5b459afd5dcd195;C:\Users\zhout\AppData\Local\OpenAI\Codex\bin\80f78947ad880e6e
|
||||
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 = 0
|
||||
NVIDIA_VISIBLE_DEVICES = (unset)
|
||||
NVIDIA_DRIVER_CAPABILITIES = (unset)
|
||||
GGML_CUDA_DEBUG = 1
|
||||
GGML_VK_VISIBLE_DEVICES = 0
|
||||
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 = NVIDIA GeForce RTX 5090 Laptop GPU (NVIDIA) | uma: 0 | fp16: 1 | bf16: 1 | fp4: 0 | warp size: 32 | shared memory: 49152 | int dot: 1 | matrix cores: NV_coopmat2
|
||||
registered backends: 2
|
||||
[0] Vulkan (devices: 1)
|
||||
[1] CPU (devices: 1)
|
||||
registered devices : 2
|
||||
[0] gpu name=Vulkan0 desc=NVIDIA GeForce RTX 5090 Laptop GPU mem=23369/24137 MiB id=0000:64:00.0
|
||||
[1] cpu name=CPU desc=AMD Ryzen AI 9 HX 370 w/ Radeon 890M mem=17597/64633 MiB id=?
|
||||
|
||||
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'
|
||||
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:54972
|
||||
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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3094 ms codec=332 ms total=3426 ms audio=2.7 s rtf=1.260
|
||||
crispasr-server: synthesized 2.7s audio in 3.44s (RTF=1.27) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
|
||||
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=3547 ms codec=208 ms total=3754 ms audio=3.2 s rtf=1.173
|
||||
crispasr-server: synthesized 3.2s audio in 3.76s (RTF=1.18) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3126 ms codec=89 ms total=3215 ms audio=2.7 s rtf=1.182
|
||||
crispasr-server: synthesized 2.7s audio in 3.22s (RTF=1.18) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3055 ms codec=94 ms total=3149 ms audio=2.7 s rtf=1.158
|
||||
crispasr-server: synthesized 2.7s audio in 3.16s (RTF=1.16) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3038 ms codec=91 ms total=3129 ms audio=2.7 s rtf=1.150
|
||||
crispasr-server: synthesized 2.7s audio in 3.14s (RTF=1.15) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3072 ms codec=88 ms total=3160 ms audio=2.7 s rtf=1.162
|
||||
crispasr-server: synthesized 2.7s audio in 3.17s (RTF=1.16) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3080 ms codec=88 ms total=3168 ms audio=2.7 s rtf=1.165
|
||||
crispasr-server: synthesized 2.7s audio in 3.18s (RTF=1.17) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3028 ms codec=89 ms total=3117 ms audio=2.7 s rtf=1.146
|
||||
crispasr-server: synthesized 2.7s audio in 3.12s (RTF=1.15) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3063 ms codec=99 ms total=3161 ms audio=2.7 s rtf=1.162
|
||||
crispasr-server: synthesized 2.7s audio in 3.17s (RTF=1.17) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3099 ms codec=102 ms total=3201 ms audio=2.7 s rtf=1.177
|
||||
crispasr-server: synthesized 2.7s audio in 3.21s (RTF=1.18) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3093 ms codec=105 ms total=3198 ms audio=2.7 s rtf=1.176
|
||||
crispasr-server: synthesized 2.7s audio in 3.20s (RTF=1.18) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3018 ms codec=101 ms total=3119 ms audio=2.7 s rtf=1.147
|
||||
crispasr-server: synthesized 2.7s audio in 3.13s (RTF=1.15) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3070 ms codec=104 ms total=3174 ms audio=2.7 s rtf=1.167
|
||||
crispasr-server: synthesized 2.7s audio in 3.18s (RTF=1.17) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3056 ms codec=101 ms total=3157 ms audio=2.7 s rtf=1.161
|
||||
crispasr-server: synthesized 2.7s audio in 3.16s (RTF=1.16) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3051 ms codec=97 ms total=3148 ms audio=2.7 s rtf=1.157
|
||||
crispasr-server: synthesized 2.7s audio in 3.15s (RTF=1.16) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3027 ms codec=101 ms total=3128 ms audio=2.7 s rtf=1.150
|
||||
crispasr-server: synthesized 2.7s audio in 3.13s (RTF=1.15) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3021 ms codec=97 ms total=3118 ms audio=2.7 s rtf=1.146
|
||||
crispasr-server: synthesized 2.7s audio in 3.12s (RTF=1.15) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3006 ms codec=96 ms total=3102 ms audio=2.7 s rtf=1.140
|
||||
crispasr-server: synthesized 2.7s audio in 3.11s (RTF=1.14) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=2982 ms codec=100 ms total=3081 ms audio=2.7 s rtf=1.133
|
||||
crispasr-server: synthesized 2.7s audio in 3.09s (RTF=1.14) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3045 ms codec=98 ms total=3144 ms audio=2.7 s rtf=1.156
|
||||
crispasr-server: synthesized 2.7s audio in 3.15s (RTF=1.16) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3009 ms codec=99 ms total=3109 ms audio=2.7 s rtf=1.143
|
||||
crispasr-server: synthesized 2.7s audio in 3.11s (RTF=1.14) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=2963 ms codec=104 ms total=3067 ms audio=2.7 s rtf=1.127
|
||||
crispasr-server: synthesized 2.7s audio in 3.07s (RTF=1.13) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3014 ms codec=101 ms total=3115 ms audio=2.7 s rtf=1.145
|
||||
crispasr-server: synthesized 2.7s audio in 3.12s (RTF=1.15) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
|
||||
qwen3_tts[customvoice]: prefill role=3 + bridge=5 + text=10 + final=1 = T=19 trailing=1
|
||||
+79
@@ -0,0 +1,79 @@
|
||||
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\w2\omni029venv\Lib\site-packages\cv2\../../x64/vc17/bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\powershell;C:\Users\zhout\.codex\tmp\arg0\codex-arg0hEiqWp;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:\Users\zhout\AppData\Local\OpenAI\Codex\bin\d5b459afd5dcd195;C:\Users\zhout\AppData\Local\OpenAI\Codex\bin\80f78947ad880e6e
|
||||
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 = 0
|
||||
NVIDIA_VISIBLE_DEVICES = (unset)
|
||||
NVIDIA_DRIVER_CAPABILITIES = (unset)
|
||||
GGML_CUDA_DEBUG = 1
|
||||
GGML_VK_VISIBLE_DEVICES = 0
|
||||
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 = NVIDIA GeForce RTX 5090 Laptop GPU (NVIDIA) | uma: 0 | fp16: 1 | bf16: 1 | fp4: 0 | warp size: 32 | shared memory: 49152 | int dot: 1 | matrix cores: NV_coopmat2
|
||||
registered backends: 2
|
||||
[0] Vulkan (devices: 1)
|
||||
[1] CPU (devices: 1)
|
||||
registered devices : 2
|
||||
[0] gpu name=Vulkan0 desc=NVIDIA GeForce RTX 5090 Laptop GPU mem=23369/24137 MiB id=0000:64:00.0
|
||||
[1] cpu name=CPU desc=AMD Ryzen AI 9 HX 370 w/ Radeon 890M mem=31932/64633 MiB id=?
|
||||
|
||||
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'
|
||||
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:61594
|
||||
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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=2977 ms codec=270 ms total=3248 ms audio=2.7 s rtf=1.194
|
||||
crispasr-server: synthesized 2.7s audio in 3.26s (RTF=1.20) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
INFO 09-24 16:03:21 [patch.py:259] NVFP4 W4A4 weight_scale NaN-clamp: installed.
|
||||
INFO 09-24 16:03:21 [patch.py:510] inductor factorable-divisibility patch: installed.
|
||||
INFO 09-24 16:03:25 [omni_base.py:216] [AsyncOmni] Initializing with model C:\Users\zhout\w2\models\Qwen3-TTS-0.6B-85e237c
|
||||
INFO 09-24 16:03:25 [async_omni_engine.py:172] [AsyncOmniEngine] Initializing with model C:\Users\zhout\w2\models\Qwen3-TTS-0.6B-85e237c
|
||||
ERROR 09-24 16:03:25 [repo_utils.py:119] Error parsing config for C:\Users\zhout\w2\models\Qwen3-TTS-0.6B-85e237c: The checkpoint you are trying to load has model type `qwen3_tts` but Transformers does not recognize this architecture. This could be because of an issue with the checkpoint, or because your version of Transformers is out of date.
|
||||
|
||||
ERROR 09-24 16:03:25 [repo_utils.py:119]
|
||||
|
||||
ERROR 09-24 16:03:25 [repo_utils.py:119] You can update Transformers with the command `pip install --upgrade transformers`. If this does not work, and the checkpoint is very new, then there may not be a release version that supports this model yet. In this case, you can get the most up-to-date code by installing Transformers from source with the command `pip install git+https://github.com/huggingface/transformers.git`, retrying 1 of 2
|
||||
ERROR 09-24 16:03:27 [repo_utils.py:117] Error parsing config for C:\Users\zhout\w2\models\Qwen3-TTS-0.6B-85e237c: The checkpoint you are trying to load has model type `qwen3_tts` but Transformers does not recognize this architecture. This could be because of an issue with the checkpoint, or because your version of Transformers is out of date.
|
||||
|
||||
ERROR 09-24 16:03:27 [repo_utils.py:117]
|
||||
|
||||
ERROR 09-24 16:03:27 [repo_utils.py:117] You can update Transformers with the command `pip install --upgrade transformers`. If this does not work, and the checkpoint is very new, then there may not be a release version that supports this model yet. In this case, you can get the most up-to-date code by installing Transformers from source with the command `pip install git+https://github.com/huggingface/transformers.git`
|
||||
INFO 09-24 16:03:27 [async_omni_engine.py:290] [AsyncOmniEngine] Launching Orchestrator thread with 1 stages
|
||||
INFO 09-24 16:03:27 [stage_init_utils.py:768] [stage_init] Set VLLM_WORKER_MULTIPROC_METHOD=spawn
|
||||
INFO 09-24 16:03:27 [initialization.py:356] Loaded OmniTransferConfig with 0 connector configurations
|
||||
INFO 09-24 16:03:31 [orchestrator.py:604] [Orchestrator] Starting event loop
|
||||
INFO 09-24 16:03:31 [async_omni_engine.py:323] [AsyncOmniEngine] Orchestrator ready with 1 stages
|
||||
INFO 09-24 16:03:31 [omni_base.py:235] [AsyncOmni] AsyncOmniEngine initialized in 6.60 seconds
|
||||
INFO 09-24 16:03:31 [omni_base.py:255] [AsyncOmni] Initialized with 1 stages for model C:\Users\zhout\w2\models\Qwen3-TTS-0.6B-85e237c
|
||||
INFO 09-24 16:03:35 [omni_base.py:781] [AsyncOmni] Shutting down
|
||||
INFO 09-24 16:03:35 [async_omni_engine.py:1807] [AsyncOmniEngine] Shutting down Orchestrator
|
||||
INFO 09-24 16:03:35 [orchestrator.py:705] [Orchestrator] Received shutdown signal
|
||||
INFO 09-24 16:03:35 [orchestrator.py:3092] [Orchestrator] Shutting down all 1 client(s)
|
||||
INFO 09-24 16:03:35 [stage_pool.py:1354] [StagePool] Stage 0 replica 0 shut down
|
||||
{
|
||||
"entrypoint": "AsyncOmni.generate",
|
||||
"pipeline": "qwen3_tts_crisp_hybrid",
|
||||
"memory_budget": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184,
|
||||
"gpu_vram": 17179869184
|
||||
},
|
||||
"demands": {
|
||||
"host_ram": 8589934592,
|
||||
"gpu_vram": 4294967296
|
||||
}
|
||||
},
|
||||
"startup_s": 6.601007299963385,
|
||||
"request_wall_s": 3.8559913999633864,
|
||||
"outputs": [
|
||||
{
|
||||
"request_id": "public-tts-1",
|
||||
"sample_rate": 24000,
|
||||
"frames": 65280,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "public-tts-1-9b478507",
|
||||
"stage_id": 0,
|
||||
"epoch": 1,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "ba82b3743db54744ae58909bc3311bf8",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"status": "passed"
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"entrypoint": "AsyncOmni.generate",
|
||||
"pipeline": "qwen3_tts_crisp_hybrid",
|
||||
"memory_budget": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184,
|
||||
"gpu_vram": 17179869184
|
||||
},
|
||||
"demands": {
|
||||
"host_ram": 8589934592,
|
||||
"gpu_vram": 4294967296
|
||||
}
|
||||
},
|
||||
"startup_s": 6.601007299963385,
|
||||
"request_wall_s": 3.8559913999633864,
|
||||
"outputs": [
|
||||
{
|
||||
"request_id": "public-tts-1",
|
||||
"sample_rate": 24000,
|
||||
"frames": 65280,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "public-tts-1-9b478507",
|
||||
"stage_id": 0,
|
||||
"epoch": 1,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "ba82b3743db54744ae58909bc3311bf8",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"status": "passed"
|
||||
}
|
||||
+79
@@ -0,0 +1,79 @@
|
||||
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\w2\omni029venv\Lib\site-packages\cv2\../../x64/vc17/bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\powershell;C:\Users\zhout\.codex\tmp\arg0\codex-arg0hEiqWp;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:\Users\zhout\AppData\Local\OpenAI\Codex\bin\d5b459afd5dcd195;C:\Users\zhout\AppData\Local\OpenAI\Codex\bin\80f78947ad880e6e
|
||||
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 = 0
|
||||
NVIDIA_VISIBLE_DEVICES = (unset)
|
||||
NVIDIA_DRIVER_CAPABILITIES = (unset)
|
||||
GGML_CUDA_DEBUG = 1
|
||||
GGML_VK_VISIBLE_DEVICES = 0
|
||||
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 = NVIDIA GeForce RTX 5090 Laptop GPU (NVIDIA) | uma: 0 | fp16: 1 | bf16: 1 | fp4: 0 | warp size: 32 | shared memory: 49152 | int dot: 1 | matrix cores: NV_coopmat2
|
||||
registered backends: 2
|
||||
[0] Vulkan (devices: 1)
|
||||
[1] CPU (devices: 1)
|
||||
registered devices : 2
|
||||
[0] gpu name=Vulkan0 desc=NVIDIA GeForce RTX 5090 Laptop GPU mem=23369/24137 MiB id=0000:64:00.0
|
||||
[1] cpu name=CPU desc=AMD Ryzen AI 9 HX 370 w/ Radeon 890M mem=29344/64633 MiB id=?
|
||||
|
||||
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'
|
||||
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:61973
|
||||
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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=3525 ms codec=256 ms total=3782 ms audio=2.7 s rtf=1.390
|
||||
crispasr-server: synthesized 2.7s audio in 3.80s (RTF=1.40) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"status": "passed",
|
||||
"scope": "RTX TTS 3 GiB GPU-VRAM demand is refused before server launch",
|
||||
"artifact_sha256": {
|
||||
"server_sha256": "999c6af252077195adb723b96da9ee5d3cd291dc7c7a4b32dc493ae148035529",
|
||||
"talker_sha256": "5227dcbc4df7c5533341d111cc469fa491a48e722b23dd10f553181b52dff2d9",
|
||||
"codec_sha256": "70dc95dbfdd9aa5d9d406236ff771d061bf17b0cda02a72513953355606e719b",
|
||||
"punc_sha256": "faf4a43e3135bc307a66194685af00f756e6f4c28c7d9e2dd8f3517cddca5c45"
|
||||
},
|
||||
"declared_gpu_reservation_bytes": 3221225472,
|
||||
"declared_gpu_overhead_bytes": 2147483648,
|
||||
"error": "ResourceUnavailable: TTS weights plus GPU state/workspace/headroom exceed GPU-VRAM reservation",
|
||||
"server_log_created": false,
|
||||
"ledger_after_refusal": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184,
|
||||
"gpu_vram": 17179869184
|
||||
},
|
||||
"reserved": {
|
||||
"host_ram": 0,
|
||||
"gpu_vram": 0
|
||||
},
|
||||
"owners": [],
|
||||
"quarantined": []
|
||||
}
|
||||
}
|
||||
BIN
Binary file not shown.
+16
@@ -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": "b650492ec4ad4d34fdd07c63517fe846a8c6a762e7d7c5d552b9a4bf88189013",
|
||||
"input_sample_rate": 24000,
|
||||
"input_duration_s": 2.72,
|
||||
"reference_text": "Hello from the local computer.",
|
||||
"transcript": "Hello from the local computer.",
|
||||
"word_error_rate": 0.0,
|
||||
"asr_load_s": 0.8373715999769047,
|
||||
"asr_inference_s": 1.163089800043963
|
||||
}
|
||||
+123
@@ -0,0 +1,123 @@
|
||||
{
|
||||
"scope": "complete resident Qwen3-TTS CustomVoice text-to-WAV through Omni StageRuntime/StagePool",
|
||||
"placement": "NVIDIA GeForce RTX 5090 Laptop GPU Vulkan talker/codec + CPU FP32 code predictor",
|
||||
"warmup_count": 0,
|
||||
"measured_count": 1,
|
||||
"memory_budget": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184,
|
||||
"gpu_vram": 17179869184
|
||||
},
|
||||
"demands": {
|
||||
"host_ram": 8589934592,
|
||||
"gpu_vram": 4294967296
|
||||
}
|
||||
},
|
||||
"startup_s": 3.9852350000292063,
|
||||
"execution_plan": {
|
||||
"backend": "external.crisp.tts.v1",
|
||||
"stage_id": 0,
|
||||
"worker_generation": "00522641c0fc494185bde30585d3eb35",
|
||||
"worker_pid": 34968,
|
||||
"artifact_sha256": {
|
||||
"server_sha256": "999c6af252077195adb723b96da9ee5d3cd291dc7c7a4b32dc493ae148035529",
|
||||
"talker_sha256": "5227dcbc4df7c5533341d111cc469fa491a48e722b23dd10f553181b52dff2d9",
|
||||
"codec_sha256": "70dc95dbfdd9aa5d9d406236ff771d061bf17b0cda02a72513953355606e719b",
|
||||
"punc_sha256": "faf4a43e3135bc307a66194685af00f756e6f4c28c7d9e2dd8f3517cddca5c45"
|
||||
},
|
||||
"placement": "RTX 5090 Laptop Vulkan0 talker/codec + CPU FP32 code predictor",
|
||||
"expected_gpu_name": "NVIDIA GeForce RTX 5090 Laptop GPU",
|
||||
"ggml_vk_visible_devices": "0",
|
||||
"gpu_memory_pool": "gpu_vram",
|
||||
"gpu_memory_overhead_bytes": 2147483648,
|
||||
"loaded_rss_bytes": 714141696,
|
||||
"reserved_bytes": {
|
||||
"host_ram": 8589934592,
|
||||
"gpu_vram": 4294967296
|
||||
},
|
||||
"memory_overhead_bytes": 5368709120,
|
||||
"max_text_bytes": 4096,
|
||||
"max_wav_bytes": 4194304,
|
||||
"max_audio_s": 10.0,
|
||||
"voice": "ryan",
|
||||
"seed": 42,
|
||||
"request_capacity": 1,
|
||||
"stateful_session": "CrispASR-owned; complete WAV per request",
|
||||
"evidence": "B"
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 13.98629000002984,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691400765000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 1,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "00522641c0fc494185bde30585d3eb35",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"text": "The blue car is parked beside the library.",
|
||||
"wall_s": 3.7566473999759182,
|
||||
"frames": 76800,
|
||||
"duration_s": 3.2,
|
||||
"pcm_sha256": "91d66409f7b3e0c5bdaa45e2091b60b8e1c3cdd64c3909d1a7878f2e9de0043f",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691414750000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 2,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "00522641c0fc494185bde30585d3eb35",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"warmups": [],
|
||||
"measured": [
|
||||
{
|
||||
"text": "Hello from the local computer.",
|
||||
"wall_s": 3.0845760999945924,
|
||||
"frames": 65280,
|
||||
"duration_s": 2.72,
|
||||
"pcm_sha256": "d3d071531e2574b933c8acf18e2a0344c8961493bd17c63662307270a99d265c",
|
||||
"stage_event": {
|
||||
"request_id": "tts-691418515000000",
|
||||
"stage_id": 0,
|
||||
"epoch": 3,
|
||||
"seq": 1,
|
||||
"kind": "audio",
|
||||
"worker_generation": "00522641c0fc494185bde30585d3eb35",
|
||||
"buffers": [],
|
||||
"terminal": true,
|
||||
"error": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"nearest_rank_p50_wall_s": 3.0845760999945924,
|
||||
"nearest_rank_p95_wall_s": 3.0845760999945924,
|
||||
"all_same_pcm_sha256": true,
|
||||
"status": "passed",
|
||||
"ledger_after_shutdown": {
|
||||
"capacities": {
|
||||
"host_ram": 17179869184,
|
||||
"gpu_vram": 17179869184
|
||||
},
|
||||
"reserved": {
|
||||
"host_ram": 0,
|
||||
"gpu_vram": 0
|
||||
},
|
||||
"owners": [],
|
||||
"quarantined": []
|
||||
}
|
||||
}
|
||||
+87
@@ -0,0 +1,87 @@
|
||||
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\w2\omni029venv\Lib\site-packages\cv2\../../x64/vc17/bin;C:\Users\zhout\.cache\codex-runtimes\codex-primary-runtime\dependencies\native\powershell;C:\Users\zhout\.codex\tmp\arg0\codex-arg0hEiqWp;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:\Users\zhout\AppData\Local\OpenAI\Codex\bin\d5b459afd5dcd195;C:\Users\zhout\AppData\Local\OpenAI\Codex\bin\80f78947ad880e6e
|
||||
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 = 0
|
||||
NVIDIA_VISIBLE_DEVICES = (unset)
|
||||
NVIDIA_DRIVER_CAPABILITIES = (unset)
|
||||
GGML_CUDA_DEBUG = 1
|
||||
GGML_VK_VISIBLE_DEVICES = 0
|
||||
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 = NVIDIA GeForce RTX 5090 Laptop GPU (NVIDIA) | uma: 0 | fp16: 1 | bf16: 1 | fp4: 0 | warp size: 32 | shared memory: 49152 | int dot: 1 | matrix cores: NV_coopmat2
|
||||
registered backends: 2
|
||||
[0] Vulkan (devices: 1)
|
||||
[1] CPU (devices: 1)
|
||||
registered devices : 2
|
||||
[0] gpu name=Vulkan0 desc=NVIDIA GeForce RTX 5090 Laptop GPU mem=23369/24137 MiB id=0000:64:00.0
|
||||
[1] cpu name=CPU desc=AMD Ryzen AI 9 HX 370 w/ Radeon 890M mem=12217/64633 MiB id=?
|
||||
|
||||
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'
|
||||
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:59553
|
||||
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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=6414 ms codec=7300 ms total=13714 ms audio=2.7 s rtf=5.042
|
||||
crispasr-server: synthesized 2.7s audio in 13.91s (RTF=5.12) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
|
||||
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=3546 ms codec=190 ms total=3736 ms audio=3.2 s rtf=1.168
|
||||
crispasr-server: synthesized 3.2s audio in 3.74s (RTF=1.17) 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 34 frames × 16 codebooks = 544 codes
|
||||
qwen3_tts: perf — codes=2966 ms codec=87 ms total=3054 ms audio=2.7 s rtf=1.123
|
||||
crispasr-server: synthesized 2.7s audio in 3.06s (RTF=1.13) voice='<startup>' speed=1.00 format=wav model='<unset>' chunks=1 sr=24000Hz
|
||||
@@ -14,6 +14,8 @@ A separate [native Windows RTX Spark GGUF Omni profile](../../../e2e_expansion_2
|
||||
|
||||
The [native Windows RTX Qwen3.8-27B NVFP4 attempt](../../../e2e_expansion_20260924/evidence/qwen38_omni_windows_rtx/README.md) loaded all three pinned weight shards but failed before inference during vLLM Marlin post-load scale permutation with an unsupported PTX toolchain error. The current Windows driver reports CUDA 13.3 while the installed vLLM wheel was built with CUDA 13.4. This narrows the Windows blocker to the tested runtime combination; it does not reverse the WSL scoped text/image pass or qualify a Windows output.
|
||||
|
||||
A [native Windows RTX Qwen3-TTS Omni hybrid route](../../../e2e_expansion_20260924/evidence/qwen_tts_windows_rtx/README.md) now returns complete 24 kHz WAVs with talker/codec on RTX Vulkan0 and predictor on CPU FP32. One warmup plus 20/20 serial outputs had identical PCM at p50/p95 complete-request wall 3.153/3.231 s for 2.72 s audio. Public audio, explicit host/GPU admission, refusal of an undersized GPU reservation and fresh-stage recovery after server-started cancellation passed. The PCM differs from the Radeon hybrid, and the complete-WAV RTF remains above 1; the existing CUDA sustained playback findings are separate.
|
||||
|
||||
A complete pinned [Spark 1.7B BF16 WSL CPU checkpoint and acceptance run](../../../e2e_expansion_20260924/evidence/spark_bf16_wsl_cpu/README.md) adds a second current-Omni text artifact to the GGUF route. Twelve prompts produced 128 tokens each with clean cancellation; all 12 token-ID sequences exactly matched standalone vLLM on the same checkpoint. One warmup plus 20 serial 28-prompt-token/64-output-token requests measured p50/p95 complete-request wall time 5.411/5.751 s and TTFT 0.129/0.146 s on the fork branch. A fresh-session restart after an eight-token cancellation reproduced the same 128 greedy token IDs, while the retired handle was explicitly rejected. This is WSL CPU full-text scope, not mobile generation or broad quality qualification.
|
||||
|
||||
On a hosted [Galaxy S24 Spark attention-layer experiment](../../../e2e_expansion_20260923/evidence/spark_s24_full_attention/README.md), a real one-layer W8A16 QDQ artifact executed on NPU and matched prior S25 component outputs exactly on one dataset. The 100-sample layer p50/p95 was 1.109/1.205 ms; the service's 1.098 ms estimated-time field was the sample minimum. FP32-source versus S24 output hidden-state relative L2 was 1.351% without a downstream token-quality gate. This adds component C evidence only; device-local generation remains absent.
|
||||
@@ -51,7 +53,7 @@ NOT E2E means no complete device/model workload was verified. “Scoped E2E” i
|
||||
| PC HX370: CPU / WSL | scoped E2E: Omni GGUF or BF16 Spark text | scoped E2E: Omni CPU text → complete WAV | NOT E2E | scoped E2E: Omni GGUF combined image+audio → text+speech | synthetic policy pass: Omni CPU |
|
||||
| PC HX370: CPU / native Windows | scoped E2E: Omni Spark text; fresh restart after in-flight cancel | scoped E2E: Omni CPU text → complete WAV | NOT E2E | scoped E2E: Omni GGUF image+audio → text+speech (native-storage 20-run profile) | synthetic policy pass: Omni CPU |
|
||||
| PC HX370 + RTX 5090 Laptop / WSL | profile completed | profile completed | scoped E2E: text + image | scoped E2E: text/image/audio → speech | synthetic policy pass: admitted Omni CUDA |
|
||||
| PC HX370 + RTX 5090 Laptop / Windows | scoped E2E: Omni Spark 1.7B GGUF text on RTX Vulkan; fresh restart after in-flight cancel (separate 4B BF16 CUDA profile) | profile completed; 30-min repeat no collapse, brief playback jitter | NOT E2E (NVFP4 post-load PTX startup failed on current driver/wheel) | scoped E2E: text/image/audio → speech | synthetic policy pass: admitted Omni CUDA |
|
||||
| PC HX370 + RTX 5090 Laptop / Windows | scoped E2E: Omni Spark 1.7B GGUF text on RTX Vulkan; fresh restart after in-flight cancel (separate 4B BF16 CUDA profile) | scoped E2E: Omni RTX Vulkan talker/codec + CPU predictor complete WAV and restart (separate CUDA stream has playback jitter) | NOT E2E (NVFP4 post-load PTX startup failed on current driver/wheel) | scoped E2E: text/image/audio → speech | synthetic policy pass: admitted Omni CUDA |
|
||||
| PC HX370 + Radeon 890M / Windows worker | scoped E2E: Omni Spark text; fresh restart after in-flight cancel | scoped E2E: Omni Radeon talker/codec + CPU predictor; fresh restart after in-flight cancel | NOT E2E | scoped E2E: Omni Radeon+CPU image+audio → text+speech (native-storage 20-run profile) | synthetic policy pass: Omni CPU+Radeon Cosmos (WSL/native Windows) |
|
||||
| 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 |
|
||||
@@ -81,7 +83,7 @@ NOT E2E means no complete device/model workload was verified. “Scoped E2E” i
|
||||
| PC HX370 + RTX 5090 Laptop / WSL | MiniCPM-o 4.5 | SCOPED_E2E | The verified checkpoint completed three-stage text, one synthetic image and one synthetic audio input to text+speech under separate constrained plans with 5 GiB host offload. The image response correctly described a 448×448 red square on white and produced a nonzero 5.2 s WAV in 17.49 s; a 2 s/440 Hz tone was described as “A loud whistling sound” with a nonzero 2.16 s WAV in 7.78 s. The original 0.58 thinker GPU budget failed image/KV admission; 0.61 admitted the same context and image. Image shutdown force-killed stage 0, and both multimodal runs reported shared-memory cleanup warnings. General image/audio quality and speech meaning remain unverified. | Validate real image/audio suites, video input, speech intelligibility, interruption, repeated latency, clean shutdown and sustained power; [text evidence](../../../e2e_recovery_20260923/README.md), [image/audio evidence](../../../e2e_expansion_20260923/README.md). |
|
||||
| PC HX370 + RTX 5090 Laptop / WSL | InternVLA-A1 | SYNTHETIC_POLICY_PASS_OMNI_CUDA; NOT_TASK_E2E | The real Place_Markpen checkpoint ran through an admitted Omni whole-policy graph stage with BF16 policy and Cosmos encoder on the RTX 5090 Laptop GPU. One warmup plus 20/20 serial patterned synthetic observation/state/noise requests returned identical finite float32 [1,50,32] actions with terminal events; nearest-rank complete-request wall p50/p95 was 0.382/0.399 s, excluding 43.82 s startup. The 16 GiB host-RAM and 16 GiB CUDA demands were within explicit 28/21 GiB ceilings checked against available memory. Actual CUDA placement was verified, PyTorch peak reserved VRAM reached 7.86 GB, and an 8 GiB VRAM plan was refused before worker launch. An in-flight abort and shutdown released both ledgers with no stale output; a separate public AsyncOmni.generate action request passed. Relative to a separate patterned WSL CPU output, action relative L2 difference was 2.006% with no task tolerance. The earlier one-forward zero-input direct CUDA run was a different experiment. This is synthetic action-policy integration, not robot-task E2E; units/order/step time remain unverified and control_ready=false. | Validate real observations/reference actions and physical action semantics, post-cancel restart, concurrent admission, loading peak, deadlines and sustained latency/power/thermal behavior; [Omni CUDA evidence](../../../e2e_expansion_20260923/evidence/internvla_omni_cuda/README.md), [earlier direct result](../../../e2e_recovery_20260923/evidence/internvla/internvla_finetune_synthetic.json). |
|
||||
| PC HX370 + RTX 5090 Laptop / Windows | Spark-X2.5 | SCOPED_E2E_OMNI_COMPLETE_REQUEST_GGUF_VULKAN; RESTART_AFTER_INFLIGHT_CANCEL_PASS; SEPARATE_4B_BF16_CUDA_PROFILE | The pinned Spark-X2.5-1.7B Q4_K_M GGUF ran through an Omni whole-session StageRuntime/StagePool backend on RTX Vulkan0. The server log identifies NVIDIA GeForce RTX 5090 Laptop GPU, 29/29 layers offloaded and a 1051.02 MiB Vulkan0 model buffer. The short and 120-item inventory prompts answered `Paris` and `1511`; one warmup plus 20/20 serial inventory requests answered `1511` with nearest-rank complete-request wall p50/p95 0.294/0.302 s (2,463 prompt tokens, five completion tokens), excluding 4.319 s startup. A public AsyncOmni request also answered `Paris` on the RTX. An over-context request was rejected without truncation, followed by a correct recovery request. In a separate cancellation check, the owned server task started before abort; the worker and host-RAM reservation drained, and a fresh stage with the same artifact and new generation answered `Paris` without stale output. This GGUF/Vulkan profile is distinct from the earlier Spark 4B BF16 vLLM CUDA profile; the precisions, model sizes and workloads preclude a speedup comparison. There is no incremental token stream, automatic same-stage restart, broad token/quality parity, explicit GPU-VRAM peak admission, concurrency or sustained power/thermal qualification. | Validate streaming, larger quality and parity workloads, VRAM/load peaks, concurrent requests and sustained power; [Omni RTX raw evidence](../../../e2e_expansion_20260924/evidence/spark_omni_windows_rtx/README.md). |
|
||||
| PC HX370 + RTX 5090 Laptop / Windows | Qwen3-TTS 0.6B CustomVoice | PROFILE_COMPLETED; SUSTAINED_REPEAT_NO_COLLAPSE; PLAYBACK_JITTER_REMAINS | The historical complete-model CUDA stream slowed sharply around minute 26–27: all 17 requests in minutes 27–30 had simulated playback underruns and median RTF 1.331. A current-source, instrumented 30-minute repeat completed 1,232 serial medium requests within the analysis windows. Its final 119 requests had nearest-rank p50/p95 RTF 0.185/0.203, complete wall 1.493/1.708 s, and three brief simulated underruns needing at most 26.6 ms extra prebuffer. The late collapse did not recur; device-wide temperature p50/p95 was 68/71 C and SM clock 1,672/1,875 MHz in the final window, without an identifiable thermal transition. The repeat had 69 simulated underrun requests in the 30-minute windows, so underrun-free playback is not qualified. Run conditions were not controlled across repeats and the original cause is unknown. | Isolate playback jitter and original late-collapse conditions; validate speech quality, interruption/recovery and sustained thermal behavior; [both raw runs and telemetry analysis](../../../e2e_expansion_20260924/evidence/qwen_tts_sustained_drift/README.md). |
|
||||
| PC HX370 + RTX 5090 Laptop / Windows | Qwen3-TTS 0.6B CustomVoice | SCOPED_E2E_OMNI_COMPLETE_WAV_RTX_VULKAN_CPU; RESTART_AFTER_INFLIGHT_CANCEL_PASS; SEPARATE_CUDA_STREAM_PLAYBACK_JITTER | The pinned Q8_0 CustomVoice talker and F16 codec ran on RTX Vulkan0 with the code predictor pinned to CPU FP32 through an admitted Omni whole-session stage. The server logs identify the RTX and actual codec placement. Two named text-to-WAV requests returned finite 24 kHz PCM; one warmup plus 20/20 serial 2.72 s outputs had identical PCM and nearest-rank complete-request wall p50/p95 3.153/3.231 s (RTF 1.16/1.19), excluding startup. Pinned Whisper tiny.en transcribed the first RTX WAV exactly (WER 0 as an intelligibility proxy); RTX PCM differs from the Radeon route, so no same-output speedup is claimed. Public AsyncOmni audio returned the same PCM. The owned server entered prefill before cancellation; the worker and separate declared 8 GiB host-RAM/4 GiB GPU-VRAM reservations drained, then a fresh stage with a new generation returned identical PCM without late output. An undersized 3 GiB GPU-VRAM demand was refused before server launch; the Radeon route still passed a one-request regression. This is complete-WAV Vulkan+CPU execution, not incremental playable audio, an NPU route or a measured GPU-memory peak. Separately, the historical complete-model vLLM CUDA stream slowed sharply around minute 26–27: all 17 requests in minutes 27–30 had simulated playback underruns and median RTF 1.331. A current-source instrumented 30-minute CUDA repeat completed 1,232 serial medium requests; its final 119 had p50/p95 RTF 0.185/0.203 and three brief simulated underruns needing at most 26.6 ms extra prebuffer. The late collapse did not recur, but 69 requests across the full windows had simulated underruns; the original cause and underrun-free sustained playback remain open. These CUDA and Vulkan routes use different artifacts, workloads and output behavior. | Validate playable chunk streaming, broader voice/speaker quality, measured VRAM/load peaks, concurrency and an underrun-free sustained run; [RTX Omni raw evidence](../../../e2e_expansion_20260924/evidence/qwen_tts_windows_rtx/README.md), [CUDA sustained runs](../../../e2e_expansion_20260924/evidence/qwen_tts_sustained_drift/README.md). |
|
||||
| PC HX370 + RTX 5090 Laptop / Windows | Qwen3.8-27B | NVFP4_POST_LOAD_PTX_STARTUP_FAILED; NOT_E2E_PROFILEABLE | The pinned NVFP4 checkpoint passed scoped text/image cases in WSL, but two native Windows attempts did not reach inference. In the captured retry, all three safetensors shards loaded; vLLM 0.29.0+cu134 then failed in NVFP4 Marlin scale permutation during post-load processing with `CUDA error: the provided PTX was compiled with an unsupported toolchain`. The installed RTX driver 610.71 reports CUDA UMD 13.3, while the local CUDA toolkit/wheel use 13.4. NVIDIA documents PTX JIT limitations across that driver gap; this is a likely runtime compatibility cause, not an A/B-proven driver fix or a model-wide unsupported conclusion. No native Windows text/image output, admission or latency is qualified. | Validate an R615-or-later compatible driver or a wheel/toolchain supported by R610, then rerun the same 512-token text/image workload and broaden quality, memory and profiling; [Windows failure evidence](../../../e2e_expansion_20260924/evidence/qwen38_omni_windows_rtx/README.md), [WSL pass](../../../e2e_recovery_20260923/README.md). |
|
||||
| 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_OMNI_CUDA; NOT_TASK_E2E | The real Place_Markpen checkpoint ran through an admitted native Windows Omni whole-policy graph stage with BF16 policy and Cosmos encoder on the RTX 5090 Laptop GPU. After one warmup, 20/20 serial patterned synthetic requests returned identical finite float32 [1,50,32] actions with terminal events; nearest-rank complete-request wall p50/p95 was 0.746/0.806 s, excluding 147.77 s startup. The 16 GiB host-RAM and 16 GiB CUDA demands were within explicit 18/21 GiB ceilings checked against available memory. Actual CUDA placement was verified, PyTorch peak reserved VRAM reached 7.86 GB, and an 8 GiB VRAM plan was refused before worker launch. In-flight cancellation and shutdown released both ledgers with no stale output; a separate public AsyncOmni.generate request returned the same action hash. Relative to the separate native CPU patterned output, action relative L2 difference was 2.340% with no task tolerance; native-vs-WSL CUDA relative L2 was 1.555%. The earlier one-forward zero-input direct CUDA run was a different experiment. This is synthetic action-policy integration, not robot-task E2E; units/order/step time remain unverified and control_ready=false. | Validate real observations/reference actions and physical action semantics, post-cancel restart, concurrent admission, loading peak, deadlines and sustained latency/power/thermal behavior; [Omni Windows CUDA evidence](../../../e2e_expansion_20260923/evidence/internvla_omni_windows_cuda/README.md), [earlier direct result](../../../e2e_expansion_20260923/README.md). |
|
||||
|
||||
@@ -331,6 +331,8 @@ The [native Windows RTX Spark GGUF follow-up](../../benchmarks/edge_harness/resu
|
||||
|
||||
A [native Windows Qwen3.8-27B NVFP4 attempt](../../benchmarks/edge_harness/results/e2e_expansion_20260924/evidence/qwen38_omni_windows_rtx/README.md) did not reach inference despite loading all three weight shards. The installed Windows vLLM 0.29+cu134 wheel failed during Marlin post-load scale permutation with an unsupported PTX toolchain error under RTX driver 610.71/CUDA UMD 13.3. NVIDIA's PTX compatibility guidance makes a driver/toolchain mismatch likely; an upgraded-driver or compatible-wheel control is still needed before rerunning the 512-token text/image cases. This failure constrains the tested Windows route, not the previously passed WSL checkpoint path.
|
||||
|
||||
The [native Windows RTX Qwen3-TTS Omni hybrid follow-up](../../benchmarks/edge_harness/results/e2e_expansion_20260924/evidence/qwen_tts_windows_rtx/README.md) extends the existing whole-session CrispASR stage to the optional discrete-GPU route. The RTX Vulkan0 talker/codec and CPU FP32 predictor produced two named complete WAVs, 20 identical serial measured outputs at 3.153/3.231 s p50/p95 for 2.72 s audio, and public AsyncOmni audio. Pinned Whisper tiny.en transcribed the first sentence exactly; the RTX PCM differs from the Radeon PCM, so the timings are not a same-output acceleration comparison. Separate 8 GiB host-RAM and 4 GiB GPU-VRAM reservations, a prelaunch GPU-budget refusal, in-flight cancellation and fresh-stage restart passed; the original Radeon route passed a regression probe. M2 still needs playable chunks, RTF below 1 for the declared workload, broader speaker quality, measured VRAM/load peaks, concurrency and an underrun-free sustained run. This Vulkan+CPU route does not qualify mobile NPU+GPU co-residency.
|
||||
|
||||
The [Qwen3-TTS Omni hybrid follow-up](../../benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/qwen_tts_omni_hybrid/README.md) adds one complete-request stage for the native Windows HX370 CPU+Radeon 890M route. A pinned Q8_0 talker and F16 codec produced two named PCM outputs exactly matching the prior standalone backend; one warmup plus 20 serial requests measured 3.298/3.336 s p50/p95 for 2.56 s of audio. Public `AsyncOmni` audio, cancellation drain and explicit 8 GiB host admission passed. A separate [in-flight cancellation audit](../../benchmarks/edge_harness/results/e2e_expansion_20260924/evidence/qwen_tts_omni_windows_restart/README.md) confirmed that the request reached server prefill before cancellation; a fresh stage with the same artifacts and hybrid placement emitted the identical PCM under a new worker generation, without stale output or a retained reservation. This is progress toward M2 integration, not M2 acceptance: RTF remains above 1, and playable chunk streaming, same-session continuation, loading/iGPU peaks, broader voice quality and 30-minute thermal behavior remain open. No NPU participated.
|
||||
|
||||
The [WSL CPU Qwen3-TTS Omni follow-up](../../benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/qwen_tts_omni_wsl_cpu/README.md)
|
||||
|
||||
@@ -134,15 +134,27 @@ class CrispTTSStageClient(StageClientBase):
|
||||
self._expected_gpu_name = str(config["expected_gpu_name"])
|
||||
if not self._expected_gpu_name:
|
||||
raise ValueError("hybrid TTS stage requires expected_gpu_name")
|
||||
if self._expected_gpu_name != "AMD Radeon(TM) 890M Graphics" or str(
|
||||
config.get("ggml_vk_visible_devices", "1")
|
||||
) != "1":
|
||||
raise ValueError("this shared-RAM hybrid route is qualified only for the HX370 Radeon 890M")
|
||||
visible_device = str(config.get("ggml_vk_visible_devices", "1"))
|
||||
if self._expected_gpu_name == "AMD Radeon(TM) 890M Graphics" and visible_device == "1":
|
||||
gpu_label = "Radeon"
|
||||
gpu_memory_overhead = None # iGPU shares the admitted host RAM.
|
||||
elif self._expected_gpu_name == "NVIDIA GeForce RTX 5090 Laptop GPU" and visible_device == "0":
|
||||
gpu_label = "RTX 5090 Laptop"
|
||||
gpu_pool = str(config.get("gpu_memory_pool", "gpu_vram"))
|
||||
gpu_demand = reservation.demands.get(gpu_pool)
|
||||
gpu_memory_overhead = int(config.get("gpu_memory_overhead_bytes", 0))
|
||||
if (gpu_pool == self._memory_pool or gpu_demand is None
|
||||
or gpu_memory_overhead < (2 << 30)):
|
||||
raise ResourceUnavailable("discrete TTS route requires a distinct GPU-VRAM reservation and 2 GiB overhead")
|
||||
if size + gpu_memory_overhead > gpu_demand:
|
||||
raise ResourceUnavailable("TTS weights plus GPU state/workspace/headroom exceed GPU-VRAM reservation")
|
||||
else:
|
||||
raise ValueError("CrispASR GPU name and visible Vulkan device do not match a qualified route")
|
||||
self._log_path = Path(config["log_file"]).resolve()
|
||||
self._log_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
self._log_stream = self._log_path.open("wb")
|
||||
env = os.environ.copy()
|
||||
env["GGML_VK_VISIBLE_DEVICES"] = str(config.get("ggml_vk_visible_devices", "1"))
|
||||
env["GGML_VK_VISIBLE_DEVICES"] = visible_device
|
||||
env["CRISPASR_QWEN3_TTS_VULKAN_NATIVE"] = "1"
|
||||
env["CRISPASR_QWEN3_TTS_CP_BACKEND"] = "cpu-f32"
|
||||
command = [
|
||||
@@ -150,7 +162,7 @@ class CrispTTSStageClient(StageClientBase):
|
||||
"--backend", "qwen3-tts-customvoice", "-m", str(self._talker),
|
||||
"--codec-model", str(self._codec), "--voice", self._voice,
|
||||
"--punc-model", str(self._punc),
|
||||
"--gpu-backend", "vulkan", "-dev", "1", "--no-flash-attn",
|
||||
"--gpu-backend", "vulkan", "-dev", visible_device, "--no-flash-attn",
|
||||
"-n", "96", "--seed", str(self._seed), "--verbose",
|
||||
]
|
||||
flags = subprocess.CREATE_NO_WINDOW if os.name == "nt" else 0
|
||||
@@ -183,7 +195,7 @@ class CrispTTSStageClient(StageClientBase):
|
||||
and "falling back to CPU" not in log_text
|
||||
)
|
||||
if not placement:
|
||||
raise RuntimeError("REFUSE_DEVICE_PLACEMENT: CrispASR hybrid route differs from declared CPU+Radeon")
|
||||
raise RuntimeError("REFUSE_DEVICE_PLACEMENT: CrispASR hybrid route differs from declared CPU+GPU")
|
||||
import psutil
|
||||
|
||||
self._loaded_rss_bytes = int(psutil.Process(self._proc.pid).memory_info().rss)
|
||||
@@ -196,9 +208,11 @@ class CrispTTSStageClient(StageClientBase):
|
||||
"worker_generation": self._generation,
|
||||
"worker_pid": self._proc.pid,
|
||||
"artifact_sha256": {label: digest for label, (_, digest) in expected.items()},
|
||||
"placement": "Radeon Vulkan0 talker/codec + CPU FP32 code predictor",
|
||||
"placement": f"{gpu_label} Vulkan0 talker/codec + CPU FP32 code predictor",
|
||||
"expected_gpu_name": self._expected_gpu_name,
|
||||
"ggml_vk_visible_devices": env["GGML_VK_VISIBLE_DEVICES"],
|
||||
"gpu_memory_pool": gpu_pool if gpu_memory_overhead is not None else None,
|
||||
"gpu_memory_overhead_bytes": gpu_memory_overhead,
|
||||
"loaded_rss_bytes": self._loaded_rss_bytes,
|
||||
"reserved_bytes": dict(reservation.demands),
|
||||
"memory_overhead_bytes": overhead,
|
||||
|
||||
Reference in new issue
Block a user