Update device-model matrix with Qualcomm TTS component audits

This commit is contained in:
tzhouam committed 2026-09-24 12:37:09 +08:00
1 parent 310de75408
commit 8978302a1b
23 files changed
+24741 -21

No files matched your search

@@ -46,7 +46,7 @@ def collect(evidence_dir: Path, kind: str, client: hub.Client) -> str:
"status_message": status.message or "",
"options": job.options,
"hub_version": str(job.hub_version),
"device": device_record(job.device),
"device": device_record(job.device) if kind != "quantize" else None,
}
if kind == "compile":
report["source_model_id"] = job.model.model_id
@@ -54,6 +54,10 @@ def collect(evidence_dir: Path, kind: str, client: hub.Client) -> str:
calibration = job.calibration_dataset
if calibration is not None:
report["calibration_dataset_id"] = calibration.dataset_id
elif kind == "quantize":
report["source_model_id"] = job.model.model_id
report["target_model_id"] = job.get_target_model().model_id if status.code == "SUCCESS" else None
report["calibration_dataset_id"] = job.calibration_dataset.dataset_id
elif kind == "inference":
report["model_id"] = job.model.model_id
report["input_dataset_id"] = job.inputs.dataset_id
@@ -77,7 +81,7 @@ def collect(evidence_dir: Path, kind: str, client: hub.Client) -> str:
def main() -> None:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("evidence_dirs", nargs="+", type=Path)
parser.add_argument("--kinds", nargs="+", choices=("compile", "inference", "profile"), default=("inference", "profile"))
parser.add_argument("--kinds", nargs="+", choices=("compile", "quantize", "inference", "profile"), default=("inference", "profile"))
args = parser.parse_args()
client = hub.Client()
for directory in args.evidence_dirs:
@@ -0,0 +1,124 @@
#!/usr/bin/env python3
"""Numerically gate one Workbench QDQ vocoder export on local ONNX Runtime CPU.
The Workbench quantize job and any compile-time quantization are separate
artifacts. This probe measures only the explicitly downloaded QDQ ONNX model.
"""
from __future__ import annotations
import argparse
import json
import time
from pathlib import Path
import numpy as np
import onnxruntime as ort
from audit_qwen_tts_vocoder_qualcomm import (
CPU_OUTPUT_SHA256,
FIXTURE_SHA256,
SOURCE_SHA256,
compare,
read_output,
sha256,
)
def main() -> None:
parser = argparse.ArgumentParser(description=__doc__)
for name in (
"model", "archive", "source-onnx", "fixture", "cpu-reference",
"quantize-report", "output", "report",
):
parser.add_argument(f"--{name}", type=Path, required=True)
parser.add_argument("--other-output", type=Path)
parser.add_argument("--threads", type=int, default=4)
args = parser.parse_args()
if args.threads < 1:
raise ValueError("threads must be positive")
quantized = json.loads(args.quantize_report.read_text(encoding="utf-8"))
if (quantized.get("status") != "SUCCESS"
or quantized.get("source_model_id") != "mqyer339n"
or quantized.get("calibration_dataset_id") != "d7m80jl32"
or not quantized.get("target_model_id")):
raise ValueError("quantize job differs from pinned vocoder source and fixture")
if [sha256(path) for path in (args.source_onnx, args.fixture, args.cpu_reference)] != [
SOURCE_SHA256, FIXTURE_SHA256, CPU_OUTPUT_SHA256,
]:
raise ValueError("source, fixture or CPU reference differs from pinned data")
with np.load(args.fixture, allow_pickle=False) as fixture:
if fixture.files != ["quantized"]:
raise ValueError("unexpected vocoder input name")
x = np.asarray(fixture["quantized"])
if x.shape != (1, 512, 97) or x.dtype != np.float32 or not np.isfinite(x).all():
raise ValueError("invalid vocoder fixture shape, dtype or values")
optimizer_error = None
options = ort.SessionOptions()
options.intra_op_num_threads = args.threads
try:
options.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_ALL
default_session = ort.InferenceSession(
str(args.model), sess_options=options, providers=["CPUExecutionProvider"]
)
del default_session
except Exception as exc:
optimizer_error = str(exc)
options.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_BASIC
started = time.perf_counter()
session = ort.InferenceSession(
str(args.model), sess_options=options, providers=["CPUExecutionProvider"]
)
load_s = time.perf_counter() - started
if session.get_providers() != ["CPUExecutionProvider"]:
raise RuntimeError("model did not stay on ONNX Runtime CPU")
started = time.perf_counter()
y = np.asarray(session.run(["wav"], {"quantized": x})[0])
inference_s = time.perf_counter() - started
if y.shape != (1, 48000) or y.dtype != np.float32 or not np.isfinite(y).all():
raise ValueError("invalid QDQ vocoder output")
args.output.parent.mkdir(parents=True, exist_ok=True)
np.savez_compressed(args.output, wav=y)
report = {
"scope": "one Workbench QDQ vocoder export on local ONNX Runtime CPU; no device-local or complete TTS stream",
"status": "qdq_cpu_numeric_measured",
"quantize_job_id": quantized["job_id"],
"target_model_id": quantized["target_model_id"],
"calibration_dataset_id": quantized["calibration_dataset_id"],
"source_sha256": SOURCE_SHA256,
"fixture_sha256": FIXTURE_SHA256,
"cpu_reference_sha256": CPU_OUTPUT_SHA256,
"target_archive_sha256": sha256(args.archive),
"target_onnx_sha256": sha256(args.model),
"target_external_data_sha256": sha256(args.model.parent / "model.data"),
"cpu_qdq_output_sha256": sha256(args.output),
"ort_version": ort.__version__,
"provider": session.get_providers(),
"intra_op_threads": args.threads,
"graph_optimization_level": "ORT_ENABLE_BASIC",
"default_ORT_ENABLE_ALL_error": optimizer_error,
"load_s_not_request_timing": load_s,
"one_inference_s_not_profile": inference_s,
"source_onnx_cpu_vs_qdq_cpu": compare(
read_output(args.cpu_reference, "wav"), y
),
"limits": [
"One synthetic calibration fixture cannot establish audio quality or generalization.",
"The explicit QDQ quantize job and compile-time INT8 conversion are distinct artifacts.",
"This local CPU run is not an embedded-device profile or complete TTS stream.",
],
}
if args.other_output is not None:
report["qdq_cpu_vs_distinct_hosted_output"] = compare(
y, read_output(args.other_output, "output_0__0")
)
args.report.write_text(json.dumps(report, indent=2) + "\n", encoding="utf-8")
print(json.dumps(report["source_onnx_cpu_vs_qdq_cpu"], indent=2))
if __name__ == "__main__":
main()
@@ -1,6 +1,6 @@
# 2026-09-24 Qualcomm component expansion
The [Qwen3-TTS vocoder study](evidence/qwen_tts_vocoder_qualcomm/README.md) reuses a retained fixed-shape Code2Wav export and historical Workbench input to test numerical behavior on SA8775P and other Qualcomm settings. The fresh SA8775P GPU-requested inference produces a saturated waveform, while the same binary's CPU-requested output on the exact SA device matches ONNX CPU within 4.13e-6 relative L2. Its 100-sample CPU-requested component profile had p50/p95 5.384/5.534 s with all 738 execution-detail rows on CPU. A FP32-preserving GPU-option control still saturated 84.89% of samples, so that option did not repair the tested path. RB3 GPU-requested execution produces an unsaturated but 15.73%-divergent waveform; its fresh 100-sample mixed CPU/GPU component p50/p95 was 3.099/3.133 s, not a usable TTS timing claim. On the exact RB3 device, the same binary requested on CPU matched original ONNX CPU within 4.13e-6 relative L2 on the retained fixture; its 47-sample component profile measured p50/p95 12.727/13.424 s with all 738 execution-detail rows on CPU. This is a major streaming-latency blocker. A single-fixture-calibrated RB3 INT8 QNN vocoder returned a finite but 66.93%-relative-L2 divergent waveform (3.49 dB SNR) versus ONNX CPU; NPU node placement is pending, and its audio is numerically unqualified. X Elite ONNX CPU output matches the local ONNX Runtime reference on the retained fixture; its 94-sample component p50/p95 was 6.384/6.644 s with all execution-detail rows on CPU. Corrected X Elite DirectML inference and profile both failed during provider initialization; separate FP16 QNN DLC inference returned an unsaturated waveform at 1.138% relative L2 / 38.88 dB SNR against original ONNX CPU; its placement profile timed out during QNN graph preparation without samples. A separate SA8775P FP16 QNN vocoder compile passed, but same-fixture NPU-requested inference failed after compilation without a waveform or placement samples. Fresh S24 and S25 CPU-requested TFLite vocoder inferences matched ONNX CPU within 4.04e-6 relative L2 on the retained fixture. S25 measured 100 component samples at p50/p95 4.418/4.641 s with all 738 execution-detail rows on CPU; S24 placement profiling is pending. No complete on-device TTS stream or model-quality qualification is claimed.
The [Qwen3-TTS vocoder study](evidence/qwen_tts_vocoder_qualcomm/README.md) reuses a retained fixed-shape Code2Wav export and historical Workbench input to test numerical behavior on SA8775P and other Qualcomm settings. The fresh SA8775P GPU-requested inference produces a saturated waveform, while the same binary's CPU-requested output on the exact SA device matches ONNX CPU within 4.13e-6 relative L2. Its 100-sample CPU-requested component profile had p50/p95 5.384/5.534 s with all 738 execution-detail rows on CPU. A FP32-preserving GPU-option control still saturated 84.89% of samples, so that option did not repair the tested path. RB3 GPU-requested execution produces an unsaturated but 15.73%-divergent waveform; its fresh 100-sample mixed CPU/GPU component p50/p95 was 3.099/3.133 s, not a usable TTS timing claim. On the exact RB3 device, the same binary requested on CPU matched original ONNX CPU within 4.13e-6 relative L2 on the retained fixture; its 47-sample component profile measured p50/p95 12.727/13.424 s with all 738 execution-detail rows on CPU. This is a major streaming-latency blocker. A single-fixture-calibrated RB3 INT8 QNN vocoder returned a finite but 66.93%-relative-L2 divergent waveform (3.49 dB SNR) versus ONNX CPU; its 100-sample component profile was p50/p95 1.971/1.992 s with all 728 execution-detail rows on NPU; these timings describe numerically unqualified audio. X Elite ONNX CPU output matches the local ONNX Runtime reference on the retained fixture; its 94-sample component p50/p95 was 6.384/6.644 s with all execution-detail rows on CPU. Corrected X Elite DirectML inference and profile both failed during provider initialization; separate FP16 QNN DLC inference returned an unsaturated waveform at 1.138% relative L2 / 38.88 dB SNR against original ONNX CPU; its placement profile timed out during QNN graph preparation without samples. A separate SA8775P FP16 QNN vocoder compile passed, but same-fixture NPU-requested inference failed after compilation without a waveform or placement samples. Fresh S24 and S25 CPU-requested TFLite vocoder inferences matched ONNX CPU within 4.04e-6 relative L2 on the retained fixture. S25 measured 100 component samples at p50/p95 4.418/4.641 s with all 738 execution-detail rows on CPU; S24 measured 100 at 4.826/4.958 s with all 738 rows on CPU. Separate explicit INT8 and W8A16 QDQ ONNX exports checked on local ORT CPU failed the same-fixture numerical gate at 246.97% and 331.83% waveform relative L2, respectively. S25 CPU talker inference preserved token 80 and its 100-sample component profile measured p50/p95 30.161/31.301 ms with all 1,800 rows on CPU. No complete on-device TTS stream or model-quality qualification is claimed.
A local HX370 x86-64 LiteRT CPU control of the identical SA/RB3 TFLite binary matched the original ONNX CPU waveform within 3.45e-6 relative L2. The SA saturation is therefore not universal to the converted artifact; the exact SA CPU control passed numerical and placement checks, while the faulty GPU delegate operation remains unidentified.
@@ -10,7 +10,7 @@ Explicit [X Elite ONNX CPU](xelite/cpu_fallback/compile_report.json) and [SA8775
An exact RB3 Gen 2 [TFLite CPU fallback compile](rb3/cpu_fallback/compile_report.json) succeeded from the same ONNX talker step, producing target mnz07g9xm. [Same-fixture CPU-requested inference](rb3/cpu_fallback/inference_report.json) returned 57 finite output tensors. Its [full audit](rb3/cpu_fallback/audit_report.json) preserved ONNX CPU top-1 speech token 80, with logits relative L2 **2.29e-5** and maximum new-cache relative L2 **3.04e-5**. The [placement profile](rb3/cpu_fallback/profile_report.json) returned **100** decode-step samples at nearest-rank p50/p95 **138.022/139.642 ms**, with all **1,800 execution-detail rows on CPU**. Reported inference peak memory was **1,849,708,544 bytes**; the 137.543 ms estimated-time field is the sample minimum. The earlier RB3 FP16 QNN rejection remains the result for that specific NPU artifact. No predictor, vocoder handoff, stateful loop or complete TTS stream was tested.
Matching TFLite CPU fallback [S24](s24/cpu_fallback/compile_report.json) and [S25](s25/cpu_fallback/compile_report.json) talker compiles have succeeded from the same source. [S24 same-fixture CPU-requested inference](s24/cpu_fallback/inference_report.json) returned 57 finite output tensors and preserved ONNX CPU top-1 speech token 80, with logits relative L2 **3.33e-5** and maximum new-cache relative L2 **3.41e-5**. Its [placement profile](s24/cpu_fallback/profile_report.json) returned **100** decode-step samples at nearest-rank p50/p95 **36.976/43.264 ms**, with all **1,800 execution-detail rows on CPU** and reported inference peak memory **1,922,400,256 bytes**. The [full audit](s24/cpu_fallback/audit_report.json) binds numerical output and placement. [S25 CPU inference](s25/cpu_fallback/inference_submission.json) and [profile](s25/cpu_fallback/profile_submission.json) are pending. Neither mobile route has passed a complete talker loop or TTS stream.
Matching TFLite CPU fallback [S24](s24/cpu_fallback/compile_report.json) and [S25](s25/cpu_fallback/compile_report.json) talker compiles have succeeded from the same source. [S24 same-fixture CPU-requested inference](s24/cpu_fallback/inference_report.json) returned 57 finite output tensors and preserved ONNX CPU top-1 speech token 80, with logits relative L2 **3.33e-5** and maximum new-cache relative L2 **3.41e-5**. Its [placement profile](s24/cpu_fallback/profile_report.json) returned **100** decode-step samples at nearest-rank p50/p95 **36.976/43.264 ms**, with all **1,800 execution-detail rows on CPU** and reported inference peak memory **1,922,400,256 bytes**. The [full audit](s24/cpu_fallback/audit_report.json) binds numerical output and placement. [S25 same-fixture CPU-requested inference](s25/cpu_fallback/inference_report.json) also returned 57 finite outputs, preserved token 80, and had logits relative L2 **3.33e-5** and maximum new-cache relative L2 **3.41e-5**. Its [profile](s25/cpu_fallback/profile_report.json) returned **100** decode-step samples at nearest-rank p50/p95 **30.161/31.301 ms**, with all **1,800 execution-detail rows on CPU** and reported inference peak memory **1,929,318,400 bytes**. The [full audit](s25/cpu_fallback/audit_report.json) binds numerical output and placement. Neither mobile route has passed a complete talker loop or TTS stream.
The [collector](../../../../experiments/collect_aihub_component.py) retrieves terminal inference outputs without resubmission. The [tensor auditor](../../../../experiments/audit_qwen_tts_talker_qualcomm.py) enforces the source, fixture, compile target, exact device, output shape and finiteness contracts, and reports logits top-1 plus relative error for all 56 new K/V tensors. It does not convert those metrics to a quality pass without an explicit token/audio tolerance. Its 57-output contract was exercised against the pinned CPU reference as a local self-check; that self-check is not device evidence. Requested NPU placement still needs a profile.
@@ -0,0 +1,414 @@
{
"scope": "one synthetic fixed-cache 28-layer Qwen3-TTS talker decode step; no complete TTS stream",
"status": "component_inference_numeric_and_placement_measured",
"device": {
"name": "Samsung Galaxy S25",
"os": "15",
"attributes": [
"os:android",
"framework:tflite",
"framework:onnx",
"abi:aarch64-android",
"vendor:samsung",
"format:phone",
"chipset:qualcomm-snapdragon-8-elite-for-galaxy",
"chipset:sm8750-ac",
"hexagon:v79",
"soc-model:69",
"htp-supports-fp16:true",
"htp-supports-weight-sharing:true",
"framework:qnn"
]
},
"compile_job_id": "jp2rw8xrg",
"inference_job_id": "j5qly8enp",
"source_model_id": "mq3xre4rq",
"target_model_id": "mqy57yyrn",
"input_dataset_id": "d7dw6pgy2",
"requested_run_options": "--compute_unit cpu",
"files": {
"source_onnx": {
"bytes": 1776377476,
"sha256": "41feb08517678e94d9301e992d0df610fc60e7c9faba5600703298c86554fd22"
},
"fixture": {
"bytes": 54591500,
"sha256": "0bf538e1b64dfc9737dc4f925d61c6e4ffa5075a5dcd7afb1e85ac3bd2d9afea"
},
"cpu_reference": {
"bytes": 237615,
"sha256": "ee0ead70e33c02c7d3d6bcb757c5cf0fcbb9eb6fc75c34abfbe8a4479657d5be"
},
"device_output": {
"bytes": 238220,
"sha256": "d626313b519bb4fc4c831006fffaee38fd4aa70d722dd1538d8a6c01b70d7867"
}
},
"tensor_comparison": {
"logits": {
"relative_l2": 3.331033983520798e-05,
"max_abs_error": 0.0005044937133789062,
"reference_rms": 3.7322664515389006,
"output_rms": 3.7322871955970216,
"cpu_top1": 80,
"device_top1": 80,
"top1_matches": true
},
"k_new_0": {
"relative_l2": 6.41859715811326e-07,
"max_abs_error": 5.4836273193359375e-06,
"reference_rms": 1.1349352034374294,
"output_rms": 1.1349351709221114
},
"v_new_0": {
"relative_l2": 5.546668908680807e-07,
"max_abs_error": 4.172325134277344e-07,
"reference_rms": 0.1383137764927112,
"output_rms": 0.13831377250963336
},
"k_new_1": {
"relative_l2": 7.812657805080547e-07,
"max_abs_error": 6.67572021484375e-06,
"reference_rms": 1.4773734279001252,
"output_rms": 1.4773734396048948
},
"v_new_1": {
"relative_l2": 7.78749242327241e-07,
"max_abs_error": 5.364418029785156e-07,
"reference_rms": 0.162893856079411,
"output_rms": 0.16289386013484586
},
"k_new_2": {
"relative_l2": 1.186014449990387e-06,
"max_abs_error": 8.106231689453125e-06,
"reference_rms": 1.4749251890370425,
"output_rms": 1.47492518399937
},
"v_new_2": {
"relative_l2": 1.316425277428931e-06,
"max_abs_error": 1.4901161193847656e-06,
"reference_rms": 0.2996575863196337,
"output_rms": 0.29965761945737535
},
"k_new_3": {
"relative_l2": 1.6878881835662733e-06,
"max_abs_error": 1.0013580322265625e-05,
"reference_rms": 1.4529848472712377,
"output_rms": 1.4529848958161073
},
"v_new_3": {
"relative_l2": 1.725930691703213e-06,
"max_abs_error": 1.996755599975586e-06,
"reference_rms": 0.2917197159228712,
"output_rms": 0.2917197750423004
},
"k_new_4": {
"relative_l2": 1.8865986561149933e-06,
"max_abs_error": 1.3113021850585938e-05,
"reference_rms": 1.5413980317857385,
"output_rms": 1.5413980576547086
},
"v_new_4": {
"relative_l2": 2.3368984447896167e-06,
"max_abs_error": 4.649162292480469e-06,
"reference_rms": 0.41222657123793377,
"output_rms": 0.4122263786035369
},
"k_new_5": {
"relative_l2": 2.0853483454807167e-06,
"max_abs_error": 1.7642974853515625e-05,
"reference_rms": 1.6285454176549035,
"output_rms": 1.6285453502824736
},
"v_new_5": {
"relative_l2": 2.562214049334086e-06,
"max_abs_error": 3.2633543014526367e-06,
"reference_rms": 0.32638470026742417,
"output_rms": 0.3263846774219926
},
"k_new_6": {
"relative_l2": 2.4273033082861673e-06,
"max_abs_error": 1.7821788787841797e-05,
"reference_rms": 1.8000231156167423,
"output_rms": 1.800023142312508
},
"v_new_6": {
"relative_l2": 2.980671073998213e-06,
"max_abs_error": 2.562999725341797e-06,
"reference_rms": 0.2629708328253682,
"output_rms": 0.2629707830503696
},
"k_new_7": {
"relative_l2": 2.7560247397012616e-06,
"max_abs_error": 1.8775463104248047e-05,
"reference_rms": 1.6255722851184644,
"output_rms": 1.6255724328204177
},
"v_new_7": {
"relative_l2": 3.009527885433782e-06,
"max_abs_error": 3.7103891372680664e-06,
"reference_rms": 0.348368074126628,
"output_rms": 0.34836798650991385
},
"k_new_8": {
"relative_l2": 2.8886881992446257e-06,
"max_abs_error": 1.5497207641601562e-05,
"reference_rms": 1.516512353065435,
"output_rms": 1.5165123283605657
},
"v_new_8": {
"relative_l2": 3.5475424303688497e-06,
"max_abs_error": 3.5017728805541992e-06,
"reference_rms": 0.28027916002007797,
"output_rms": 0.28027912602147936
},
"k_new_9": {
"relative_l2": 3.5159477630415095e-06,
"max_abs_error": 3.0994415283203125e-05,
"reference_rms": 1.5960043895576705,
"output_rms": 1.5960044173808783
},
"v_new_9": {
"relative_l2": 4.651931229445717e-06,
"max_abs_error": 6.854534149169922e-06,
"reference_rms": 0.37541008682864946,
"output_rms": 0.37540993143659396
},
"k_new_10": {
"relative_l2": 4.900820154855892e-06,
"max_abs_error": 3.3736228942871094e-05,
"reference_rms": 1.6561161468173449,
"output_rms": 1.6561161320387674
},
"v_new_10": {
"relative_l2": 6.008033137848697e-06,
"max_abs_error": 7.659196853637695e-06,
"reference_rms": 0.26429778504066537,
"output_rms": 0.2642976398997342
},
"k_new_11": {
"relative_l2": 5.538137929150415e-06,
"max_abs_error": 4.100799560546875e-05,
"reference_rms": 1.5170462775366995,
"output_rms": 1.5170463147367288
},
"v_new_11": {
"relative_l2": 7.280477368164582e-06,
"max_abs_error": 5.751848220825195e-06,
"reference_rms": 0.22548908846990579,
"output_rms": 0.22548940933120534
},
"k_new_12": {
"relative_l2": 5.610020854635279e-06,
"max_abs_error": 4.4018030166625977e-05,
"reference_rms": 1.5731131793440647,
"output_rms": 1.5731131524644366
},
"v_new_12": {
"relative_l2": 7.293097494635962e-06,
"max_abs_error": 5.304813385009766e-06,
"reference_rms": 0.20839677682266325,
"output_rms": 0.20839708359611164
},
"k_new_13": {
"relative_l2": 6.5287105558340404e-06,
"max_abs_error": 3.6716461181640625e-05,
"reference_rms": 1.4939452330557514,
"output_rms": 1.493945267434375
},
"v_new_13": {
"relative_l2": 8.551514193977214e-06,
"max_abs_error": 8.13603401184082e-06,
"reference_rms": 0.24929462665621008,
"output_rms": 0.2492946827129621
},
"k_new_14": {
"relative_l2": 6.317748645220851e-06,
"max_abs_error": 5.221366882324219e-05,
"reference_rms": 1.4942429579997731,
"output_rms": 1.4942429074787813
},
"v_new_14": {
"relative_l2": 9.698764096173352e-06,
"max_abs_error": 1.0907649993896484e-05,
"reference_rms": 0.32824019866053383,
"output_rms": 0.32824087669987645
},
"k_new_15": {
"relative_l2": 7.545003744283523e-06,
"max_abs_error": 4.684925079345703e-05,
"reference_rms": 1.6561072116211841,
"output_rms": 1.656107586393447
},
"v_new_15": {
"relative_l2": 1.040090620524768e-05,
"max_abs_error": 7.987022399902344e-06,
"reference_rms": 0.24976283574047556,
"output_rms": 0.2497631348328584
},
"k_new_16": {
"relative_l2": 1.031865175719673e-05,
"max_abs_error": 6.902217864990234e-05,
"reference_rms": 1.617983543941328,
"output_rms": 1.6179835067073707
},
"v_new_16": {
"relative_l2": 1.2340793550880162e-05,
"max_abs_error": 1.4930963516235352e-05,
"reference_rms": 0.3826095020438836,
"output_rms": 0.382609431434366
},
"k_new_17": {
"relative_l2": 1.364752866368525e-05,
"max_abs_error": 0.00011086463928222656,
"reference_rms": 1.6828817809060599,
"output_rms": 1.6828815141215723
},
"v_new_17": {
"relative_l2": 1.5309009447573964e-05,
"max_abs_error": 2.4215085431933403e-05,
"reference_rms": 0.4656876133547257,
"output_rms": 0.465687659857562
},
"k_new_18": {
"relative_l2": 1.7327177701967923e-05,
"max_abs_error": 0.00010457634925842285,
"reference_rms": 1.5546463592216835,
"output_rms": 1.5546464752655822
},
"v_new_18": {
"relative_l2": 2.128800872936032e-05,
"max_abs_error": 4.41577285528183e-05,
"reference_rms": 0.5200020604619255,
"output_rms": 0.5200025142449275
},
"k_new_19": {
"relative_l2": 1.8042827459263795e-05,
"max_abs_error": 0.00013488531112670898,
"reference_rms": 1.5217070844504548,
"output_rms": 1.5217069635057079
},
"v_new_19": {
"relative_l2": 2.1659253215830757e-05,
"max_abs_error": 4.214048385620117e-05,
"reference_rms": 0.5402920798790236,
"output_rms": 0.5402928656440517
},
"k_new_20": {
"relative_l2": 2.0890461924866316e-05,
"max_abs_error": 0.0001780986785888672,
"reference_rms": 1.6813854859968058,
"output_rms": 1.681385616023159
},
"v_new_20": {
"relative_l2": 2.534319458677437e-05,
"max_abs_error": 6.563961505889893e-05,
"reference_rms": 0.6088730895277438,
"output_rms": 0.6088739110709308
},
"k_new_21": {
"relative_l2": 2.260457150040016e-05,
"max_abs_error": 0.00018072128295898438,
"reference_rms": 1.7370493419005983,
"output_rms": 1.7370492946923286
},
"v_new_21": {
"relative_l2": 2.797726809652519e-05,
"max_abs_error": 6.780028343200684e-05,
"reference_rms": 0.6072011016139925,
"output_rms": 0.6072000929155407
},
"k_new_22": {
"relative_l2": 2.5605046305493717e-05,
"max_abs_error": 0.00017595291137695312,
"reference_rms": 1.9661056736696203,
"output_rms": 1.9661055142914614
},
"v_new_22": {
"relative_l2": 3.0155327094988507e-05,
"max_abs_error": 7.873773574829102e-05,
"reference_rms": 0.7362191931025958,
"output_rms": 0.7362171698350103
},
"k_new_23": {
"relative_l2": 2.6671729116915016e-05,
"max_abs_error": 0.00019097328186035156,
"reference_rms": 1.6005997999291703,
"output_rms": 1.60060118565224
},
"v_new_23": {
"relative_l2": 3.4074008734635254e-05,
"max_abs_error": 6.61015510559082e-05,
"reference_rms": 0.6675198669572269,
"output_rms": 0.6675204903601081
},
"k_new_24": {
"relative_l2": 2.704267299460315e-05,
"max_abs_error": 0.0001538395881652832,
"reference_rms": 1.6337684549178757,
"output_rms": 1.6337684623266253
},
"v_new_24": {
"relative_l2": 3.2975925022545183e-05,
"max_abs_error": 9.268522262573242e-05,
"reference_rms": 0.6240472225015637,
"output_rms": 0.6240471864702112
},
"k_new_25": {
"relative_l2": 2.4551837497269556e-05,
"max_abs_error": 0.0001919269561767578,
"reference_rms": 1.527601662385539,
"output_rms": 1.5276006461430736
},
"v_new_25": {
"relative_l2": 2.8791585340796676e-05,
"max_abs_error": 0.00010532140731811523,
"reference_rms": 0.9133071626950193,
"output_rms": 0.9133053962861037
},
"k_new_26": {
"relative_l2": 2.5203233904938704e-05,
"max_abs_error": 0.00016385316848754883,
"reference_rms": 1.4905787414732559,
"output_rms": 1.490577617830345
},
"v_new_26": {
"relative_l2": 3.19054502054102e-05,
"max_abs_error": 9.194016456604004e-05,
"reference_rms": 0.7009595279765859,
"output_rms": 0.7009587143967237
},
"k_new_27": {
"relative_l2": 2.705629945468701e-05,
"max_abs_error": 0.00013589859008789062,
"reference_rms": 1.5453936433107067,
"output_rms": 1.5453921534264692
},
"v_new_27": {
"relative_l2": 3.162288021052051e-05,
"max_abs_error": 7.998943328857422e-05,
"reference_rms": 0.6731545154533489,
"output_rms": 0.6731549769955362
}
},
"cache_max_relative_l2": 3.4074008734635254e-05,
"limits": [
"The historical source export does not attest an exact checkpoint revision.",
"The fixture is synthetic and has no token-to-audio quality tolerance.",
"No predictor, vocoder, persistent cache loop or complete TTS stream was tested."
],
"profile": {
"job_id": "jglyxn6j5",
"sample_count": 100,
"sample_min_us": 29979,
"nearest_rank_p50_us": 30161,
"nearest_rank_p95_us": 31301,
"reported_estimated_inference_time_us": 29979,
"reported_peak_memory_bytes": 1929318400,
"reported_first_load_time_us": 2107675,
"reported_first_load_peak_memory_bytes": 1840680960,
"compute_unit_row_counts": {
"CPU": 1800
}
}
}
@@ -0,0 +1,33 @@
{
"timestamp_utc": "2026-09-24T04:31:03.045431+00:00",
"qai_hub_version": "0.55.0",
"facility": "Qualcomm AI Hub Workbench",
"job_id": "j5qly8enp",
"url": "https://workbench.aihub.qualcomm.com/jobs/j5qly8enp/",
"status": "SUCCESS",
"status_message": "",
"options": "--compute_unit cpu",
"hub_version": "aihub-2026.09.11.0",
"device": {
"name": "Samsung Galaxy S25",
"os": "15",
"attributes": [
"os:android",
"framework:tflite",
"framework:onnx",
"abi:aarch64-android",
"vendor:samsung",
"format:phone",
"chipset:qualcomm-snapdragon-8-elite-for-galaxy",
"chipset:sm8750-ac",
"hexagon:v79",
"soc-model:69",
"htp-supports-fp16:true",
"htp-supports-weight-sharing:true",
"framework:qnn"
]
},
"model_id": "mqy57yyrn",
"input_dataset_id": "d7dw6pgy2",
"outputs": "device_output.npz"
}
@@ -8,7 +8,7 @@ The [S25 historical inference](s25_reference_inference.json) on the same fixture
The S25 target's [historical producer job](s25/cpu_control/compile_report.json) was recovered from the exact compiled model used above. A new [CPU-requested inference](s25/cpu_control/inference_report.json) of that same target and fixture returned a finite unsaturated waveform at **4.04e-6 relative L2 / 107.86 dB SNR** versus original ONNX CPU. Its [placement profile](s25/cpu_control/profile_report.json) returned **100** component samples at nearest-rank p50/p95 **4.418/4.641 s**, with all **738 execution-detail rows on CPU** and reported inference peak memory **867,893,248 bytes**. The 2.585 s estimated-time field is the sample minimum. The [full audit](s25/cpu_control/audit_report.json) binds the numerical output, exact historical target and placement. This is a numerically matching component CPU route, not a playable complete stream.
A matching [S24 TFLite CPU fallback compile](s24/cpu_fallback/compile_report.json) succeeded from the same ONNX source. Its [same-fixture CPU-requested inference](s24/cpu_fallback/inference_report.json) returned a finite unsaturated waveform at **4.04e-6 relative L2 / 107.86 dB SNR** versus original ONNX CPU. The [placement profile](s24/cpu_fallback/profile_submission.json) is pending, so actual CPU node assignment and component timing remain unverified.
A matching [S24 TFLite CPU fallback compile](s24/cpu_fallback/compile_report.json) succeeded from the same ONNX source. Its [same-fixture CPU-requested inference](s24/cpu_fallback/inference_report.json) returned a finite unsaturated waveform at **4.04e-6 relative L2 / 107.86 dB SNR** versus original ONNX CPU. The [placement profile](s24/cpu_fallback/profile_report.json) returned **100** component samples at nearest-rank p50/p95 **4.826/4.958 s**, with all **738 execution-detail rows on CPU** and reported inference peak memory **851,140,608 bytes**. The 3.583 s estimated-time field is the sample minimum. The [full audit](s24/cpu_fallback/audit_report.json) binds output and placement. This is a numerically matching component route, not a complete playable TTS stream.
The fresh [RB3 inference](rb3/inference_report.json) on the same fixture returned a finite, **unsaturated** waveform ([output](rb3/device_output.npz)). Its [comparison](rb3/inference_comparison.json) against original ONNX CPU was **15.73% relative L2 / 16.06 dB SNR**, still without a listening-quality threshold. The fresh [profile](rb3/profile_report.json) returned 100 component samples at nearest-rank p50/p95 **3.099/3.133 s** and 403 CPU plus 335 GPU execution-detail rows; the [audit](rb3/audit_report.json) ties the profile to this numerically unqualified output. Thus the bitwise identical SA and RB3 TFLite target downloads produce materially different outputs on their respective devices; target file identity does not establish runtime numerical parity.
@@ -20,7 +20,7 @@ The re-fetched *historical* [SA8775P profile](sa8775p/historical_profile_report.
An exact RB3 Gen 2 [CPU-requested control inference](rb3/cpu_control/inference_report.json) of the same TFLite binary and pinned waveform fixture returned a finite unsaturated waveform. Its [same-fixture comparison](rb3/cpu_control/inference_comparison.json) matched original ONNX CPU within **4.13e-6 relative L2 / 107.67 dB SNR**, with no saturated samples. The [placement profile](rb3/cpu_control/profile_report.json) returned **47** component samples at nearest-rank p50/p95 **12.727/13.424 s**, with all **738 execution-detail rows on CPU** and reported inference peak memory **778,768,384 bytes**. The service's 11.294 s estimated-time field is the sample minimum. The [full audit](rb3/cpu_control/audit_report.json) binds numerical output and placement to the exact binary and device. This is a numerically matching component CPU route, but its 12.727 s median for one fixed vocoder step is a substantial playable-streaming latency blocker; no complete stream was measured. The GPU-requested waveform remains numerically unqualified.
A new [RB3 INT8 QNN DLC compile](rb3/qnn_int8/compile_report.json) succeeded from the same ONNX source with the retained single fixture as calibration data. [Same-fixture NPU-requested inference](rb3/qnn_int8/inference_report.json) returned a finite, unsaturated waveform, but the [comparison](rb3/qnn_int8/inference_comparison.json) versus original ONNX CPU measured **66.93% relative L2 / 3.49 dB SNR**. It is numerically unqualified even on its calibration fixture. The [placement profile](rb3/qnn_int8/profile_submission.json) is pending; any eventual timing will describe this failed waveform, not a usable audio path. Representative calibration, graph-specific quantization and listening-quality validation are still required.
A new [RB3 INT8 QNN DLC compile](rb3/qnn_int8/compile_report.json) succeeded from the same ONNX source with the retained single fixture as calibration data. [Same-fixture NPU-requested inference](rb3/qnn_int8/inference_report.json) returned a finite, unsaturated waveform, but the [comparison](rb3/qnn_int8/inference_comparison.json) versus original ONNX CPU measured **66.93% relative L2 / 3.49 dB SNR**. It is numerically unqualified even on its calibration fixture. The [placement profile](rb3/qnn_int8/profile_report.json) measured 100 component samples at nearest-rank p50/p95 **1.971/1.992 s**, all **728 execution-detail rows on NPU**; the [audit](rb3/qnn_int8/audit_report.json) ties the profile to this numerically failed waveform. A separate explicit [INT8 QDQ quantization](rb3/qdq_int8/quantize_report.json) of the ONNX source, checked on local ORT CPU with [pinned reproducer](../../../../experiments/probe_qwen_tts_vocoder_qdq_cpu.py), differed from original ONNX CPU by **246.97% relative L2 / −7.85 dB SNR** on the same single calibration fixture ([report](rb3/qdq_int8/cpu_qdq_report.json)). Its default ORT optimizer rejected duplicate node names; basic optimization ran. A distinct [W8A16 QDQ quantization](rb3/qdq_w8a16/quantize_report.json) was also numerically poor on ORT CPU: **331.83% relative L2 / −10.42 dB SNR** ([report](rb3/qdq_w8a16/cpu_qdq_report.json)). These explicit QDQ exports and the compile-time INT8 DLC are distinct artifacts, so their differences do not isolate a QNN runtime operation. Neither quantized ONNX artifact passes the CPU numerical gate for an RB3 deployment compile; representative calibration and waveform listening tests remain necessary.
The X Elite [ONNX CPU inference](xelite/cpu/inference_report.json) succeeded on the pinned fixture. Its [waveform comparison](xelite/cpu/inference_comparison.json) to the original local ONNX Runtime CPU output was **8.09e-7 relative L2 / 121.84 dB SNR**, with no saturation. The fresh [CPU profile](xelite/cpu/profile_report.json) returned **94** component samples, nearest-rank p50/p95 **6.384/6.644 s**, with all **634** execution-detail rows on CPU; the service's 5.917 s estimated-time field is the sample minimum. The [full audit](xelite/cpu/audit_report.json) pins source, fixture, target, waveform, placement and percentiles. This is near-source component parity on one fixture, without a listening-quality or complete-stream gate. The first X Elite [GPU inference](xelite/gpu/inference_report.json) and [profile](xelite/gpu/profile_report.json) jobs failed because Workbench rejects specifying both compute unit and ONNX execution provider. The corrected [DirectML inference](xelite/directml/inference_report.json) and [profile](xelite/directml/profile_report.json) both failed during DML provider initialization with Windows error `80070057` (`The parameter is incorrect`), without an output or timing samples. A separate [FP16 QNN DLC compile](xelite/qnn_npu/compile_report.json) succeeded. Its [NPU-requested same-fixture inference](xelite/qnn_npu/inference_report.json) returned a finite, unsaturated waveform at **1.138% relative L2 / 38.88 dB SNR** versus original ONNX CPU ([comparison](xelite/qnn_npu/inference_comparison.json)). This is better waveform agreement on this fixture than the historical S25 GPU output, but lacks a listening-quality tolerance and verified NPU node placement. Its [placement profile](xelite/qnn_npu/profile_report.json) failed after exceeding Workbench maximum execution time while preparing the graph; no timing or per-node placement samples were returned. The [compressed runtime log](xelite/qnn_npu/logs/jpyoxmvr5_runtime.log.gz) retains the QNN HTP preparation/serialization trace. The [X Elite ONNX CPU compile](xelite/compile_report.json) passed after the older TFLite target was rejected on Windows ARM. These failures constrain the tested DirectML route, not all GPU or NPU artifacts.
@@ -0,0 +1,46 @@
{
"scope": "one Workbench QDQ vocoder export on local ONNX Runtime CPU; no device-local or complete TTS stream",
"status": "qdq_cpu_numeric_measured",
"quantize_job_id": "jgdd3wozg",
"target_model_id": "mmxjy02eq",
"calibration_dataset_id": "d7m80jl32",
"source_sha256": "7c07666229c6d404894132e22f784525e3212a49efad55ddd532eda5286c2b2b",
"fixture_sha256": "dfca9e8d2a724a568a31b6cd18ff6a52fdc205fd34e13cbf1cd75f0f7937e82d",
"cpu_reference_sha256": "8de78b94b59f01e49852f7706adbd2508a9976b8e2705cfd3b94d07bb3606cb1",
"target_archive_sha256": "fa8ad4de21a3cf3ed827fd5e23cf17927a2a3a1cb90e4c3549006c7c42ab8fcd",
"target_onnx_sha256": "62f75168157d17fdf5b1a2d72d4ec81905b1882d7b774c8c07222e438767e15e",
"target_external_data_sha256": "6888ac19a6926cbdd882d46a97600163004d275e4d46c3628f09958f4135edbe",
"cpu_qdq_output_sha256": "1ed9ede8624d298407f113e4bae6abc1369bc738c31dd885e3be44f0806dcaae",
"ort_version": "1.29.0",
"provider": [
"CPUExecutionProvider"
],
"intra_op_threads": 4,
"graph_optimization_level": "ORT_ENABLE_BASIC",
"default_ORT_ENABLE_ALL_error": "[ONNXRuntimeError] : 1 : FAIL : This is an invalid model. Error: two nodes with same node name (node_conv1d_28).",
"load_s_not_request_timing": 0.7988796539721079,
"one_inference_s_not_profile": 2.6945875309756957,
"source_onnx_cpu_vs_qdq_cpu": {
"relative_l2": 2.4697067275308098,
"snr_db": -7.85290769533888,
"max_abs": 0.835921049118042,
"cosine": 0.00806358545261374,
"reference_rms": 0.08373439205485074,
"output_rms": 0.1897651139057339,
"output_saturated_fraction_abs_ge_0_999": 0.0
},
"limits": [
"One synthetic calibration fixture cannot establish audio quality or generalization.",
"The explicit QDQ quantize job and compile-time INT8 conversion are distinct artifacts.",
"This local CPU run is not an embedded-device profile or complete TTS stream."
],
"qdq_cpu_vs_distinct_hosted_output": {
"relative_l2": 1.1039196558426072,
"snr_db": -0.8587493248572766,
"max_abs": 0.7946391403675079,
"cosine": -0.00291841482975198,
"reference_rms": 0.1897651139057339,
"output_rms": 0.08817981899626241,
"output_saturated_fraction_abs_ge_0_999": 0.0
}
}
@@ -0,0 +1,15 @@
{
"timestamp_utc": "2026-09-24T04:23:27.355806+00:00",
"qai_hub_version": "0.55.0",
"facility": "Qualcomm AI Hub Workbench",
"job_id": "jgdd3wozg",
"url": "https://workbench.aihub.qualcomm.com/jobs/jgdd3wozg/",
"status": "SUCCESS",
"status_message": "",
"options": "",
"hub_version": "aihub-2026.09.11.0",
"device": null,
"source_model_id": "mqyer339n",
"target_model_id": "mmxjy02eq",
"calibration_dataset_id": "d7m80jl32"
}
@@ -0,0 +1,14 @@
{
"timestamp_utc": "2026-09-24T04:19:42.415415+00:00",
"facility": "Qualcomm AI Hub Workbench",
"qai_hub_version": "0.55.0",
"source_model_id": "mqyer339n",
"calibration_dataset_id": "d7m80jl32",
"calibration_scope": "one retained synthetic fixture only; numerical isolation, not representative calibration",
"weights_dtype": "INT8",
"activations_dtype": "INT8",
"kind": "quantize",
"status": "SUBMITTED",
"job_id": "jgdd3wozg",
"url": "https://workbench.aihub.qualcomm.com/jobs/jgdd3wozg/"
}
@@ -0,0 +1,37 @@
{
"scope": "one Workbench QDQ vocoder export on local ONNX Runtime CPU; no device-local or complete TTS stream",
"status": "qdq_cpu_numeric_measured",
"quantize_job_id": "jpe7z9vv5",
"target_model_id": "mnz027ppm",
"calibration_dataset_id": "d7m80jl32",
"source_sha256": "7c07666229c6d404894132e22f784525e3212a49efad55ddd532eda5286c2b2b",
"fixture_sha256": "dfca9e8d2a724a568a31b6cd18ff6a52fdc205fd34e13cbf1cd75f0f7937e82d",
"cpu_reference_sha256": "8de78b94b59f01e49852f7706adbd2508a9976b8e2705cfd3b94d07bb3606cb1",
"target_archive_sha256": "9c75a63ed635a19b34e3f5579c436cb758c7d8c04f10dccb8718ff893676812f",
"target_onnx_sha256": "603f7832be406981043c80bbc596013c5ce1228bdab8c13cad15a01d13e1fc9b",
"target_external_data_sha256": "f6f0852af820e89eae4d9c7f447616a3fe69349a3ea09cb0f8b3ec4b4692a9a7",
"cpu_qdq_output_sha256": "46d37d2709767b37041f82bbacfb47196d4cd304f7d90c90cf9cff50a0e991a7",
"ort_version": "1.29.0",
"provider": [
"CPUExecutionProvider"
],
"intra_op_threads": 4,
"graph_optimization_level": "ORT_ENABLE_BASIC",
"default_ORT_ENABLE_ALL_error": null,
"load_s_not_request_timing": 0.7923304750001989,
"one_inference_s_not_profile": 2.851856153982226,
"source_onnx_cpu_vs_qdq_cpu": {
"relative_l2": 3.3183207930502525,
"snr_db": -10.418367368047388,
"max_abs": 0.9454415440559387,
"cosine": 0.03147418017131908,
"reference_rms": 0.08373439205485074,
"output_rms": 0.2675889179396874,
"output_saturated_fraction_abs_ge_0_999": 0.0
},
"limits": [
"One synthetic calibration fixture cannot establish audio quality or generalization.",
"The explicit QDQ quantize job and compile-time INT8 conversion are distinct artifacts.",
"This local CPU run is not an embedded-device profile or complete TTS stream."
]
}
@@ -0,0 +1,15 @@
{
"timestamp_utc": "2026-09-24T04:32:09.230559+00:00",
"qai_hub_version": "0.55.0",
"facility": "Qualcomm AI Hub Workbench",
"job_id": "jpe7z9vv5",
"url": "https://workbench.aihub.qualcomm.com/jobs/jpe7z9vv5/",
"status": "SUCCESS",
"status_message": "",
"options": "",
"hub_version": "aihub-2026.09.11.0",
"device": null,
"source_model_id": "mqyer339n",
"target_model_id": "mnz027ppm",
"calibration_dataset_id": "d7m80jl32"
}
@@ -0,0 +1,14 @@
{
"timestamp_utc": "2026-09-24T04:28:19.023910+00:00",
"facility": "Qualcomm AI Hub Workbench",
"qai_hub_version": "0.55.0",
"source_model_id": "mqyer339n",
"calibration_dataset_id": "d7m80jl32",
"calibration_scope": "one retained synthetic fixture only; CPU numerical gate, not representative calibration",
"weights_dtype": "INT8",
"activations_dtype": "INT16",
"kind": "quantize",
"status": "SUBMITTED",
"job_id": "jpe7z9vv5",
"url": "https://workbench.aihub.qualcomm.com/jobs/jpe7z9vv5/"
}
@@ -1,6 +1,6 @@
{
"scope": "one Qwen3-TTS code2wav 48,000-sample component on one retained fixture; no complete TTS stream",
"status": "component_inference_numeric_measured",
"status": "component_executed_quality_unqualified",
"device": {
"name": "Dragonwing RB3 Gen 2 Vision Kit",
"os": "1.6",
@@ -68,7 +68,18 @@
"limits": [
"Historical source export does not attest its exact checkpoint revision.",
"This fixed component waveform has no listening or task-quality tolerance.",
"Hosted component jobs exclude talker, predictor, stage handoff, streaming, admission and sustained power/thermal behavior.",
"Requested compute unit is not verified node placement without a device profile."
]
"Hosted component jobs exclude talker, predictor, stage handoff, streaming, admission and sustained power/thermal behavior."
],
"profile_job_id": "jgk24z7wg",
"profile": {
"sample_count": 100,
"sample_min_us": 1956331,
"nearest_rank_p50_us": 1970602,
"nearest_rank_p95_us": 1991666,
"reported_estimated_inference_time_us": 1956331,
"reported_peak_memory_bytes": 6615040,
"compute_unit_row_counts": {
"NPU": 728
}
}
}
@@ -1,6 +1,6 @@
{
"scope": "one Qwen3-TTS code2wav 48,000-sample component on one retained fixture; no complete TTS stream",
"status": "component_inference_numeric_measured",
"status": "component_executed_quality_unqualified",
"device": {
"name": "Samsung Galaxy S24",
"os": "14",
@@ -69,7 +69,18 @@
"limits": [
"Historical source export does not attest its exact checkpoint revision.",
"This fixed component waveform has no listening or task-quality tolerance.",
"Hosted component jobs exclude talker, predictor, stage handoff, streaming, admission and sustained power/thermal behavior.",
"Requested compute unit is not verified node placement without a device profile."
]
"Hosted component jobs exclude talker, predictor, stage handoff, streaming, admission and sustained power/thermal behavior."
],
"profile_job_id": "jgolryzqg",
"profile": {
"sample_count": 100,
"sample_min_us": 3583045,
"nearest_rank_p50_us": 4826441,
"nearest_rank_p95_us": 4957846,
"reported_estimated_inference_time_us": 3583045,
"reported_peak_memory_bytes": 851140608,
"compute_unit_row_counts": {
"CPU": 738
}
}
}
@@ -24,6 +24,8 @@ A [MiniCPM-o speech-head study](../../../e2e_expansion_20260924/evidence/minicpm
A [raw sustained-window audit](../../../e2e_expansion_20260924/evidence/qwen_tts_sustained_drift/README.md) found that the historical native Windows RTX Qwen3-TTS run slowed sharply after about 26 minutes: all 17 serial medium requests in minutes 27–30 underrun in simulated first-audio playout, with median RTF 1.331. A current-source instrumented 30-minute repeat did not reproduce the collapse: the final 119 requests had median RTF 0.185, with three brief simulated underruns. The cause of the original collapse and an underrun-free playback qualification remain open.
A further [Qwen3-TTS Qualcomm component audit](../../../e2e_expansion_20260924/evidence/qwen_tts_vocoder_qualcomm/README.md) measured an RB3 single-fixture INT8 QNN vocoder on NPU at 1.971/1.992 s p50/p95 across 100 samples, all 728 execution-detail rows on NPU, but its waveform differed from source CPU by 66.93% relative L2. Distinct explicit INT8 and W8A16 QDQ ONNX exports on local ORT CPU differed by 246.97% and 331.83% relative L2 on the same fixture, respectively; the INT8 graph required basic graph optimization because the default optimizer rejected duplicate node names. None of these results qualifies audio quality or a full stream. The [S25 CPU talker step](../../../e2e_expansion_20260924/evidence/qwen_tts_talker_qualcomm/README.md) preserved reference token 80 and profiled 100 samples at 30.161/31.301 ms p50/p95, all 1,800 rows on CPU; S24 CPU vocoder profiled 100 samples at 4.826/4.958 s, all 738 rows on CPU.
Additional [Galaxy S24 and RB3 InternVLA Cosmos encoder checks](../../../e2e_expansion_20260924/evidence/internvla_cosmos_qualcomm/README.md) returned finite same-fixture latents at 0.0613% and 2.20e-6 relative L2 versus source on S24 NPU and RB3 CPU-requested routes, respectively. The S24 placement profile measured 100 six-frame samples at p50/p95 64.314/67.472 ms with all 121 execution-detail rows on NPU. RB3 returned 46 six-frame CPU samples at p50/p95 13.018/13.053 s with all 590 execution-detail rows on CPU. Synthetic hosted-latent handoffs to the real policy on local CPU showed 0.631% and 0.594% action relative L2 for S24 and RB3; neither complete action policy ran on its device.
## Configuration × model
@@ -46,10 +48,10 @@ NOT E2E means no complete device/model workload was verified. “Scoped E2E” i
| PC HX370 + AMD NPU / Windows worker | NOT E2E (output-head component passed) | NOT E2E | NOT E2E | NOT E2E | NOT E2E |
| PC CPU+iGPU+NPU +/- discrete GPU, joint model execution | NOT E2E | NOT E2E | NOT E2E | NOT E2E | NOT E2E |
| PC Snapdragon X Elite CRD / AI Hub | NOT E2E (one Spark attention layer on NPU) | NOT E2E (CPU talker/vocoder steps; QNN vocoder numeric) | NOT E2E | NOT E2E (NPU speech-head step profiled) | NOT E2E (Cosmos NPU encoder profiled) |
| Mobile Galaxy S25 / Snapdragon 8 Elite for Galaxy | NOT E2E (one Spark attention layer on NPU) | NOT E2E (FP16 talker token mismatch; vocoder CPU numeric and profiled) | NOT E2E | NOT E2E (NPU speech head step profiled) | NOT E2E (Cosmos NPU encoder profiled) |
| Mobile Galaxy S24 / Snapdragon 8 Gen 3 | NOT E2E (one Spark attention layer on NPU) | NOT E2E (FP16 talker token mismatch; CPU talker profiled, vocoder placement pending) | NOT E2E | NOT E2E (NPU speech head step profiled) | NOT E2E (Cosmos encoder numeric and NPU profiled) |
| Mobile Galaxy S25 / Snapdragon 8 Elite for Galaxy | NOT E2E (one Spark attention layer on NPU) | NOT E2E (FP16 talker token mismatch; CPU talker + vocoder profiled) | NOT E2E | NOT E2E (NPU speech head step profiled) | NOT E2E (Cosmos NPU encoder profiled) |
| Mobile Galaxy S24 / Snapdragon 8 Gen 3 | NOT E2E (one Spark attention layer on NPU) | NOT E2E (FP16 talker token mismatch; CPU talker + vocoder profiled) | NOT E2E | NOT E2E (NPU speech head step profiled) | NOT E2E (Cosmos encoder numeric and NPU profiled) |
| Embedded SA8775P ADP / AI Hub | NOT E2E (one Spark attention layer on NPU) | NOT E2E (CPU talker/vocoder steps; NPU vocoder failed) | NOT E2E | NOT E2E (NPU speech-head step profiled) | NOT E2E (Cosmos NPU encoder profiled) |
| Embedded RB3 Gen 2 / QCS6490 / AI Hub | NOT E2E (Spark CPU layer passed; W8A8 NPU quality open) | NOT E2E (talker + vocoder CPU numeric and profiled; vocoder slow) | NOT E2E | NOT E2E (CPU speech-head step profiled) | NOT E2E (Cosmos CPU numeric and profiled) |
| Embedded RB3 Gen 2 / QCS6490 / AI Hub | NOT E2E (Spark CPU layer passed; W8A8 NPU quality open) | NOT E2E (CPU talker + vocoder profiled; INT8 NPU vocoder fails numeric gate) | NOT E2E | NOT E2E (CPU speech-head step profiled) | NOT E2E (Cosmos CPU numeric and profiled) |
## Per-cell reasons and next steps
@@ -96,12 +98,12 @@ NOT E2E means no complete device/model workload was verified. “Scoped E2E” i
| PC Snapdragon X Elite CRD / AI Hub | MiniCPM-o 4.5 | COMPONENT_SPEECH_HEAD_NPU_NUMERIC_PROFILED; NOT_E2E_PROFILEABLE | The real 20-layer MiniCPM-o speech-head FP16 QNN DLC ran on the exact X Elite CRD. Same-fixture inference returned 41 finite tensors, preserved ONNX CPU top-1 speech token 1867, and had 0.3170% logits relative L2 and 1.221% maximum K/V relative L2. Its 100-sample component profile had nearest-rank p50/p95 9.905/11.037 ms, with all 944 execution-detail rows on NPU. Reported inference peak memory was 79,208,448 bytes and first-load peak 1,081,573,376 bytes. Thinker/encoders/vocoder and a device-local stateful Omni backend remain unqualified. | Validate the complete multimodal pipeline, state, quality, co-resident memory and sustained behavior; [X Elite raw evidence](../../../e2e_expansion_20260924/evidence/minicpmo_tts_qualcomm/README.md). |
| PC Snapdragon X Elite CRD / AI Hub | InternVLA-A1 | COMPONENT_COSMOS_NPU_NUMERIC_PROFILED; NOT_E2E_PROFILEABLE | The real Place_Markpen Cosmos FP16 QNN image encoder returned a finite FP32 latent for the six-frame synthetic pattern on exact X Elite CRD. Against the pinned source, relative L2 was 0.0608%, SNR 64.32 dB and cosine 0.999999815. The 100-sample six-frame encoder profile had p50/p95 82.939/83.837 ms, with all 121 execution-detail rows on NPU. Reported component inference peak memory was 24,059,904 bytes and first-load peak 692,891,648 bytes. No real-observation action tolerance, complete policy or local stateful Omni backend exists. | Validate real observations, action units/timing, state, admission, cancellation and sustained behavior; [X Elite Cosmos raw evidence](../../../e2e_expansion_20260924/evidence/internvla_cosmos_qualcomm/README.md). |
| Mobile Galaxy S25 / Snapdragon 8 Elite for Galaxy | Spark-X2.5 | COMPONENT_NPU_INFERENCE_PROFILED; NOT_E2E_PROFILEABLE | The real 1.7B checkpoint one-layer W8A16 full-attention decoder artifact executed for a fixed 1,024-token cache bucket. Same-fixture outputs matched S24; the hosted S25 profile had 100 component samples at nearest-rank p50/p95 0.957/1.028 ms with all 73 execution-detail rows on NPU. FP32-source hidden-state relative L2 was 1.351% without a downstream token-quality gate. No full 28-layer prefill/decode, KV/ring, sampling or resident controller ran on S25. | Implement and validate local 128-token generation, 512/1024 transitions, cancellation, resident memory and sustained power; [S25/S24 component evidence](../../../e2e_expansion_20260923/evidence/spark_s24_full_attention/README.md). |
| Mobile Galaxy S25 / Snapdragon 8 Elite for Galaxy | Qwen3-TTS 0.6B CustomVoice | TALKER_FP16_NUMERIC_FAIL; VOCODER_CPU_NUMERIC_PROFILED; NOT_E2E_PROFILEABLE | Fresh FP16 predictor inference passed; its one output exactly matches the same compiled artifact/dataset reference. The same historical S25 TFLite vocoder target requested on CPU returned a finite unsaturated waveform at 4.04e-6 relative L2 / 107.86 dB SNR versus original ONNX CPU on the retained fixture. Its 100-sample component profile measured nearest-rank p50/p95 4.418/4.641 s, with all 738 execution-detail rows on CPU and reported inference peak memory 867,893,248 bytes. The real 28-layer FP16 QNN talker step executed on the synthetic cache fixture, but changed CPU top-1 speech token 80 to 412 with 8.99% logits relative L2 and maximum new-K/V relative L2 11.71%. This tested talker artifact is numerically unqualified; no complete co-resident NPU/GPU stream exists. | Improve and revalidate the [talker artifact](../../../e2e_expansion_20260924/evidence/qwen_tts_talker_qualcomm/README.md), then qualify the [device-local predictor/vocoder pipeline](../../../e2e_expansion_20260924/evidence/qwen_tts_vocoder_qualcomm/README.md), output quality, recovery and 30-minute thermal behavior. |
| Mobile Galaxy S25 / Snapdragon 8 Elite for Galaxy | Qwen3-TTS 0.6B CustomVoice | TALKER_FP16_NUMERIC_FAIL; CPU_TALKER_AND_VOCODER_NUMERIC_PROFILED; NOT_E2E_PROFILEABLE | Fresh FP16 predictor inference passed; its one output exactly matches the same compiled artifact/dataset reference. The same historical S25 TFLite vocoder target requested on CPU returned a finite unsaturated waveform at 4.04e-6 relative L2 / 107.86 dB SNR versus original ONNX CPU on the retained fixture. Its 100-sample component profile measured nearest-rank p50/p95 4.418/4.641 s, with all 738 execution-detail rows on CPU and reported inference peak memory 867,893,248 bytes. A separate 28-layer TFLite CPU-requested talker step returned 57 finite outputs, preserved ONNX CPU top-1 speech token 80, and had logits relative L2 3.33e-5 and maximum new-cache relative L2 3.41e-5. Its 100-sample component profile measured p50/p95 30.161/31.301 ms, with all 1,800 execution-detail rows on CPU and reported inference peak memory 1,929,318,400 bytes. The FP16 QNN talker step executed on the synthetic cache fixture but changed CPU top-1 speech token 80 to 412 with 8.99% logits relative L2 and maximum new-K/V relative L2 11.71%. This tested NPU artifact is numerically unqualified; no complete co-resident NPU/GPU stream exists. | Improve and revalidate the [talker artifact](../../../e2e_expansion_20260924/evidence/qwen_tts_talker_qualcomm/README.md), then qualify the [device-local predictor/vocoder pipeline](../../../e2e_expansion_20260924/evidence/qwen_tts_vocoder_qualcomm/README.md), output quality, recovery and 30-minute thermal behavior. |
| Mobile Galaxy S25 / Snapdragon 8 Elite for Galaxy | Qwen3.8-27B | NOT_E2E_PROFILEABLE | No complete qualified target artifact and device-local stateful Omni backend. Hub jobs provide component execution, not an on-device generation/streaming controller; ADB has no attached device. | Supply and validate the missing matching artifact/backend, then run the complete specified workload. |
| Mobile Galaxy S25 / Snapdragon 8 Elite for Galaxy | MiniCPM-o 4.5 | COMPONENT_FP16_SPEECH_HEAD_NPU_NUMERIC_PROFILED; NOT_E2E_PROFILEABLE | Fresh FP16 speech-head inference passed; all 41 outputs exactly matched the same artifact/dataset reference. Against the recovered original ONNX CPU source on the same fixture, logits relative L2 was 0.3605%, maximum new-K/V relative L2 1.311%, and top-1 speech token 1867 matched. Historical FP16 parity passed; tested W8A16 top-1 parity failed. The 100-sample component profile had p50/p95 7.197/7.615 ms, with all 1,029 execution-detail rows on NPU and reported inference peak memory 185,991,168 bytes. Generated-audio quality and qualified thinker/encoders/vocoder remain unverified. | Qualify a complete mobile checkpoint/export and the full multimodal/stateful pipeline; [speech-head evidence](../../../e2e_expansion_20260924/evidence/minicpmo_tts_qualcomm/README.md). |
| Mobile Galaxy S25 / Snapdragon 8 Elite for Galaxy | InternVLA-A1 | COMPONENT_COSMOS_NPU_NUMERIC_PROFILED; SYNTHETIC_ACTION_SENSITIVITY_MEASURED; NOT_E2E_PROFILEABLE | The real Place_Markpen Cosmos image encoder FP32 ONNX export matched its source on two six-frame fixtures. Galaxy S25 FP16 QNN DLC inference returned a finite latent within 0.0524% relative L2 / 65.61 dB SNR of the pinned pattern source. Injecting this device latent into the same real policy on local CPU changed synthetic `[1,50,32]` actions by 0.742% relative L2; the CPU source repeated bitwise identically. The 100-sample six-frame encoder profile had nearest-rank p50/p95 49.665/51.382 ms, all 121 execution-detail rows on NPU, and a reported inference peak of 158,232,576 bytes. No real-observation task tolerance exists, and the action policy was not resident on S25. ADB has no attached device. | Extend the [S25 encoder component](../../../e2e_expansion_20260924/evidence/internvla_cosmos_qualcomm/README.md), then validate real action quality, device-local state, admission, cancellation and sustained behavior. |
| Mobile Galaxy S24 / Snapdragon 8 Gen 3 | Spark-X2.5 | COMPONENT_NPU_INFERENCE_PROFILED; NOT_E2E_PROFILEABLE | The real 1.7B checkpoint's fixed-shape full-attention decoder **one-layer** W8A16 QDQ artifact compiled as QNN DLC and ran on an exact hosted Galaxy S24 (Android 14). A same-dataset inference returned finite hidden/new-K/new-V outputs identical to the prior S25 NPU outputs; the profile attributed all 73 execution-detail rows to NPU. Across 100 component samples, nearest-rank p50/p95 was 1.109/1.205 ms; the 1.098 ms `estimated_inference_time` field is the minimum, not a median. Relative L2 versus original FP32 ONNX CPU was 1.351%/0.377%/0.650% for hidden/K/V; no token-quality tolerance is known. This is one cache bucket, not 28-layer prefill/decode, KV-ring, sampling, a resident local controller or complete-request timing. ADB has no attached device. | Qualify a complete device-resident artifact/controller with state and token-quality gates, 128-token generation across 512/1024 context transitions, admission/cancel and sustained memory/power; [S24 NPU raw evidence](../../../e2e_expansion_20260923/evidence/spark_s24_full_attention/README.md). |
| Mobile Galaxy S24 / Snapdragon 8 Gen 3 | Qwen3-TTS 0.6B CustomVoice | TALKER_FP16_NUMERIC_FAIL; CPU_TALKER_NUMERIC_PROFILED; VOCODER_CPU_NUMERIC_PASS_PLACEMENT_PENDING; NOT_E2E_PROFILEABLE | A TFLite vocoder target compiled for exact S24 returned a finite, unsaturated CPU-requested waveform matching original ONNX CPU within 4.04e-6 relative L2 / 107.86 dB SNR on the retained fixture; its node-placement/timing profile is pending. A separate TFLite CPU-requested 28-layer talker step returned 57 finite outputs, preserved ONNX CPU top-1 speech token 80, and had logits relative L2 3.33e-5 and maximum new-cache relative L2 3.41e-5. Its 100-sample component profile measured p50/p95 36.976/43.264 ms with all 1,800 execution-detail rows on CPU and reported inference peak memory 1,922,400,256 bytes. The FP16 QNN talker step executed on the same synthetic cache fixture, but changed CPU top-1 speech token 80 to 1720 with 9.33% logits relative L2 and maximum new-K/V relative L2 11.23%. This differs from an earlier FP16 decoder parity test (39.13 dB SNR) on a different component/fixture; the tested INT8 decoder parity failed with negative SNR. No full local TTS stream exists. | Investigate the [FP16 NPU talker numerical difference](../../../e2e_expansion_20260924/evidence/qwen_tts_talker_qualcomm/README.md), then the [vocoder CPU profile](../../../e2e_expansion_20260924/evidence/qwen_tts_vocoder_qualcomm/README.md) and validate the complete local pipeline and a quality-passing artifact set. |
| Mobile Galaxy S24 / Snapdragon 8 Gen 3 | Qwen3-TTS 0.6B CustomVoice | TALKER_FP16_NUMERIC_FAIL; CPU_TALKER_AND_VOCODER_NUMERIC_PROFILED; NOT_E2E_PROFILEABLE | A TFLite vocoder target compiled for exact S24 returned a finite, unsaturated CPU-requested waveform matching original ONNX CPU within 4.04e-6 relative L2 / 107.86 dB SNR on the retained fixture. Its 100-sample component profile measured p50/p95 4.826/4.958 s, all 738 execution-detail rows on CPU, and reported inference peak memory 851,140,608 bytes. A separate TFLite CPU-requested 28-layer talker step returned 57 finite outputs, preserved ONNX CPU top-1 speech token 80, and had logits relative L2 3.33e-5 and maximum new-cache relative L2 3.41e-5. Its 100-sample component profile measured p50/p95 36.976/43.264 ms with all 1,800 execution-detail rows on CPU and reported inference peak memory 1,922,400,256 bytes. The FP16 QNN talker step executed on the same synthetic cache fixture, but changed CPU top-1 speech token 80 to 1720 with 9.33% logits relative L2 and maximum new-K/V relative L2 11.23%. This differs from an earlier FP16 decoder parity test (39.13 dB SNR) on a different component/fixture; the tested INT8 decoder parity failed with negative SNR. No full local TTS stream exists. | Investigate the [FP16 NPU talker numerical difference](../../../e2e_expansion_20260924/evidence/qwen_tts_talker_qualcomm/README.md), then validate the [complete local pipeline](../../../e2e_expansion_20260924/evidence/qwen_tts_vocoder_qualcomm/README.md) and a quality-passing artifact set. |
| Mobile Galaxy S24 / Snapdragon 8 Gen 3 | Qwen3.8-27B | NOT_E2E_PROFILEABLE | No complete qualified target artifact and device-local stateful Omni backend. Hub jobs provide component execution, not an on-device generation/streaming controller; ADB has no attached device. | Supply and validate the missing matching artifact/backend, then run the complete specified workload. |
| Mobile Galaxy S24 / Snapdragon 8 Gen 3 | MiniCPM-o 4.5 | COMPONENT_FP16_SPEECH_HEAD_NPU_NUMERIC_PROFILED; NOT_E2E_PROFILEABLE | The retained FP16 speech-head job used a dataset with identical tensors to the recovered S25 fixture. Against original ONNX CPU, logits relative L2 was 0.3459%, maximum new-K/V relative L2 1.235%, and top-1 speech token 1867 matched. Earlier parity reported 49.22 dB SNR/top-1 match; tested W8A16 top-1 failed. The 100-sample component profile had p50/p95 8.537/9.006 ms, with all 1,029 execution-detail rows on NPU and reported inference peak memory 165,433,344 bytes. Generated-audio quality and the rest of the model remain unqualified. | Qualify thinker/encoders/vocoder and stateful local integration; [speech-head evidence](../../../e2e_expansion_20260924/evidence/minicpmo_tts_qualcomm/README.md). |
| Mobile Galaxy S24 / Snapdragon 8 Gen 3 | InternVLA-A1 | COMPONENT_COSMOS_NPU_NUMERIC_PROFILED; NOT_E2E_PROFILEABLE | The real Place_Markpen Cosmos FP16 QNN image encoder returned a finite six-frame synthetic-pattern latent on exact hosted S24 at 0.0613% relative L2 / 64.25 dB SNR versus pinned FP32 source. Its 100-sample six-frame component profile had nearest-rank p50/p95 64.314/67.472 ms, all 121 execution-detail rows on NPU, reported inference peak memory 309,661,696 bytes and first-load peak 712,884,224 bytes. Injecting its latent into the real policy on local CPU changed synthetic actions by 0.631% relative L2, without a task tolerance. No real-observation action tolerance, complete local policy or stateful controller exists. ADB has no attached device. | Validate real observations, action units/timing, state, admission and cancellation on-device; [S24 Cosmos raw evidence](../../../e2e_expansion_20260924/evidence/internvla_cosmos_qualcomm/README.md). |
@@ -111,7 +113,7 @@ NOT E2E means no complete device/model workload was verified. “Scoped E2E” i
| Embedded SA8775P ADP / AI Hub | MiniCPM-o 4.5 | COMPONENT_SPEECH_HEAD_NPU_NUMERIC_PROFILED; NOT_E2E_PROFILEABLE | The real 20-layer MiniCPM-o speech-head FP16 QNN DLC ran on the exact SA8775P ADP. Same-fixture inference returned 41 finite tensors, preserved ONNX CPU top-1 token 1867, and had 0.3568% logits relative L2 and 1.225% maximum K/V relative L2. Its 100-sample component profile had nearest-rank p50/p95 11.901/13.038 ms, with all 944 execution-detail rows on NPU. Reported inference peak memory was 134,696,960 bytes and first-load peak 1,322,835,968 bytes; no complete thinker/encoders/vocoder bundle or device-local stateful controller exists. | Validate complete multimodal generation, state, speech quality, co-resident memory, cancellation and sustained power; [SA8775P raw evidence](../../../e2e_expansion_20260924/evidence/minicpmo_tts_qualcomm/README.md). |
| Embedded SA8775P ADP / AI Hub | InternVLA-A1 | COMPONENT_COSMOS_NPU_NUMERIC_PROFILED; NOT_E2E_PROFILEABLE | The real Place_Markpen Cosmos FP16 QNN image encoder returned a finite FP32 latent for the six-frame synthetic pattern on exact SA8775P ADP. Against the pinned source, relative L2 was 0.0613%, SNR 64.25 dB and cosine 0.999999812. The 100-sample six-frame encoder profile had p50/p95 116.021/116.327 ms, with all 121 execution-detail rows on NPU. Reported component inference peak memory was 116,924,416 bytes and first-load peak 659,845,120 bytes. No real-observation action tolerance, complete policy or local stateful Omni backend exists. | Validate real observations, action units/timing, state, admission, cancellation and sustained behavior; [SA8775P Cosmos raw evidence](../../../e2e_expansion_20260924/evidence/internvla_cosmos_qualcomm/README.md). |
| Embedded RB3 Gen 2 / QCS6490 / AI Hub | Spark-X2.5 | COMPONENT_CPU_PARITY_PASS; COMPONENT_NPU_NUMERIC_UNQUALIFIED; NOT_E2E_PROFILEABLE | On the exact hosted Dragonwing RB3 Gen 2 Vision Kit (QCS6490, QC Linux 1.6), the reused S24 W8A16 QNN DLC and a separately RB3-compiled W8A16 DLC each failed inference/profile at QnnModel_composeGraphsFromDlc: MODEL_GRAPH_ERROR. An FP32 ONNX one-layer CPU route passed with all 56 profile rows on CPU, source-relative hidden/K/V L2 of 8.73e-7/2.98e-7/3.37e-7 and 100-sample component p50/p95 19.304/21.113 ms. A calibrated W8A8 QNN DLC ran with all 61 rows on NPU and p50/p95 5.610/5.761 ms, but hidden/K/V relative L2 was 20.914%/1.702%/4.413% versus FP32 CPU, without a next-token quality gate. These are different precisions, not a qualified speedup; no complete 28-layer prefill/decode/KV-ring/sampling, local Omni controller or complete-request timing exists. | Improve representative W8A8 calibration or find another compatible quality-passing artifact; validate token parity, then full device-resident generation, admission/cancel and sustained power; [RB3 raw evidence](../../../e2e_expansion_20260923/evidence/spark_rb3_full_attention/README.md). |
| Embedded RB3 Gen 2 / QCS6490 / AI Hub | Qwen3-TTS 0.6B CustomVoice | COMPONENT_CPU_TALKER_AND_VOCODER_NUMERIC_PROFILED; MIXED_GPU_VOCODER_NUMERIC_UNQUALIFIED; NOT_E2E_PROFILEABLE | On exact hosted RB3, a CPU-requested inference of the same TFLite binary returned a finite unsaturated waveform matching original ONNX CPU within 4.13e-6 relative L2 / 107.67 dB SNR on the retained fixture; its 47-sample component profile measured nearest-rank p50/p95 12.727/13.424 s, all 738 execution-detail rows on CPU, and reported inference peak memory 778,768,384 bytes. The GPU-requested waveform was also finite and unsaturated but differed by 15.73% relative L2 (16.06 dB SNR), without a listening-quality tolerance. Its 100-sample mixed CPU/GPU component profile had nearest-rank p50/p95 3.099/3.133 s and 403 CPU plus 335 GPU execution-detail rows. The 3.070 s estimated-time field is the sample minimum. The historical NPU talker build was rejected for floating-point inputs; a separate TFLite CPU-requested talker inference returned 57 finite outputs, preserved ONNX CPU top-1 speech token 80, and had logits relative L2 2.29e-5 and maximum new-cache relative L2 3.04e-5. Its 100-sample component profile measured p50/p95 138.022/139.642 ms with all 1,800 execution-detail rows on CPU and reported inference peak memory 1,849,708,544 bytes. The 12.727 s vocoder median is a major playable-streaming latency blocker. A single-fixture-calibrated INT8 QNN NPU-requested vocoder also returned an unsaturated but 66.93%-relative-L2 divergent waveform (3.49 dB SNR) versus original ONNX CPU; its node placement is pending and its audio is numerically unqualified. No predictor, stateful loop or full TTS pipeline exists. | Find a faster quality-passing vocoder route; validate predictor, waveform quality, complete local execution, memory and sustained behavior; [vocoder evidence](../../../e2e_expansion_20260924/evidence/qwen_tts_vocoder_qualcomm/README.md) and [talker evidence](../../../e2e_expansion_20260924/evidence/qwen_tts_talker_qualcomm/README.md). |
| Embedded RB3 Gen 2 / QCS6490 / AI Hub | Qwen3-TTS 0.6B CustomVoice | COMPONENT_CPU_TALKER_AND_VOCODER_NUMERIC_PROFILED; MIXED_GPU_VOCODER_NUMERIC_UNQUALIFIED; INT8_NPU_VOCODER_NUMERIC_FAIL; NOT_E2E_PROFILEABLE | On exact hosted RB3, a CPU-requested inference of the same TFLite binary returned a finite unsaturated waveform matching original ONNX CPU within 4.13e-6 relative L2 / 107.67 dB SNR on the retained fixture; its 47-sample component profile measured nearest-rank p50/p95 12.727/13.424 s, all 738 execution-detail rows on CPU, and reported inference peak memory 778,768,384 bytes. The GPU-requested waveform was also finite and unsaturated but differed by 15.73% relative L2 (16.06 dB SNR), without a listening-quality tolerance. Its 100-sample mixed CPU/GPU component profile had nearest-rank p50/p95 3.099/3.133 s and 403 CPU plus 335 GPU execution-detail rows. The 3.070 s estimated-time field is the sample minimum. The historical NPU talker build was rejected for floating-point inputs; a separate TFLite CPU-requested talker inference returned 57 finite outputs, preserved ONNX CPU top-1 speech token 80, and had logits relative L2 2.29e-5 and maximum new-cache relative L2 3.04e-5. Its 100-sample component profile measured p50/p95 138.022/139.642 ms with all 1,800 execution-detail rows on CPU and reported inference peak memory 1,849,708,544 bytes. The 12.727 s vocoder median is a major playable-streaming latency blocker. A single-fixture-calibrated INT8 QNN vocoder returned an unsaturated but 66.93%-relative-L2 divergent waveform (3.49 dB SNR) versus original ONNX CPU. Its 100-sample component profile measured p50/p95 1.971/1.992 s with all 728 execution-detail rows on NPU, but these timings describe numerically failed audio. A distinct explicit INT8 QDQ ONNX export, checked on local ORT CPU with basic graph optimization, diverged by 246.97% relative L2 (−7.85 dB SNR) from the original CPU waveform on the same calibration fixture; its default ORT optimizer rejected duplicate node names. A second distinct W8A16 QDQ ONNX export diverged by 331.83% relative L2 (−10.42 dB SNR) on local ORT CPU with the same single-fixture calibration. These quantization routes do not isolate a specific QNN runtime operation. None of these audio paths is qualified. No predictor, stateful loop or full TTS pipeline exists. | Find a faster quality-passing vocoder route; validate predictor, waveform quality, complete local execution, memory and sustained behavior; [vocoder evidence](../../../e2e_expansion_20260924/evidence/qwen_tts_vocoder_qualcomm/README.md) and [talker evidence](../../../e2e_expansion_20260924/evidence/qwen_tts_talker_qualcomm/README.md). |
| Embedded RB3 Gen 2 / QCS6490 / AI Hub | Qwen3.8-27B | NOT_E2E_PROFILEABLE | No complete qualified target artifact and device-local stateful Omni backend. Hub jobs provide component execution, not an on-device generation/streaming controller; ADB has no attached device. | Supply and validate the missing matching artifact/backend, then run the complete specified workload. |
| Embedded RB3 Gen 2 / QCS6490 / AI Hub | MiniCPM-o 4.5 | COMPONENT_SPEECH_HEAD_FP16_QNN_LOAD_FAILED; CPU_FALLBACK_NUMERIC_PROFILED; NOT_E2E_PROFILEABLE | The real 20-layer MiniCPM-o speech-head FP16 QNN DLC compiled for exact RB3 Gen 2, but same-fixture NPU-requested inference failed at graph load with QnnModel_composeGraphsFromDlc: MODEL_GRAPH_ERROR. RB3 device attributes do not advertise FP16 HTP support. An explicit TFLite CPU-requested fallback returned 41 finite tensors, preserved ONNX CPU top-1 token 1867, and had logits relative L2 1.26e-6 and maximum K/V relative L2 1.58e-6. Its 100-sample component profile had p50/p95 59.518/71.347 ms with all 1,008 execution-detail rows on CPU; reported inference peak memory was 820,981,760 bytes. No complete model bundle or local stateful controller exists. | Qualify complete multimodal generation and sustained behavior; [RB3 speech-head CPU evidence](../../../e2e_expansion_20260924/evidence/minicpmo_tts_qualcomm/README.md). |
| Embedded RB3 Gen 2 / QCS6490 / AI Hub | InternVLA-A1 | COMPONENT_COSMOS_CPU_NUMERIC_PROFILED; NOT_E2E_PROFILEABLE | The real Place_Markpen Cosmos ONNX image encoder returned a finite six-frame synthetic-pattern latent on exact hosted RB3 at 2.20e-6 relative L2 / 113.17 dB SNR versus pinned FP32 source. Its 46-sample six-frame component profile had nearest-rank p50/p95 13.018/13.053 s, all 590 execution-detail rows on CPU, and reported inference peak memory 220,680,192 bytes. Injecting this near-source latent into the real policy on local CPU changed synthetic actions by 0.594% relative L2, without a task tolerance. No complete device-local action policy or stateful controller exists. | Find a faster quality-passing encoder artifact and validate real observations, action units/timing, state, admission and cancellation on-device; [RB3 Cosmos raw evidence](../../../e2e_expansion_20260924/evidence/internvla_cosmos_qualcomm/README.md). |
+1 -1
View File
@@ -15,7 +15,7 @@ remain open; the 2026-09-22 audit remains the historical baseline.
The [Spark hosted Qualcomm component expansion](../../benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/spark_s24_full_attention/README.md) advances M1 only to one real fixed-shape decoder attention layer. The same W8A16 QNN DLC ran on S24, Snapdragon X Elite CRD and SA8775P ADP NPUs with identical outputs on one pinned fixture; S25 had prior separate component evidence. On [RB3 Gen 2](../../benchmarks/edge_harness/results/e2e_expansion_20260923/evidence/spark_rb3_full_attention/README.md), the tested W8A16 graph failed QNN loading even after an exact-device compile. FP32 ONNX ran on CPU with near-source parity, while calibrated W8A8 ran on NPU but had 20.9% hidden-state relative L2 and remains numerically unqualified. These are component C results, not full M1: device-local 28-layer prefill/continuous decode, KV/ring, sampling, token quality, admission/cancellation, complete-request timing and sustained power/thermal gates remain open. AI Hub is the test facility, not a deployment dependency.
The [Qwen3-TTS Code2Wav Qualcomm follow-up](../../benchmarks/edge_harness/results/e2e_expansion_20260924/evidence/qwen_tts_vocoder_qualcomm/README.md) adds a retained same-fixture numerical check to M2. A fresh SA8775P GPU-requested output saturated 96.63% of samples and differs from original ONNX CPU by 11.832 relative L2, so that route fails the numerical gate despite profiling. The same binary's CPU-requested output on the exact SA device matched original ONNX CPU within 4.13e-6 relative L2; its 100-sample CPU-requested component profile passed placement (738/738 execution-detail rows on CPU) at nearest-rank p50/p95 5.384/5.534 s, still without a full stream. A FP32-preserving GPU-option control still saturated 84.89% of samples, so that option did not fix the tested route. RB3 TFLite GPU-requested inference returned an unsaturated but 15.73%-relative-L2 divergent waveform; its fresh 100-sample mixed CPU/GPU component p50/p95 was 3.099/3.133 s. The same binary requested on exact-RB3 CPU matched original ONNX CPU within 4.13e-6 relative L2 on the retained fixture; its 47-sample component profile measured p50/p95 12.727/13.424 s with all 738 execution-detail rows on CPU. That measured component latency is a major blocker for playable streaming on this route. A one-fixture-calibrated RB3 INT8 QNN vocoder returned a finite but 66.93%-relative-L2 divergent waveform (3.49 dB SNR) versus ONNX CPU, without yet verified NPU placement; it fails the numerical gate even on its calibration fixture. X Elite ONNX CPU inference matched the local ONNX Runtime output with 8.09e-7 relative L2; its 94-sample component profile was p50/p95 6.384/6.644 s with all execution-detail rows on CPU. Corrected DirectML inference and profile both failed during provider initialization; separate FP16 QNN DLC inference returned an unsaturated waveform at 1.138% relative L2 / 38.88 dB SNR versus local ONNX CPU, but its placement profile timed out during QNN graph preparation without samples. A separate SA8775P FP16 QNN DLC vocoder compile passed, but NPU-requested same-fixture inference failed after compilation without waveform or placement samples. Fresh S24 and S25 CPU-requested TFLite vocoder inferences matched ONNX CPU within 4.04e-6 relative L2 on the retained fixture. S25 measured 100 component samples at p50/p95 4.418/4.641 s with all 738 execution-detail rows on CPU; S24 placement profiling is pending. M2 still requires a quality-passing talker/predictor/vocoder set, device-local co-residency and handoff, playable streaming and sustained memory/power validation.
The [Qwen3-TTS Code2Wav Qualcomm follow-up](../../benchmarks/edge_harness/results/e2e_expansion_20260924/evidence/qwen_tts_vocoder_qualcomm/README.md) adds a retained same-fixture numerical check to M2. A fresh SA8775P GPU-requested output saturated 96.63% of samples and differs from original ONNX CPU by 11.832 relative L2, so that route fails the numerical gate despite profiling. The same binary's CPU-requested output on the exact SA device matched original ONNX CPU within 4.13e-6 relative L2; its 100-sample CPU-requested component profile passed placement (738/738 execution-detail rows on CPU) at nearest-rank p50/p95 5.384/5.534 s, still without a full stream. A FP32-preserving GPU-option control still saturated 84.89% of samples, so that option did not fix the tested route. RB3 TFLite GPU-requested inference returned an unsaturated but 15.73%-relative-L2 divergent waveform; its fresh 100-sample mixed CPU/GPU component p50/p95 was 3.099/3.133 s. The same binary requested on exact-RB3 CPU matched original ONNX CPU within 4.13e-6 relative L2 on the retained fixture; its 47-sample component profile measured p50/p95 12.727/13.424 s with all 738 execution-detail rows on CPU. That measured component latency is a major blocker for playable streaming on this route. A one-fixture-calibrated RB3 INT8 QNN vocoder returned a finite but 66.93%-relative-L2 divergent waveform (3.49 dB SNR) versus ONNX CPU, with 100 NPU component samples at p50/p95 1.971/1.992 s and all 728 execution-detail rows on NPU; it fails the numerical gate even on its calibration fixture. X Elite ONNX CPU inference matched the local ONNX Runtime output with 8.09e-7 relative L2; its 94-sample component profile was p50/p95 6.384/6.644 s with all execution-detail rows on CPU. Corrected DirectML inference and profile both failed during provider initialization; separate FP16 QNN DLC inference returned an unsaturated waveform at 1.138% relative L2 / 38.88 dB SNR versus local ONNX CPU, but its placement profile timed out during QNN graph preparation without samples. A separate SA8775P FP16 QNN DLC vocoder compile passed, but NPU-requested same-fixture inference failed after compilation without waveform or placement samples. Fresh S24 and S25 CPU-requested TFLite vocoder inferences matched ONNX CPU within 4.04e-6 relative L2 on the retained fixture. S25 measured 100 component samples at p50/p95 4.418/4.641 s with all 738 execution-detail rows on CPU; S24 measured 100 at 4.826/4.958 s with all 738 rows on CPU. Separate explicit INT8 and W8A16 QDQ ONNX exports checked on local ORT CPU failed the same-fixture numerical gate at 246.97% and 331.83% waveform relative L2, respectively. S25 CPU talker inference preserved token 80 and its 100-sample component profile measured p50/p95 30.161/31.301 ms with all 1,800 rows on CPU. M2 still requires a quality-passing talker/predictor/vocoder set, device-local co-residency and handoff, playable streaming and sustained memory/power validation.
The identical SA/RB3 TFLite vocoder binary also matched original ONNX CPU within 3.45e-6 relative L2 on a separate local HX370 x86-64 LiteRT 2.2.0 CPU control. Exact-SA and RB3 CPU-requested parity narrow the failures to their GPU-requested routes on the tested fixture. The FP32-preserving GPU option did not fix it, so per-node placement and delegate-operation isolation remain open.