Audit Qualcomm components and Windows TTS sustained drift
This commit is contained in:
1 parent
d8995de9ec
commit
5d81c3678b
25 files changed
+15224
-28
No files matched your search
@@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Summarize fixed time windows of raw Qwen3-TTS sustained request streams."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import math
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
WINDOWS_MIN = ((0, 25), (25, 27), (27, 30))
|
||||
|
||||
|
||||
def nearest_rank(values: list[float], fraction: float) -> float | None:
|
||||
if not values:
|
||||
return None
|
||||
ordered = sorted(values)
|
||||
return ordered[math.ceil(len(ordered) * fraction) - 1]
|
||||
|
||||
|
||||
def required_prebuffer_ms(row: dict) -> float:
|
||||
chunks = [chunk for chunk in row["chunks_all"] if chunk["samples"]]
|
||||
if not chunks:
|
||||
raise ValueError(f"{row['request_id']}: no audio chunks")
|
||||
first_ms = chunks[0]["t_ms"]
|
||||
played_ms = 0.0
|
||||
required_ms = 0.0
|
||||
for chunk in chunks:
|
||||
required_ms = max(required_ms, chunk["t_ms"] - first_ms - played_ms)
|
||||
played_ms += 1000 * chunk["samples"] / chunk["sr"]
|
||||
return required_ms
|
||||
|
||||
|
||||
def summarize(path: Path) -> dict:
|
||||
rows = [json.loads(line) for line in path.open(encoding="utf-8")]
|
||||
sustained = [row for row in rows if row["phase"] == "sustained"]
|
||||
if not sustained:
|
||||
raise ValueError(f"{path}: no sustained requests")
|
||||
start = sustained[0]["submitted_unix"]
|
||||
result = {"source": str(path), "sustained_count": len(sustained), "windows": []}
|
||||
for lo, hi in WINDOWS_MIN:
|
||||
selected = [row for row in sustained
|
||||
if lo * 60 <= row["submitted_unix"] - start < hi * 60]
|
||||
rtf = [row["rtf_total"] for row in selected]
|
||||
wall = [row["total_wall_s"] for row in selected]
|
||||
buffers = [required_prebuffer_ms(row) for row in selected]
|
||||
result["windows"].append({
|
||||
"minutes": [lo, hi],
|
||||
"requests": len(selected),
|
||||
"rtf_p50": nearest_rank(rtf, 0.5),
|
||||
"rtf_p95": nearest_rank(rtf, 0.95),
|
||||
"wall_s_p50": nearest_rank(wall, 0.5),
|
||||
"wall_s_p95": nearest_rank(wall, 0.95),
|
||||
"requests_with_underrun_at_ttfa": sum(bool(row["underruns"]) for row in selected),
|
||||
"required_prebuffer_ms_p50": nearest_rank(buffers, 0.5),
|
||||
"required_prebuffer_ms_p95": nearest_rank(buffers, 0.95),
|
||||
"required_prebuffer_ms_max": max(buffers) if buffers else None,
|
||||
})
|
||||
return result
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("paths", nargs="+", type=Path)
|
||||
parser.add_argument("--out", type=Path)
|
||||
args = parser.parse_args()
|
||||
result = {
|
||||
"method": "Non-overlapping windows from each run's first sustained submission; nearest-rank percentiles; "
|
||||
"prebuffer is minimum added delay after first audio arrival to avoid all simulated underruns",
|
||||
"runs": [summarize(path) for path in args.paths],
|
||||
}
|
||||
output = json.dumps(result, indent=2) + "\n"
|
||||
if args.out:
|
||||
args.out.parent.mkdir(parents=True, exist_ok=True)
|
||||
args.out.write_text(output, encoding="utf-8")
|
||||
else:
|
||||
print(output, end="")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,80 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
"""Low-rate, device-wide GPU telemetry for sustained local profiling."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import threading
|
||||
import time
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
|
||||
class GpuTelemetry:
|
||||
def __init__(self, path: Path, interval_s: float) -> None:
|
||||
if interval_s <= 0:
|
||||
raise ValueError("interval_s must be positive")
|
||||
self.path = path
|
||||
self.interval_s = interval_s
|
||||
self.samples = 0
|
||||
self.error: str | None = None
|
||||
self._stop = threading.Event()
|
||||
self._thread: threading.Thread | None = None
|
||||
|
||||
def start(self) -> None:
|
||||
def run() -> None:
|
||||
try:
|
||||
import psutil
|
||||
import pynvml
|
||||
|
||||
pynvml.nvmlInit()
|
||||
handle = pynvml.nvmlDeviceGetHandleByIndex(0)
|
||||
try:
|
||||
with self.path.open("w", encoding="utf-8") as output:
|
||||
while not self._stop.is_set():
|
||||
row: dict[str, Any] = {"unix": time.time()}
|
||||
|
||||
def read(name: str, getter: Any) -> None:
|
||||
try:
|
||||
row[name] = getter()
|
||||
except Exception:
|
||||
row[name] = None
|
||||
|
||||
read("gpu_temperature_c", lambda: int(pynvml.nvmlDeviceGetTemperature(
|
||||
handle, pynvml.NVML_TEMPERATURE_GPU)))
|
||||
read("gpu_power_mw", lambda: int(pynvml.nvmlDeviceGetPowerUsage(handle)))
|
||||
read("gpu_clock_sm_mhz", lambda: int(pynvml.nvmlDeviceGetClockInfo(
|
||||
handle, pynvml.NVML_CLOCK_SM)))
|
||||
read("gpu_clock_memory_mhz", lambda: int(pynvml.nvmlDeviceGetClockInfo(
|
||||
handle, pynvml.NVML_CLOCK_MEM)))
|
||||
read("gpu_throttle_reasons", lambda: int(
|
||||
pynvml.nvmlDeviceGetCurrentClocksThrottleReasons(handle)))
|
||||
read("gpu_utilization_pct", lambda: int(
|
||||
pynvml.nvmlDeviceGetUtilizationRates(handle).gpu))
|
||||
read("gpu_memory_used_bytes", lambda: int(
|
||||
pynvml.nvmlDeviceGetMemoryInfo(handle).used))
|
||||
read("host_available_bytes", lambda: int(psutil.virtual_memory().available))
|
||||
read("host_cpu_utilization_pct", lambda: float(psutil.cpu_percent(interval=None)))
|
||||
output.write(json.dumps(row) + "\n")
|
||||
output.flush()
|
||||
self.samples += 1
|
||||
self._stop.wait(self.interval_s)
|
||||
finally:
|
||||
pynvml.nvmlShutdown()
|
||||
except Exception as exc:
|
||||
self.error = f"{type(exc).__name__}: {exc}"
|
||||
|
||||
self._thread = threading.Thread(target=run, name="gpu-telemetry", daemon=True)
|
||||
self._thread.start()
|
||||
|
||||
def stop(self) -> dict[str, Any]:
|
||||
self._stop.set()
|
||||
if self._thread is not None:
|
||||
self._thread.join(timeout=5)
|
||||
return {
|
||||
"path": self.path.name,
|
||||
"samples": self.samples,
|
||||
"interval_s": self.interval_s,
|
||||
"error": self.error,
|
||||
"scope": "whole GPU/host; not attributable to this process; sampled values may miss peaks",
|
||||
}
|
||||
@@ -12,6 +12,7 @@ import time
|
||||
import traceback
|
||||
from pathlib import Path
|
||||
|
||||
from gpu_telemetry import GpuTelemetry
|
||||
from profile_local_text import HOST_ENVIRONMENT, save
|
||||
|
||||
|
||||
@@ -51,6 +52,10 @@ async def run(args):
|
||||
save(args.out / "report.json", report)
|
||||
sampler = MemorySampler()
|
||||
sampler.start()
|
||||
gpu_telemetry = None
|
||||
if args.gpu_telemetry_interval_s > 0:
|
||||
gpu_telemetry = GpuTelemetry(args.out / "gpu_telemetry.jsonl", args.gpu_telemetry_interval_s)
|
||||
gpu_telemetry.start()
|
||||
omni = None
|
||||
try:
|
||||
cfg = Qwen3TTSConfig.from_pretrained(args.model)
|
||||
@@ -196,6 +201,8 @@ async def run(args):
|
||||
omni.shutdown()
|
||||
sampler.stop()
|
||||
report["memory"] = sampler.peaks()
|
||||
if gpu_telemetry is not None:
|
||||
report["gpu_telemetry"] = gpu_telemetry.stop()
|
||||
report["end_unix"] = time.time()
|
||||
save(args.out / "report.json", report)
|
||||
return report["status"] == "completed"
|
||||
@@ -207,6 +214,8 @@ if __name__ == "__main__":
|
||||
p.add_argument("--out", required=True, type=Path)
|
||||
p.add_argument("--repeats", default=20, type=int)
|
||||
p.add_argument("--sustained-seconds", default=1800, type=float)
|
||||
p.add_argument("--gpu-telemetry-interval-s", default=0.0, type=float,
|
||||
help="Sample device-wide NVML and host telemetry; 0 disables sampling.")
|
||||
p.add_argument(
|
||||
"--length-band",
|
||||
choices=("short", "medium", "long"),
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
# 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 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. 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; placement profiling is pending. A separate SA8775P FP16 QNN vocoder compile passed, but same-fixture NPU-requested inference failed after compilation without a waveform or placement samples. 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 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. 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. 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.
|
||||
|
||||
The [talker decode-step attempt](evidence/qwen_tts_talker_qualcomm/README.md) pins a separate 28-layer source and synthetic cache fixture. Historical FP16 QNN context-binary inference executed on S24, S25, SA8775P and X Elite, but all four changed the CPU top-1 speech token with 8.57–9.43% logits relative L2. These artifacts are numerically unqualified on the fixture. RB3 rejected the floating-point-input artifact. Explicit X Elite ONNX CPU and SA8775P TFLite CPU fallback compiles passed. X Elite CPU-requested inference preserved CPU top-1 token 80 with logits relative L2 2.07e-5; its placement profile remains pending. SA8775P TFLite CPU-requested talker inference also preserved token 80 with logits relative L2 3.33e-5; its placement profile is pending. No complete talker loop or TTS stream passed.
|
||||
|
||||
The [MiniCPM-o speech-head study](evidence/minicpmo_tts_qualcomm/README.md) recovered the real 20-layer ONNX source and a matching retained fixture. S24 and S25 FP16 context-binary outputs preserved the ONNX CPU top-1 speech token with 0.346%/0.360% logits relative L2 on one step. Their 100-sample component profiles had p50/p95 8.537/9.006 ms and 7.197/7.615 ms, with all 1,029 execution-detail rows on NPU for each. FP16 QNN DLC compiles passed for SA8775P, X Elite and RB3. SA8775P NPU-requested inference preserved CPU top-1 token 1867 with 0.3568% logits relative L2; X Elite same-fixture inference also preserved token 1867 with 0.3170% logits relative L2. SA and X Elite placement profiles remain pending. RB3 FP16 QNN inference failed at graph load despite compile success; an explicit TFLite CPU fallback compile passed with same-fixture CPU-requested inference pending. The complete multimodal model remains unqualified on those devices.
|
||||
The [MiniCPM-o speech-head study](evidence/minicpmo_tts_qualcomm/README.md) recovered the real 20-layer ONNX source and a matching retained fixture. S24 and S25 FP16 context-binary outputs preserved the ONNX CPU top-1 speech token with 0.346%/0.360% logits relative L2 on one step. Their 100-sample component profiles had p50/p95 8.537/9.006 ms and 7.197/7.615 ms, with all 1,029 execution-detail rows on NPU for each. FP16 QNN DLC compiles passed for SA8775P, X Elite and RB3. SA8775P NPU-requested inference preserved CPU top-1 token 1867 with 0.3568% logits relative L2; its 100-sample profile measured p50/p95 11.901/13.038 ms, all 944 execution-detail rows on NPU. X Elite same-fixture inference also preserved token 1867 with 0.3170% logits relative L2; its 100-sample profile measured p50/p95 9.905/11.037 ms, all 944 execution-detail rows on NPU. RB3 FP16 QNN inference failed at graph load despite compile success; an explicit TFLite CPU fallback same-fixture inference preserved top-1 token 1867 with logits relative L2 1.26e-6 versus ONNX CPU; CPU placement profiling is pending. The complete multimodal model remains unqualified on those devices.
|
||||
|
||||
The [InternVLA Cosmos S25 attempt](evidence/internvla_cosmos_qualcomm/README.md) repackages the real policy's image encoder from its parity-tested ONNX export. FLOAT16 QNN DLC inference returned a latent within 0.0524% relative L2 of the source on one pattern. Injecting it into the real policy on local CPU changed synthetic actions by 0.742% relative L2, without a task tolerance. S25 six-frame component placement profile returned 100 samples at p50/p95 49.665/51.382 ms, with all 121 execution-detail rows on NPU. The same encoder compiled to FP16 QNN DLC for X Elite CRD, with same-fixture NPU-requested inference pending; an SA8775P FP16 QNN DLC compile passed, with same-fixture NPU-requested inference pending. Device-local action-policy support remains unqualified. The checkpoint-named Place_Markpen dataset returned HTTP 404, and the official vLLM-Omni example archive in InternData-A1 returned HTTP 403 gated-access denial under the current authenticated account; [real-observation access evidence](evidence/internvla_real_observation_access/README.md) records the blocker without treating synthetic actions as task validation.
|
||||
The [native Windows Qwen3-TTS sustained analysis](evidence/qwen_tts_sustained_drift/README.md) finds a sharp playback throughput collapse around minute 26–27 in the historical 30-minute RTX 5090 Laptop stream. The last 17 serial requests all had simulated underruns with median RTF 1.331; the separate WSL run did not show that behavior. A revised local profiler now records timestamped device-wide NVML clocks, power, temperature, throttling and utilization to investigate the cause in a repeat run. The historical evidence cannot identify the cause or qualify native Windows sustained playback.
|
||||
|
||||
The [InternVLA Cosmos S25 attempt](evidence/internvla_cosmos_qualcomm/README.md) repackages the real policy's image encoder from its parity-tested ONNX export. FLOAT16 QNN DLC inference returned a latent within 0.0524% relative L2 of the source on one pattern. Injecting it into the real policy on local CPU changed synthetic actions by 0.742% relative L2, without a task tolerance. S25 six-frame component placement profile returned 100 samples at p50/p95 49.665/51.382 ms, with all 121 execution-detail rows on NPU. The same encoder compiled to FP16 QNN DLC for X Elite CRD; same-fixture NPU-requested inference returned a finite latent at 0.0608% relative L2 / 64.32 dB SNR versus the source, with placement profiling pending. An SA8775P FP16 QNN DLC compile passed, with same-fixture NPU-requested inference pending. Device-local action-policy support remains unqualified. The checkpoint-named Place_Markpen dataset returned HTTP 404, and the official vLLM-Omni example archive in InternData-A1 returned HTTP 403 gated-access denial under the current authenticated account; [real-observation access evidence](evidence/internvla_real_observation_access/README.md) records the blocker without treating synthetic actions as task validation.
|
||||
+2
-2
@@ -4,10 +4,10 @@ This tests the **real Place_Markpen Cosmos CI8x8 image encoder component**, not
|
||||
|
||||
Workbench source model `mn4okj3rq` was [submitted for Galaxy S25 QNN DLC compilation](s25/compile_submission.json) as job `jpxl4d1jp`, with `default_graph_htp_precision=FLOAT16`. The [compile](s25/compile_report.json) succeeded and produced target model `mqkp12rxm`. [Same-fixture pattern inference](s25/inference_report.json) requesting NPU also succeeded. The [audit](s25/audit_report.json) found **0.0524% relative L2 / 65.61 dB SNR** versus the pinned source latent, with finite FP32 `[6,16,32,32]` output. This establishes numerical behavior on one synthetic encoder fixture; the [placement profile](s25/profile_report.json) attributed all 121 execution-detail rows to NPU. Its 100 six-frame component samples had nearest-rank p50/p95 49.665/51.382 ms (minimum 47.438 ms); reported inference peak memory was 158,232,576 bytes. The service reported first/warm load times of 20.996/0.178 s and corresponding peak memories of 679,317,504/279,449,600 bytes for this component job. The combined audit binds placement, numerical output and exact target/device. These exclude the action policy, data handoff, cold-load cost and sustained operation.
|
||||
|
||||
The same source model also [compiled to FP16 QNN DLC on Snapdragon X Elite CRD](xelite/compile_report.json), producing target `mmxj0w8kq` for Windows ARM. A [same-fixture NPU-requested inference](xelite/inference_submission.json) was submitted using dataset `d26qo8p57` and remained pending. Compilation alone does not establish numerical fidelity or actual NPU placement on X Elite.
|
||||
The same source model also [compiled to FP16 QNN DLC on Snapdragon X Elite CRD](xelite/compile_report.json), producing target `mmxj0w8kq` for Windows ARM. [Same-fixture NPU-requested inference](xelite/inference_report.json) on dataset `d26qo8p57` returned a finite FP32 `[6,16,32,32]` latent. Its [audit](xelite/audit_report.json) measured **0.0608% relative L2 / 64.32 dB SNR** versus the pinned source pattern, with cosine 0.999999815. This is one synthetic component inference; the [NPU placement profile](xelite/profile_submission.json) has been submitted and remains pending. Neither inference request nor QNN artifact alone establishes actual NPU node assignment, action quality or a complete device-local policy.
|
||||
|
||||
The same source also [compiled to FP16 QNN DLC on SA8775P ADP](sa8775p/compile_report.json), producing target mn750wz8m for Android. [Same-fixture NPU-requested inference](sa8775p/inference_submission.json) was submitted using dataset d26qo8p57; numerical and placement outcomes remain pending.
|
||||
|
||||
The [generic collector](../../../../experiments/collect_aihub_component.py) preserves terminal jobs, and the [Cosmos auditor](../../../../experiments/audit_internvla_cosmos_qualcomm.py) checks source/fixture hashes, target/device/dataset identity, latent shape and finite numerical difference against the pinned source reference. A separate [synthetic action sensitivity check](s25/action_sensitivity.json) injected either the pinned source or S25 latent into the same real Place_Markpen policy on **local CPU**, with zero state/noise. The [reproducer](../../../../experiments/probe_internvla_hosted_latent_actions.py) returned finite `[1,50,32]` actions; hosted-vs-source action relative L2 was **0.742%**, maximum absolute difference **0.0115**, cosine **0.999973**. Repeating the source policy gave bitwise identical actions. This is a cross-device numerical handoff experiment, not a device-local policy or robot-task pass; no real-observation action tolerance is known.
|
||||
|
||||
Next: inspect X Elite same-fixture output and SA8775P same-fixture output, test representative real observations and action tolerances, then build and validate a device-local stateful policy. Full multimodal observation processing, admission, cancellation and sustained profiling remain open.
|
||||
Next: audit X Elite placement and SA8775P same-fixture output, test representative real observations and action tolerances, then build and validate a device-local stateful policy. Full multimodal observation processing, admission, cancellation and sustained profiling remain open.
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"scope": "one six-frame Cosmos image encoder on synthetic pattern; no complete InternVLA policy",
|
||||
"status": "component_inference_numeric_measured",
|
||||
"device": {
|
||||
"name": "Snapdragon X Elite CRD",
|
||||
"os": "11",
|
||||
"attributes": [
|
||||
"os:windows",
|
||||
"format:compute",
|
||||
"framework:onnx",
|
||||
"vendor:qualcomm",
|
||||
"abi:aarch64-windows",
|
||||
"chipset:qualcomm-snapdragon-x-elite",
|
||||
"chipset:sc8380xp",
|
||||
"hexagon:v73",
|
||||
"soc-model:60",
|
||||
"htp-supports-fp16:true",
|
||||
"htp-supports-weight-sharing:true",
|
||||
"framework:qnn"
|
||||
]
|
||||
},
|
||||
"source_model_id": "mn4okj3rq",
|
||||
"target_model_id": "mmxj0w8kq",
|
||||
"compile_job_id": "j5687wv7g",
|
||||
"inference_job_id": "jgjr7qo8p",
|
||||
"input_dataset_id": "d26qo8p57",
|
||||
"requested_run_options": "--compute_unit npu",
|
||||
"files": {
|
||||
"source_onnx": {
|
||||
"bytes": 125112088,
|
||||
"sha256": "656a5263f584851a1457ef6dcf60b995f7c67b056b3c90a4f33c814f7caf9ec9"
|
||||
},
|
||||
"fixture": {
|
||||
"bytes": 2081321,
|
||||
"sha256": "dcbaf1391ca914d4bbccc1cb384daf05666e771d9cdae90c4f069ec8fcf05368"
|
||||
},
|
||||
"device_output": {
|
||||
"bytes": 185597,
|
||||
"sha256": "fcdb47873e7e7a7cfb9f97e6e939240925bb82f64043e91e4075606426f2dd2c"
|
||||
}
|
||||
},
|
||||
"output_dtype": "float32",
|
||||
"source_vs_device": {
|
||||
"relative_l2": 0.000607797573531508,
|
||||
"snr_db": 64.32482076113271,
|
||||
"max_abs_error": 0.011388778686523438,
|
||||
"cosine": 0.9999998154244688
|
||||
},
|
||||
"limits": [
|
||||
"The fixture is synthetic; no real-observation or action-quality tolerance is established.",
|
||||
"The action policy, state lifecycle, admission and complete request were not run on this device.",
|
||||
"Requested NPU is not actual per-node placement without a device profile."
|
||||
]
|
||||
}
|
||||
BIN
Binary file not shown.
+32
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"timestamp_utc": "2026-09-24T01:05:28.686094+00:00",
|
||||
"qai_hub_version": "0.55.0",
|
||||
"facility": "Qualcomm AI Hub Workbench",
|
||||
"job_id": "jgjr7qo8p",
|
||||
"url": "https://workbench.aihub.qualcomm.com/jobs/jgjr7qo8p/",
|
||||
"status": "SUCCESS",
|
||||
"status_message": "",
|
||||
"options": "--compute_unit npu",
|
||||
"hub_version": "aihub-2026.09.11.0",
|
||||
"device": {
|
||||
"name": "Snapdragon X Elite CRD",
|
||||
"os": "11",
|
||||
"attributes": [
|
||||
"os:windows",
|
||||
"format:compute",
|
||||
"framework:onnx",
|
||||
"vendor:qualcomm",
|
||||
"abi:aarch64-windows",
|
||||
"chipset:qualcomm-snapdragon-x-elite",
|
||||
"chipset:sc8380xp",
|
||||
"hexagon:v73",
|
||||
"soc-model:60",
|
||||
"htp-supports-fp16:true",
|
||||
"htp-supports-weight-sharing:true",
|
||||
"framework:qnn"
|
||||
]
|
||||
},
|
||||
"model_id": "mmxj0w8kq",
|
||||
"input_dataset_id": "d26qo8p57",
|
||||
"outputs": "device_output.npz"
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"timestamp_utc": "2026-09-24T01:05:57.291513+00:00",
|
||||
"facility": "Qualcomm AI Hub Workbench",
|
||||
"qai_hub_version": "0.55.0",
|
||||
"source_compile_job_id": "j5687wv7g",
|
||||
"target_model_id": "mmxj0w8kq",
|
||||
"device": "Snapdragon X Elite CRD",
|
||||
"options": "--compute_unit npu",
|
||||
"kind": "profile",
|
||||
"status": "SUBMITTED",
|
||||
"job_id": "j5wl77r6p",
|
||||
"url": "https://workbench.aihub.qualcomm.com/jobs/j5wl77r6p/"
|
||||
}
|
||||
+1
-1
@@ -6,6 +6,6 @@ The [S25 historical inference](s25/inference_report.json) used dataset `d7gwxe3y
|
||||
|
||||
The historical [S24](s24/compile_report.json) and [S25](s25/compile_report.json) FP16 QNN context-binary compiles and inference jobs succeeded. Against the **same original ONNX CPU fixture**, [S24](s24/audit_report.json) logits relative L2 was **0.3459%** and max K/V relative L2 **1.235%**; [S25](s25/audit_report.json) logits relative L2 was **0.3605%** and max K/V relative L2 **1.311%**. Both preserved the CPU top-1 speech token **1867** on this one synthetic step. The raw [S24](s24/device_output.npz) and [S25](s25/device_output.npz) arrays are retained. The [S24](s24/profile_report.json) and [S25](s25/profile_report.json) profiles each returned 100 fixed-cache 20-layer component samples, with nearest-rank p50/p95 **8.537/9.006 ms** and **7.197/7.615 ms**, respectively. All **1,029 execution-detail rows** in each profile were attributed to NPU. The service estimated-time fields were the sample minima (8.211/7.125 ms), not medians. Reported inference peak memory was 165,433,344/185,991,168 bytes. The [S24](s24/audit_report.json) and [S25](s25/audit_report.json) audits now bind numerical outputs and placement to the exact target/device; generated-audio quality and complete model state remain unverified.
|
||||
|
||||
New FP16 QNN DLC [SA8775P](sa8775p/compile_report.json), [Snapdragon X Elite](xelite/compile_report.json) and [RB3 Gen 2](rb3/compile_report.json) compiles passed from the same source. The SA8775P [NPU-requested inference](sa8775p/inference_report.json) returned all 41 finite tensors on the retained fixture. Its [audit](sa8775p/audit_report.json) found **0.3568% logits relative L2** versus ONNX CPU, preserved CPU top-1 speech token **1867**, and measured maximum K/V relative L2 **1.225%**. The [placement profile](sa8775p/profile_submission.json) was submitted and remains pending; the inference request alone does not prove actual NPU node assignment. The X Elite [NPU-requested inference](xelite/inference_report.json) also returned all 41 finite tensors: its [audit](xelite/audit_report.json) found **0.3170% logits relative L2**, preserved CPU top-1 token **1867**, and measured maximum K/V relative L2 **1.221%**. Its [placement profile](xelite/profile_submission.json) was submitted and remains pending. The exact RB3 [FP16 QNN DLC inference](rb3/inference_report.json) **failed** while loading the graph with QnnModel_composeGraphsFromDlc: MODEL_GRAPH_ERROR, despite a successful compile. RB3 does not advertise FP16 HTP support in the device attributes; this failure constrains the tested artifact, not every RB3 path. An explicit [TFLite CPU fallback compile](rb3/cpu_fallback/compile_report.json) succeeded, producing target mnwv5d7wq; [same-fixture CPU-requested inference](rb3/cpu_fallback/inference_submission.json) is pending. The [collector](../../../../experiments/collect_aihub_component.py) retrieves terminal jobs, and the [auditor](../../../../experiments/audit_minicpmo_tts_qualcomm.py) pins hashes and checks all 41 output tensors.
|
||||
New FP16 QNN DLC [SA8775P](sa8775p/compile_report.json), [Snapdragon X Elite](xelite/compile_report.json) and [RB3 Gen 2](rb3/compile_report.json) compiles passed from the same source. The SA8775P [NPU-requested inference](sa8775p/inference_report.json) returned all 41 finite tensors on the retained fixture. Its [audit](sa8775p/audit_report.json) found **0.3568% logits relative L2** versus ONNX CPU, preserved CPU top-1 speech token **1867**, and measured maximum K/V relative L2 **1.225%**. The [SA8775P placement profile](sa8775p/profile_report.json) returned 100 component samples with nearest-rank p50/p95 **11.901/13.038 ms**; all **944 execution-detail rows** were attributed to NPU. The 11.627 ms estimated-time field is the sample minimum, not median. Reported inference peak memory was 134,696,960 bytes and first-load peak 1,322,835,968 bytes, neither a whole-model co-residency measurement. The X Elite [NPU-requested inference](xelite/inference_report.json) also returned all 41 finite tensors: its [audit](xelite/audit_report.json) found **0.3170% logits relative L2**, preserved CPU top-1 token **1867**, and measured maximum K/V relative L2 **1.221%**. Its [placement profile](xelite/profile_report.json) returned 100 component samples with nearest-rank p50/p95 **9.905/11.037 ms**; all **944 execution-detail rows** were attributed to NPU. The 9.106 ms estimated-time field is the sample minimum. Reported inference peak memory was 79,208,448 bytes and first-load peak 1,081,573,376 bytes. The exact RB3 [FP16 QNN DLC inference](rb3/inference_report.json) **failed** while loading the graph with QnnModel_composeGraphsFromDlc: MODEL_GRAPH_ERROR, despite a successful compile. RB3 does not advertise FP16 HTP support in the device attributes; this failure constrains the tested artifact, not every RB3 path. An explicit [TFLite CPU fallback compile](rb3/cpu_fallback/compile_report.json) succeeded, producing target mnwv5d7wq; [same-fixture CPU-requested inference](rb3/cpu_fallback/inference_report.json) returned 41 finite tensors, preserved CPU top-1 token **1867**, and had logits relative L2 **1.26e-6** and maximum K/V relative L2 **1.58e-6** versus the original ONNX CPU fixture. This establishes a numerical CPU fallback component, but actual per-node CPU placement and timing await its [submitted profile](rb3/cpu_fallback/profile_submission.json). The [collector](../../../../experiments/collect_aihub_component.py) retrieves terminal jobs, and the [auditor](../../../../experiments/audit_minicpmo_tts_qualcomm.py) pins hashes and checks all 41 output tensors.
|
||||
|
||||
Next: audit those device outputs and placement, then qualify the entire model with real multimodal inputs, stateful speech generation, task/audio quality, memory admission, cancellation and sustained power/thermal behavior. AI Hub is the test facility, not a deployment dependency.
|
||||
+304
@@ -0,0 +1,304 @@
|
||||
{
|
||||
"scope": "one fixed-cache 20-layer MiniCPM-o speech-head decode step; no complete multimodal stream",
|
||||
"status": "component_inference_numeric_measured",
|
||||
"device": {
|
||||
"name": "Dragonwing RB3 Gen 2 Vision Kit",
|
||||
"os": "1.6",
|
||||
"attributes": [
|
||||
"os:qc_linux",
|
||||
"framework:tflite",
|
||||
"framework:onnx",
|
||||
"vendor:qualcomm",
|
||||
"abi:aarch64-oe-linux-gcc11",
|
||||
"format:iot",
|
||||
"chipset:qualcomm-qcs6490",
|
||||
"chipset:qcs6490",
|
||||
"chipset:qualcomm-dragonwing-qcs6490",
|
||||
"hexagon:v68",
|
||||
"soc-model:93",
|
||||
"framework:qnn"
|
||||
]
|
||||
},
|
||||
"compile_job_id": "j5m0m8oqg",
|
||||
"inference_job_id": "jp4y13yvp",
|
||||
"source_model_id": "mn4gjjpvn",
|
||||
"target_model_id": "mnwv5d7wq",
|
||||
"input_dataset_id": "d7gwxe3y2",
|
||||
"requested_run_options": "--compute_unit cpu",
|
||||
"files": {
|
||||
"source_onnx": {
|
||||
"bytes": 776341465,
|
||||
"sha256": "78cf64804f11ad269ee4180da61588ccc5eefe2942773227345499756e4cc229"
|
||||
},
|
||||
"fixture": {
|
||||
"bytes": 29247541,
|
||||
"sha256": "65919ea1f351feec33c1415a3e3db76d60bc9c2beb3d49a72af75dcb418e83b4"
|
||||
},
|
||||
"cpu_reference": {
|
||||
"bytes": 148471,
|
||||
"sha256": "902adcceadbe761d938ef2ade51cf953c8917ea1abfaee33a10c84e300c1bd96"
|
||||
},
|
||||
"device_output": {
|
||||
"bytes": 148830,
|
||||
"sha256": "6e59e712360538f365d8f644db5a4665dd6fb8e3306080ad52a49d2914244817"
|
||||
}
|
||||
},
|
||||
"tensor_comparison": {
|
||||
"logits": {
|
||||
"relative_l2": 1.2608308097078431e-06,
|
||||
"max_abs_error": 5.602836608886719e-06,
|
||||
"source_rms": 1.4974441755558239,
|
||||
"device_rms": 1.4974440267376095,
|
||||
"cpu_top1": 1867,
|
||||
"device_top1": 1867,
|
||||
"top1_matches": true
|
||||
},
|
||||
"k_new_0": {
|
||||
"relative_l2": 3.8538733766179236e-07,
|
||||
"max_abs_error": 2.1457672119140625e-06,
|
||||
"source_rms": 1.307108108274551,
|
||||
"device_rms": 1.3071081048758664
|
||||
},
|
||||
"v_new_0": {
|
||||
"relative_l2": 3.895124595579271e-07,
|
||||
"max_abs_error": 9.5367431640625e-07,
|
||||
"source_rms": 0.5083994128636046,
|
||||
"device_rms": 0.5083993975328956
|
||||
},
|
||||
"k_new_1": {
|
||||
"relative_l2": 4.1300459754745164e-07,
|
||||
"max_abs_error": 1.430511474609375e-06,
|
||||
"source_rms": 0.7542700462780494,
|
||||
"device_rms": 0.7542700258045139
|
||||
},
|
||||
"v_new_1": {
|
||||
"relative_l2": 8.153512326688556e-07,
|
||||
"max_abs_error": 2.682209014892578e-07,
|
||||
"source_rms": 0.0662130257652199,
|
||||
"device_rms": 0.06621301766321465
|
||||
},
|
||||
"k_new_2": {
|
||||
"relative_l2": 4.857719512779795e-07,
|
||||
"max_abs_error": 1.7881393432617188e-06,
|
||||
"source_rms": 0.9817805619626084,
|
||||
"device_rms": 0.9817803971851566
|
||||
},
|
||||
"v_new_2": {
|
||||
"relative_l2": 5.989069255958357e-07,
|
||||
"max_abs_error": 7.152557373046875e-07,
|
||||
"source_rms": 0.24438175712240315,
|
||||
"device_rms": 0.2443817414751531
|
||||
},
|
||||
"k_new_3": {
|
||||
"relative_l2": 7.521556310008799e-07,
|
||||
"max_abs_error": 2.3543834686279297e-06,
|
||||
"source_rms": 0.9312003114105484,
|
||||
"device_rms": 0.9312003061136166
|
||||
},
|
||||
"v_new_3": {
|
||||
"relative_l2": 1.1011019562809899e-06,
|
||||
"max_abs_error": 1.1324882507324219e-06,
|
||||
"source_rms": 0.27179250329538757,
|
||||
"device_rms": 0.2717924718985395
|
||||
},
|
||||
"k_new_4": {
|
||||
"relative_l2": 9.859281133692208e-07,
|
||||
"max_abs_error": 5.245208740234375e-06,
|
||||
"source_rms": 1.2078244698126999,
|
||||
"device_rms": 1.2078245713280698
|
||||
},
|
||||
"v_new_4": {
|
||||
"relative_l2": 1.3362949310949447e-06,
|
||||
"max_abs_error": 2.1383166313171387e-06,
|
||||
"source_rms": 0.4929021962159226,
|
||||
"device_rms": 0.4929023085768408
|
||||
},
|
||||
"k_new_5": {
|
||||
"relative_l2": 9.568224749059018e-07,
|
||||
"max_abs_error": 3.5762786865234375e-06,
|
||||
"source_rms": 1.0960093751879882,
|
||||
"device_rms": 1.0960092894814812
|
||||
},
|
||||
"v_new_5": {
|
||||
"relative_l2": 1.4794337790547067e-06,
|
||||
"max_abs_error": 2.6226043701171875e-06,
|
||||
"source_rms": 0.49114616760529134,
|
||||
"device_rms": 0.4911459935060497
|
||||
},
|
||||
"k_new_6": {
|
||||
"relative_l2": 1.0115936495050749e-06,
|
||||
"max_abs_error": 3.814697265625e-06,
|
||||
"source_rms": 1.1726536779527166,
|
||||
"device_rms": 1.1726535388667942
|
||||
},
|
||||
"v_new_6": {
|
||||
"relative_l2": 1.424070330543342e-06,
|
||||
"max_abs_error": 2.9355287551879883e-06,
|
||||
"source_rms": 0.5369044199454948,
|
||||
"device_rms": 0.5369043692829104
|
||||
},
|
||||
"k_new_7": {
|
||||
"relative_l2": 7.019303916340423e-07,
|
||||
"max_abs_error": 5.7220458984375e-06,
|
||||
"source_rms": 1.6917150856043028,
|
||||
"device_rms": 1.6917152112253437
|
||||
},
|
||||
"v_new_7": {
|
||||
"relative_l2": 1.305571619430678e-06,
|
||||
"max_abs_error": 3.4570693969726562e-06,
|
||||
"source_rms": 0.8116460286615261,
|
||||
"device_rms": 0.8116457569570664
|
||||
},
|
||||
"k_new_8": {
|
||||
"relative_l2": 1.1209001723781906e-06,
|
||||
"max_abs_error": 1.1235475540161133e-05,
|
||||
"source_rms": 1.5021910590457033,
|
||||
"device_rms": 1.502190643355427
|
||||
},
|
||||
"v_new_8": {
|
||||
"relative_l2": 1.2774921859133914e-06,
|
||||
"max_abs_error": 4.306435585021973e-06,
|
||||
"source_rms": 0.8807572129778053,
|
||||
"device_rms": 0.8807570805085078
|
||||
},
|
||||
"k_new_9": {
|
||||
"relative_l2": 1.0251590701580929e-06,
|
||||
"max_abs_error": 4.5299530029296875e-06,
|
||||
"source_rms": 1.1054146201792987,
|
||||
"device_rms": 1.1054144973174287
|
||||
},
|
||||
"v_new_9": {
|
||||
"relative_l2": 1.4542928618890708e-06,
|
||||
"max_abs_error": 3.2186508178710938e-06,
|
||||
"source_rms": 0.6580213796976341,
|
||||
"device_rms": 0.6580212838481858
|
||||
},
|
||||
"k_new_10": {
|
||||
"relative_l2": 1.1343300930722783e-06,
|
||||
"max_abs_error": 6.318092346191406e-06,
|
||||
"source_rms": 1.325937063058518,
|
||||
"device_rms": 1.325936657417619
|
||||
},
|
||||
"v_new_10": {
|
||||
"relative_l2": 1.4359002517322691e-06,
|
||||
"max_abs_error": 5.602836608886719e-06,
|
||||
"source_rms": 0.848351970479369,
|
||||
"device_rms": 0.8483519254365826
|
||||
},
|
||||
"k_new_11": {
|
||||
"relative_l2": 1.088270609687385e-06,
|
||||
"max_abs_error": 2.816319465637207e-06,
|
||||
"source_rms": 0.6808336872062942,
|
||||
"device_rms": 0.6808336285670308
|
||||
},
|
||||
"v_new_11": {
|
||||
"relative_l2": 1.400578229706267e-06,
|
||||
"max_abs_error": 1.817941665649414e-06,
|
||||
"source_rms": 0.3676426367961426,
|
||||
"device_rms": 0.3676427050213373
|
||||
},
|
||||
"k_new_12": {
|
||||
"relative_l2": 1.229180107682796e-06,
|
||||
"max_abs_error": 2.86102294921875e-06,
|
||||
"source_rms": 0.6128882051701765,
|
||||
"device_rms": 0.6128880740748357
|
||||
},
|
||||
"v_new_12": {
|
||||
"relative_l2": 1.5147691274130571e-06,
|
||||
"max_abs_error": 1.8477439880371094e-06,
|
||||
"source_rms": 0.34029547623567724,
|
||||
"device_rms": 0.3402954577865017
|
||||
},
|
||||
"k_new_13": {
|
||||
"relative_l2": 1.1913923226215808e-06,
|
||||
"max_abs_error": 2.9802322387695312e-06,
|
||||
"source_rms": 0.613775761616868,
|
||||
"device_rms": 0.6137757210955133
|
||||
},
|
||||
"v_new_13": {
|
||||
"relative_l2": 1.4123793537069203e-06,
|
||||
"max_abs_error": 1.817941665649414e-06,
|
||||
"source_rms": 0.36907442918730654,
|
||||
"device_rms": 0.36907446629039636
|
||||
},
|
||||
"k_new_14": {
|
||||
"relative_l2": 1.1866826369109e-06,
|
||||
"max_abs_error": 2.86102294921875e-06,
|
||||
"source_rms": 0.5980841827735426,
|
||||
"device_rms": 0.5980842760689439
|
||||
},
|
||||
"v_new_14": {
|
||||
"relative_l2": 1.5779605078921548e-06,
|
||||
"max_abs_error": 1.952052116394043e-06,
|
||||
"source_rms": 0.3506656009170703,
|
||||
"device_rms": 0.3506657314396642
|
||||
},
|
||||
"k_new_15": {
|
||||
"relative_l2": 1.0909023862656344e-06,
|
||||
"max_abs_error": 2.291053533554077e-06,
|
||||
"source_rms": 0.622821559168189,
|
||||
"device_rms": 0.6228216239368355
|
||||
},
|
||||
"v_new_15": {
|
||||
"relative_l2": 1.4523069889165724e-06,
|
||||
"max_abs_error": 1.817941665649414e-06,
|
||||
"source_rms": 0.41823950764909973,
|
||||
"device_rms": 0.4182395657185662
|
||||
},
|
||||
"k_new_16": {
|
||||
"relative_l2": 9.934089962025558e-07,
|
||||
"max_abs_error": 2.6226043701171875e-06,
|
||||
"source_rms": 0.6754924715823191,
|
||||
"device_rms": 0.6754925853729264
|
||||
},
|
||||
"v_new_16": {
|
||||
"relative_l2": 1.4826390971626702e-06,
|
||||
"max_abs_error": 2.7120113372802734e-06,
|
||||
"source_rms": 0.4659773620123202,
|
||||
"device_rms": 0.46597746410270807
|
||||
},
|
||||
"k_new_17": {
|
||||
"relative_l2": 1.0476882519132694e-06,
|
||||
"max_abs_error": 2.5033950805664062e-06,
|
||||
"source_rms": 0.6354120615871959,
|
||||
"device_rms": 0.6354120338796911
|
||||
},
|
||||
"v_new_17": {
|
||||
"relative_l2": 1.488317657098197e-06,
|
||||
"max_abs_error": 3.0994415283203125e-06,
|
||||
"source_rms": 0.5384818316759848,
|
||||
"device_rms": 0.5384818915083839
|
||||
},
|
||||
"k_new_18": {
|
||||
"relative_l2": 8.831714569653561e-07,
|
||||
"max_abs_error": 2.7120113372802734e-06,
|
||||
"source_rms": 0.7283659936841244,
|
||||
"device_rms": 0.7283659305154137
|
||||
},
|
||||
"v_new_18": {
|
||||
"relative_l2": 1.1395083974572361e-06,
|
||||
"max_abs_error": 2.6710331439971924e-06,
|
||||
"source_rms": 0.6382820941879574,
|
||||
"device_rms": 0.6382820630284731
|
||||
},
|
||||
"k_new_19": {
|
||||
"relative_l2": 1.0622656686646233e-06,
|
||||
"max_abs_error": 2.3990869522094727e-06,
|
||||
"source_rms": 0.5790109825658509,
|
||||
"device_rms": 0.5790108298107847
|
||||
},
|
||||
"v_new_19": {
|
||||
"relative_l2": 1.1547228953349995e-06,
|
||||
"max_abs_error": 3.159046173095703e-06,
|
||||
"source_rms": 0.7220926350353908,
|
||||
"device_rms": 0.7220926033848266
|
||||
}
|
||||
},
|
||||
"cache_max_relative_l2": 1.5779605078921548e-06,
|
||||
"limits": [
|
||||
"The historical ONNX export does not attest the exact source checkpoint revision.",
|
||||
"One retained decode fixture cannot establish speech-token or generated-audio quality.",
|
||||
"Thinker, audio/vision encoders, vocoder, state loop and complete Omni request were not tested.",
|
||||
"Actual CPU/NPU placement requires a device profile; a request or compiled artifact alone is insufficient."
|
||||
]
|
||||
}
|
||||
BIN
Binary file not shown.
+32
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"timestamp_utc": "2026-09-24T01:10:50.112861+00:00",
|
||||
"qai_hub_version": "0.55.0",
|
||||
"facility": "Qualcomm AI Hub Workbench",
|
||||
"job_id": "jp4y13yvp",
|
||||
"url": "https://workbench.aihub.qualcomm.com/jobs/jp4y13yvp/",
|
||||
"status": "SUCCESS",
|
||||
"status_message": "",
|
||||
"options": "--compute_unit cpu",
|
||||
"hub_version": "aihub-2026.09.11.0",
|
||||
"device": {
|
||||
"name": "Dragonwing RB3 Gen 2 Vision Kit",
|
||||
"os": "1.6",
|
||||
"attributes": [
|
||||
"os:qc_linux",
|
||||
"framework:tflite",
|
||||
"framework:onnx",
|
||||
"vendor:qualcomm",
|
||||
"abi:aarch64-oe-linux-gcc11",
|
||||
"format:iot",
|
||||
"chipset:qualcomm-qcs6490",
|
||||
"chipset:qcs6490",
|
||||
"chipset:qualcomm-dragonwing-qcs6490",
|
||||
"hexagon:v68",
|
||||
"soc-model:93",
|
||||
"framework:qnn"
|
||||
]
|
||||
},
|
||||
"model_id": "mnwv5d7wq",
|
||||
"input_dataset_id": "d7gwxe3y2",
|
||||
"outputs": "device_output.npz"
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"timestamp_utc": "2026-09-24T01:11:07.094665+00:00",
|
||||
"facility": "Qualcomm AI Hub Workbench",
|
||||
"qai_hub_version": "0.55.0",
|
||||
"source_compile_job_id": "j5m0m8oqg",
|
||||
"target_model_id": "mnwv5d7wq",
|
||||
"device": "Dragonwing RB3 Gen 2 Vision Kit",
|
||||
"options": "--compute_unit cpu",
|
||||
"kind": "profile",
|
||||
"status": "SUBMITTED",
|
||||
"job_id": "jprl00r0p",
|
||||
"url": "https://workbench.aihub.qualcomm.com/jobs/jprl00r0p/"
|
||||
}
|
||||
+16
-3
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"scope": "one fixed-cache 20-layer MiniCPM-o speech-head decode step; no complete multimodal stream",
|
||||
"status": "component_inference_numeric_measured",
|
||||
"status": "component_inference_numeric_and_placement_measured",
|
||||
"device": {
|
||||
"name": "SA8775P ADP",
|
||||
"os": "14",
|
||||
@@ -298,7 +298,20 @@
|
||||
"limits": [
|
||||
"The historical ONNX export does not attest the exact source checkpoint revision.",
|
||||
"One retained decode fixture cannot establish speech-token or generated-audio quality.",
|
||||
"Actual NPU placement requires a device profile; a request or QNN artifact alone is insufficient.",
|
||||
"Thinker, audio/vision encoders, vocoder, state loop and complete Omni request were not tested."
|
||||
]
|
||||
],
|
||||
"profile": {
|
||||
"job_id": "jpvld7w75",
|
||||
"sample_count": 100,
|
||||
"sample_min_us": 11627,
|
||||
"nearest_rank_p50_us": 11901,
|
||||
"nearest_rank_p95_us": 13038,
|
||||
"reported_estimated_inference_time_us": 11627,
|
||||
"reported_peak_memory_bytes": 134696960,
|
||||
"reported_first_load_time_us": 25254479,
|
||||
"reported_first_load_peak_memory_bytes": 1322835968,
|
||||
"compute_unit_row_counts": {
|
||||
"NPU": 944
|
||||
}
|
||||
}
|
||||
}
|
||||
+7190
File diff suppressed because it is too large.
Load diff
+16
-3
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"scope": "one fixed-cache 20-layer MiniCPM-o speech-head decode step; no complete multimodal stream",
|
||||
"status": "component_inference_numeric_measured",
|
||||
"status": "component_inference_numeric_and_placement_measured",
|
||||
"device": {
|
||||
"name": "Snapdragon X Elite CRD",
|
||||
"os": "11",
|
||||
@@ -298,7 +298,20 @@
|
||||
"limits": [
|
||||
"The historical ONNX export does not attest the exact source checkpoint revision.",
|
||||
"One retained decode fixture cannot establish speech-token or generated-audio quality.",
|
||||
"Actual NPU placement requires a device profile; a request or QNN artifact alone is insufficient.",
|
||||
"Thinker, audio/vision encoders, vocoder, state loop and complete Omni request were not tested."
|
||||
]
|
||||
],
|
||||
"profile": {
|
||||
"job_id": "jp1nj6qkg",
|
||||
"sample_count": 100,
|
||||
"sample_min_us": 9106,
|
||||
"nearest_rank_p50_us": 9905,
|
||||
"nearest_rank_p95_us": 11037,
|
||||
"reported_estimated_inference_time_us": 9106,
|
||||
"reported_peak_memory_bytes": 79208448,
|
||||
"reported_first_load_time_us": 14846322,
|
||||
"reported_first_load_peak_memory_bytes": 1081573376,
|
||||
"compute_unit_row_counts": {
|
||||
"NPU": 944
|
||||
}
|
||||
}
|
||||
}
|
||||
+7190
File diff suppressed because it is too large.
Load diff
+18
@@ -0,0 +1,18 @@
|
||||
# Qwen3-TTS native Windows sustained playback drift
|
||||
|
||||
The pinned Qwen3-TTS 0.6B CustomVoice CUDA profiles were complete-model `AsyncOmni` streams on an HX370 laptop with an RTX 5090 Laptop GPU. The [original native Windows report](../../../e2e_profiling_20260922/evidence/tts-cuda-windows/report.json) and [raw request events](../../../e2e_profiling_20260922/evidence/tts-cuda-windows/requests.jsonl) contain a 30-minute serial medium-prompt run. The corresponding [WSL report](../../../e2e_profiling_20260922/evidence/tts-cuda-wsl/report.json) and [raw events](../../../e2e_profiling_20260922/evidence/tts-cuda-wsl/requests.jsonl) provide a separate OS run on the same laptop. These were not concurrent or controlled for starting temperature, clocks, power policy or background load.
|
||||
|
||||
The reproducible [analysis script](../../../../experiments/analyze_tts_sustained.py) takes each run's first sustained submission as minute zero, divides submitted requests into fixed time windows, and computes nearest-rank p50/p95 from the raw `rtf_total` and `total_wall_s` fields. It counts requests with any recorded simulated playback underrun when starting at first audio arrival. The additional prebuffer is the minimum delay after first audio arrival that would avoid underruns in each recorded chunk sequence; this is a simulation, not a sound-device test. [Machine-readable results](analysis.json) retain exact values.
|
||||
|
||||
| OS / sustained minutes | Requests | RTF p50 / p95 | Complete wall p50 / p95 (s) | Requests with underrun | Required prebuffer p95 / max (ms) |
|
||||
|---|---:|---:|---:|---:|---:|
|
||||
| Windows 0–25 | 1,013 | 0.185 / 0.204 | 1.478 / 1.683 | 74 | 27 / 170 |
|
||||
| Windows 25–27 | 57 | 0.188 / 1.356 | 1.487 / 10.183 | 7 | 4,050 / 4,346 |
|
||||
| Windows 27–30 | 17 | 1.331 / 1.380 | 10.379 / 12.034 | 17 | 4,650 / 4,650 |
|
||||
| WSL 0–25 | 1,061 | 0.178 / 0.184 | 1.404 / 1.608 | 0 | 0 / 0 |
|
||||
| WSL 25–27 | 82 | 0.180 / 0.184 | 1.455 / 1.636 | 0 | 0 / 0 |
|
||||
| WSL 27–30 | 126 | 0.179 / 0.184 | 1.411 / 1.610 | 0 | 0 / 0 |
|
||||
|
||||
The Windows stream changed regime around minute 26–27. In its last window, all 17 requests had RTF above real time at the median and an underrun at first-audio playback. A small jitter buffer cannot cure this late sustained throughput deficit. The recorded profile sampled memory but not a timestamped GPU clock, temperature, power or throttling timeline, so its cause is unknown. The updated [local TTS profiler](../../../../profile_local_tts.py) can sample NVML and host telemetry with `--gpu-telemetry-interval-s 1`; repeat the Windows run with that option and correlate the device-wide samples with request timestamps. GPU telemetry is whole-device and cannot attribute power or utilization to the model alone.
|
||||
|
||||
This evidence does not qualify uninterrupted native Windows playback, speech quality, restart after cancellation, or mobile/embedded TTS. It does not establish thermal throttling or an Omni software regression as the cause.
|
||||
+107
@@ -0,0 +1,107 @@
|
||||
{
|
||||
"method": "Non-overlapping windows from each run's first sustained submission; nearest-rank percentiles; prebuffer is minimum added delay after first audio arrival to avoid all simulated underruns",
|
||||
"runs": [
|
||||
{
|
||||
"source": "benchmarks/edge_harness/results/e2e_profiling_20260922/evidence/tts-cuda-windows/requests.jsonl",
|
||||
"sustained_count": 1087,
|
||||
"windows": [
|
||||
{
|
||||
"minutes": [
|
||||
0,
|
||||
25
|
||||
],
|
||||
"requests": 1013,
|
||||
"rtf_p50": 0.1851554088801511,
|
||||
"rtf_p95": 0.2040304081563182,
|
||||
"wall_s_p50": 1.4779308000579476,
|
||||
"wall_s_p95": 1.6830153999617323,
|
||||
"requests_with_underrun_at_ttfa": 74,
|
||||
"required_prebuffer_ms_p50": 0.0,
|
||||
"required_prebuffer_ms_p95": 27.297799973748624,
|
||||
"required_prebuffer_ms_max": 170.25149995926768
|
||||
},
|
||||
{
|
||||
"minutes": [
|
||||
25,
|
||||
27
|
||||
],
|
||||
"requests": 57,
|
||||
"rtf_p50": 0.18812342783611402,
|
||||
"rtf_p95": 1.3556594624969875,
|
||||
"wall_s_p50": 1.487306399969384,
|
||||
"wall_s_p95": 10.18252599996049,
|
||||
"requests_with_underrun_at_ttfa": 7,
|
||||
"required_prebuffer_ms_p50": 0.0,
|
||||
"required_prebuffer_ms_p95": 4050.0047999899834,
|
||||
"required_prebuffer_ms_max": 4345.90249999892
|
||||
},
|
||||
{
|
||||
"minutes": [
|
||||
27,
|
||||
30
|
||||
],
|
||||
"requests": 17,
|
||||
"rtf_p50": 1.3311034973470515,
|
||||
"rtf_p95": 1.379991387611964,
|
||||
"wall_s_p50": 10.378701200010255,
|
||||
"wall_s_p95": 12.033524899976328,
|
||||
"requests_with_underrun_at_ttfa": 17,
|
||||
"required_prebuffer_ms_p50": 3908.2718999357894,
|
||||
"required_prebuffer_ms_p95": 4650.390599993989,
|
||||
"required_prebuffer_ms_max": 4650.390599993989
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"source": "benchmarks/edge_harness/results/e2e_profiling_20260922/evidence/tts-cuda-wsl/requests.jsonl",
|
||||
"sustained_count": 1269,
|
||||
"windows": [
|
||||
{
|
||||
"minutes": [
|
||||
0,
|
||||
25
|
||||
],
|
||||
"requests": 1061,
|
||||
"rtf_p50": 0.1779203138689659,
|
||||
"rtf_p95": 0.1839314488974838,
|
||||
"wall_s_p50": 1.4043696869630367,
|
||||
"wall_s_p95": 1.6077310189721175,
|
||||
"requests_with_underrun_at_ttfa": 0,
|
||||
"required_prebuffer_ms_p50": 0.0,
|
||||
"required_prebuffer_ms_p95": 0.0,
|
||||
"required_prebuffer_ms_max": 0.0
|
||||
},
|
||||
{
|
||||
"minutes": [
|
||||
25,
|
||||
27
|
||||
],
|
||||
"requests": 82,
|
||||
"rtf_p50": 0.17973470421183219,
|
||||
"rtf_p95": 0.18352530104392725,
|
||||
"wall_s_p50": 1.4546086909831502,
|
||||
"wall_s_p95": 1.6364136100164615,
|
||||
"requests_with_underrun_at_ttfa": 0,
|
||||
"required_prebuffer_ms_p50": 0.0,
|
||||
"required_prebuffer_ms_p95": 0.0,
|
||||
"required_prebuffer_ms_max": 0.0
|
||||
},
|
||||
{
|
||||
"minutes": [
|
||||
27,
|
||||
30
|
||||
],
|
||||
"requests": 126,
|
||||
"rtf_p50": 0.17921699947021952,
|
||||
"rtf_p95": 0.18423814749985468,
|
||||
"wall_s_p50": 1.4107255110284314,
|
||||
"wall_s_p95": 1.6103432949748822,
|
||||
"requests_with_underrun_at_ttfa": 0,
|
||||
"required_prebuffer_ms_p50": 0.0,
|
||||
"required_prebuffer_ms_p95": 0.0,
|
||||
"required_prebuffer_ms_max": 0.0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
+1
-1
@@ -14,7 +14,7 @@ On the **exact hosted SA8775P**, a [CPU-requested inference](sa8775p/cpu_control
|
||||
|
||||
The re-fetched *historical* [SA8775P profile](sa8775p/historical_profile_report.json) has 100 component samples, nearest-rank p50/p95 **1.751/1.874 s**, and 403 CPU plus 335 GPU execution-detail rows. The *historical* [RB3 profile](rb3/historical_profile_report.json) has 100 samples, p50/p95 **3.143/3.189 s**, also with 403 CPU plus 335 GPU rows. Their previously quoted 1.701/3.107 s estimated-time fields are sample minima, not medians. Both profiles exclude talker/predictor, stage handoff, streaming and full-request time.
|
||||
|
||||
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; the [profile](xelite/qnn_npu/profile_submission.json) is pending. 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.
|
||||
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.
|
||||
|
||||
A new SA8775P [FP16 QNN DLC compile](sa8775p/qnn_npu/compile_report.json) passed from the same source ONNX, producing target `mqvovl9lm`; [same-fixture NPU-requested inference](sa8775p/qnn_npu/inference_report.json) failed with Workbench message "Failed to fully run the model, failed after compiling." It returned no waveform or placement samples. This separate accelerator artifact therefore does not rescue the numerically failed TFLite GPU route; the measured CPU component route remains available. The failure applies to this FP16 QNN DLC artifact, not every potential NPU export. The [collector](../../../../experiments/collect_aihub_component.py) retrieves terminal inference/profile reports without resubmitting jobs, and the [audit script](../../../../experiments/audit_qwen_tts_vocoder_qualcomm.py) checks source/fixture hashes, device and model IDs, actual placement, waveform error, saturation and sample percentiles.
|
||||
|
||||
|
||||
BIN
Binary file not shown.
+40
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"timestamp_utc": "2026-09-24T01:08:02.637412+00:00",
|
||||
"qai_hub_version": "0.55.0",
|
||||
"facility": "Qualcomm AI Hub Workbench",
|
||||
"job_id": "jpyoxmvr5",
|
||||
"url": "https://workbench.aihub.qualcomm.com/jobs/jpyoxmvr5/",
|
||||
"status": "FAILED",
|
||||
"status_message": "The process ended because it exceeded the maximum execution time. Consult the runtime log for more details.",
|
||||
"options": "--compute_unit npu",
|
||||
"hub_version": "aihub-2026.09.11.0",
|
||||
"device": {
|
||||
"name": "Snapdragon X Elite CRD",
|
||||
"os": "11",
|
||||
"attributes": [
|
||||
"os:windows",
|
||||
"format:compute",
|
||||
"framework:onnx",
|
||||
"vendor:qualcomm",
|
||||
"abi:aarch64-windows",
|
||||
"chipset:qualcomm-snapdragon-x-elite",
|
||||
"chipset:sc8380xp",
|
||||
"hexagon:v73",
|
||||
"soc-model:60",
|
||||
"htp-supports-fp16:true",
|
||||
"htp-supports-weight-sharing:true",
|
||||
"framework:qnn"
|
||||
]
|
||||
},
|
||||
"model_id": "mmxj098kq",
|
||||
"shapes": {
|
||||
"quantized": [
|
||||
[
|
||||
1,
|
||||
512,
|
||||
97
|
||||
],
|
||||
"float32"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -12,16 +12,18 @@ On a hosted [Galaxy S24 Spark attention-layer experiment](../../../e2e_expansion
|
||||
|
||||
The same W8A16 layer also ran on hosted [Snapdragon X Elite CRD](../../../e2e_expansion_20260923/evidence/spark_xelite_full_attention/README.md) and [SA8775P ADP](../../../e2e_expansion_20260923/evidence/spark_sa8775_full_attention/README.md) NPUs, with pinned-fixture outputs identical to S24/S25; the 100-sample component p50/p95 was 1.433/1.606 ms and 1.837/2.079 ms, respectively. On [RB3 Gen 2 / QCS6490](../../../e2e_expansion_20260923/evidence/spark_rb3_full_attention/README.md), that W8A16 graph failed QNN DLC loading even after target-specific recompilation. An FP32 ONNX CPU layer then passed with source-relative L2 below 9e-7, while a calibrated W8A8 NPU layer executed but had 20.9% hidden-state relative L2 and remains numerically unqualified. These hosted component outcomes do not establish full generation or comparable device speed.
|
||||
|
||||
A [Qwen3-TTS Code2Wav follow-up](../../../e2e_expansion_20260924/evidence/qwen_tts_vocoder_qualcomm/README.md) recovered source and target artifacts, a retained fixture, and raw historical profiles. On SA8775P, fresh GPU-requested inference saturated 96.63% of waveform samples and differed from original ONNX CPU by 11.832 relative L2; the same binary's CPU-requested output on the exact SA device matched ONNX CPU within 4.13e-6 relative L2. The CPU-requested route also has 100 component samples at p50/p95 5.384/5.534 s, with all 738 execution-detail rows on CPU; the GPU-requested path remains numerically failed. A separate SA FP16 QNN NPU vocoder artifact compiled but failed at inference without waveform output. Fresh RB3 inference was unsaturated but differed from CPU by 15.73% relative L2 (16.06 dB SNR), without a listening-quality gate; its 100-sample mixed CPU/GPU component p50/p95 was 3.099/3.133 s. X Elite ONNX CPU vocoder inference passed on the same fixture with 8.09e-7 relative L2 versus local ONNX CPU; its 94-sample component p50/p95 was 6.384/6.644 s with all execution-detail rows on CPU. DirectML inference and profile both failed during provider initialization (Windows error 80070057); a separate FP16 QNN NPU vocoder inference returned an unsaturated waveform at 1.138% relative L2 / 38.88 dB SNR versus local ONNX CPU, with placement profiling pending. None is a complete TTS stream.
|
||||
A [Qwen3-TTS Code2Wav follow-up](../../../e2e_expansion_20260924/evidence/qwen_tts_vocoder_qualcomm/README.md) recovered source and target artifacts, a retained fixture, and raw historical profiles. On SA8775P, fresh GPU-requested inference saturated 96.63% of waveform samples and differed from original ONNX CPU by 11.832 relative L2; the same binary's CPU-requested output on the exact SA device matched ONNX CPU within 4.13e-6 relative L2. The CPU-requested route also has 100 component samples at p50/p95 5.384/5.534 s, with all 738 execution-detail rows on CPU; the GPU-requested path remains numerically failed. A separate SA FP16 QNN NPU vocoder artifact compiled but failed at inference without waveform output. Fresh RB3 inference was unsaturated but differed from CPU by 15.73% relative L2 (16.06 dB SNR), without a listening-quality gate; its 100-sample mixed CPU/GPU component p50/p95 was 3.099/3.133 s. X Elite ONNX CPU vocoder inference passed on the same fixture with 8.09e-7 relative L2 versus local ONNX CPU; its 94-sample component p50/p95 was 6.384/6.644 s with all execution-detail rows on CPU. DirectML inference and profile both failed during provider initialization (Windows error 80070057); a separate FP16 QNN NPU vocoder inference returned an unsaturated waveform at 1.138% relative L2 / 38.88 dB SNR versus local ONNX CPU, but its NPU placement profile exceeded the service execution-time limit during graph preparation and returned no samples. None is a complete TTS stream.
|
||||
|
||||
The identical SA/RB3 TFLite binary matched original ONNX CPU within 3.45e-6 relative L2 in a separate local HX370 x86-64 LiteRT CPU control. Together with the exact SA CPU-requested parity result, this narrows the SA saturation to the GPU-requested route; the RB3 embedded CPU route and specific faulty delegate operation remain unverified.
|
||||
|
||||
A separate [Qwen3-TTS talker decode-step attempt](../../../e2e_expansion_20260924/evidence/qwen_tts_talker_qualcomm/README.md) recovered a 28-layer ONNX export and synthetic fixed-cache fixture. Historical FP16 QNN context-binary inference executed on S24, S25, SA8775P and X Elite, but all four changed the CPU reference top-1 speech token with 8.57–9.43% logits relative L2; they are numerically unqualified on this fixture. An RB3 compile rejected floating-point input. Separate CPU-requested talker steps on X Elite ONNX and SA8775P TFLite preserved CPU token 80 with logits relative L2 2.07e-5 and 3.33e-5; both placement profiles are pending. No complete talker loop or TTS stream follows.
|
||||
|
||||
A [Galaxy S25 InternVLA Cosmos attempt](../../../e2e_expansion_20260924/evidence/internvla_cosmos_qualcomm/README.md) packaged the real Place_Markpen image encoder into one ONNX file after two CPU parity fixtures. FLOAT16 QNN DLC inference returned a latent within 0.0524% relative L2 of the source on one pattern; its 100-sample six-frame component profile had p50/p95 49.665/51.382 ms and all 121 execution-detail rows on NPU. Injecting that latent into the real policy on local CPU changed synthetic actions by 0.742% relative L2, without a task tolerance. The same encoder compiled to FP16 QNN DLC for X Elite CRD, with same-fixture NPU-requested inference pending. This advances component and action-sensitivity evidence, not device-local full-policy qualification. The Place_Markpen checkpoint names dataset a2d_real/a2d_pen_holder, which returned HTTP 404 under the current authenticated Hugging Face account. The official vLLM-Omni example names a different Place_Markpen archive in InternData-A1, but access to that gated dataset returned HTTP 403; [the access record](../../../e2e_expansion_20260924/evidence/internvla_real_observation_access/README.md) leaves real-observation reference-action validation open.
|
||||
A [Galaxy S25 InternVLA Cosmos attempt](../../../e2e_expansion_20260924/evidence/internvla_cosmos_qualcomm/README.md) packaged the real Place_Markpen image encoder into one ONNX file after two CPU parity fixtures. FLOAT16 QNN DLC inference returned a latent within 0.0524% relative L2 of the source on one pattern; its 100-sample six-frame component profile had p50/p95 49.665/51.382 ms and all 121 execution-detail rows on NPU. Injecting that latent into the real policy on local CPU changed synthetic actions by 0.742% relative L2, without a task tolerance. The same encoder compiled to FP16 QNN DLC for X Elite CRD; same-fixture NPU-requested inference returned a finite latent at 0.0608% relative L2 versus source, with actual placement profiling pending. This advances component and action-sensitivity evidence, not device-local full-policy qualification. The Place_Markpen checkpoint names dataset a2d_real/a2d_pen_holder, which returned HTTP 404 under the current authenticated Hugging Face account. The official vLLM-Omni example names a different Place_Markpen archive in InternData-A1, but access to that gated dataset returned HTTP 403; [the access record](../../../e2e_expansion_20260924/evidence/internvla_real_observation_access/README.md) leaves real-observation reference-action validation open.
|
||||
|
||||
A [MiniCPM-o speech-head study](../../../e2e_expansion_20260924/evidence/minicpmo_tts_qualcomm/README.md) recovered the historical 20-layer source and matching S24/S25 fixtures. Both FP16 context-binary outputs preserved the ONNX CPU top-1 speech token on this one decode step with logits relative L2 of 0.346%/0.360%. S24/S25 100-sample component profiles attributed all 1,029 execution-detail rows to NPU, with p50/p95 8.537/9.006 ms and 7.197/7.615 ms. New FP16 QNN DLC compiles passed for SA8775P, X Elite and RB3. SA8775P same-fixture NPU-requested inference returned finite outputs, preserved CPU top-1 token 1867 and had 0.3568% logits relative L2; actual NPU placement profiling is pending. X Elite same-fixture inference also preserved token 1867 with 0.3170% logits relative L2; its placement profile remains pending; RB3 FP16 QNN inference failed at graph load, and an explicit TFLite CPU fallback compile passed with same-fixture inference pending. These are speech-head component results, not multimodal MiniCPM-o requests.
|
||||
A [MiniCPM-o speech-head study](../../../e2e_expansion_20260924/evidence/minicpmo_tts_qualcomm/README.md) recovered the historical 20-layer source and matching S24/S25 fixtures. Both FP16 context-binary outputs preserved the ONNX CPU top-1 speech token on this one decode step with logits relative L2 of 0.346%/0.360%. S24/S25 100-sample component profiles attributed all 1,029 execution-detail rows to NPU, with p50/p95 8.537/9.006 ms and 7.197/7.615 ms. New FP16 QNN DLC compiles passed for SA8775P, X Elite and RB3. SA8775P same-fixture inference preserved CPU top-1 token 1867 with 0.3568% logits relative L2; its 100-sample component profile measured p50/p95 11.901/13.038 ms with all 944 execution-detail rows on NPU. X Elite same-fixture inference also preserved token 1867 with 0.3170% logits relative L2; its 100-sample component profile measured p50/p95 9.905/11.037 ms with all 944 execution-detail rows on NPU; RB3 FP16 QNN inference failed at graph load; its explicit TFLite CPU fallback returned 41 finite outputs, preserved CPU top-1 token 1867 and had logits relative L2 1.26e-6 versus ONNX CPU, with placement profiling pending. These are speech-head component results, not multimodal MiniCPM-o requests.
|
||||
|
||||
A [raw sustained-window audit](../../../e2e_expansion_20260924/evidence/qwen_tts_sustained_drift/README.md) found that native Windows RTX Qwen3-TTS playback slows sharply after about 26 minutes: all 17 serial medium requests in minutes 27–30 underrun in the simulated first-audio playout, with median RTF 1.331. The separate WSL run stayed below real time without underruns. The cause is not established; a timestamped GPU telemetry repeat is underway.
|
||||
|
||||
## Configuration × model
|
||||
|
||||
The WSL CPU Qwen3-TTS cell also has a separate bounded Omni whole-session
|
||||
@@ -41,11 +43,11 @@ NOT E2E means no complete device/model workload was verified. “Scoped E2E” i
|
||||
| PC HX370 + Radeon 890M / Windows worker | scoped E2E: Omni Spark text | scoped E2E: Omni Radeon talker/codec + CPU predictor | 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 |
|
||||
| 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 (speech head numeric; placement pending) | NOT E2E (Cosmos compile; inference pending) |
|
||||
| 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 encoder numeric; placement pending) |
|
||||
| Mobile Galaxy S25 / Snapdragon 8 Elite for Galaxy | NOT E2E (one Spark attention layer on NPU) | NOT E2E (FP16 talker token mismatch) | 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) | NOT E2E | NOT E2E (NPU speech head step profiled) | NOT E2E |
|
||||
| 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 (speech head numeric; placement pending) | NOT E2E (Cosmos compile; inference pending) |
|
||||
| Embedded RB3 Gen 2 / QCS6490 / AI Hub | NOT E2E (Spark CPU layer passed; W8A8 NPU quality open) | NOT E2E (mixed vocoder numeric unqualified) | NOT E2E | NOT E2E (FP16 speech head load failed; CPU inference pending) | NOT E2E |
|
||||
| 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 compile; inference pending) |
|
||||
| Embedded RB3 Gen 2 / QCS6490 / AI Hub | NOT E2E (Spark CPU layer passed; W8A8 NPU quality open) | NOT E2E (mixed vocoder numeric unqualified) | NOT E2E | NOT E2E (speech-head CPU numeric; placement pending) | NOT E2E |
|
||||
|
||||
## Per-cell reasons and next steps
|
||||
|
||||
@@ -67,7 +69,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 | PROFILE_COMPLETED | not fully qualified: reference-quality and remaining reliability/performance gates must be reviewed | Broaden only with a named workload/device/precision qualification. |
|
||||
| PC HX370 + RTX 5090 Laptop / Windows | Qwen3-TTS 0.6B CustomVoice | PROFILE_COMPLETED | not fully qualified: reference-quality and remaining reliability/performance gates must be reviewed | Resolve and measure playback stalls; run quality, interruption and thermal tests. |
|
||||
| PC HX370 + RTX 5090 Laptop / Windows | Qwen3-TTS 0.6B CustomVoice | PROFILE_COMPLETED; SUSTAINED_PLAYBACK_FAIL | The complete-model CUDA stream passed short measured requests, but the 30-minute serial medium-prompt run slowed sharply around minute 26–27. In the final 27–30 minute window, all 17 requests had simulated playback underruns; nearest-rank p50 RTF was 1.331 and complete wall 10.379 s, versus 0.185 / 1.478 s in minutes 0–25. Avoiding all recorded late underruns required up to 4.650 s additional prebuffer. A separate WSL run on the same laptop had no sustained underruns, but power/start conditions were not controlled. The historical run lacks clock/temperature/power timeline, so the cause is unknown. | Repeat with timestamped GPU telemetry, identify and fix the late slowdown, then run speech-quality, interruption/recovery and sustained thermal gates; [raw-window analysis](../../../e2e_expansion_20260924/evidence/qwen_tts_sustained_drift/README.md). |
|
||||
| PC HX370 + RTX 5090 Laptop / Windows | Qwen3.8-27B | NOT_E2E_PROFILEABLE | The Omni pipeline binding now exists and passed scoped text/image cases in WSL, but no native Windows Omni run has verified the NVFP4 checkpoint, memory admission or modality behavior. | Run the same checkpoint and explicit context on native Windows, then broaden quality and profiling; [WSL-only evidence](../../../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). |
|
||||
@@ -87,10 +89,10 @@ NOT E2E means no complete device/model workload was verified. “Scoped E2E” i
|
||||
| PC CPU+iGPU+NPU +/- discrete GPU, joint model execution | MiniCPM-o 4.5 | NOT_E2E_PROFILEABLE | No qualifying same-model multi-accelerator deployment/artifact plan or overlap/recovery evidence. Individual routes are not a joint pipeline. | Supply and validate the missing matching artifact/backend, then run the complete specified workload. |
|
||||
| PC CPU+iGPU+NPU +/- discrete GPU, joint model execution | InternVLA-A1 | NOT_E2E_PROFILEABLE | No qualifying same-model multi-accelerator deployment/artifact plan or overlap/recovery evidence. Individual routes are not a joint pipeline. | Supply and validate the missing matching artifact/backend, then run the complete specified workload. |
|
||||
| PC Snapdragon X Elite CRD / AI Hub | Spark-X2.5 | COMPONENT_NPU_INFERENCE_PROFILED; NOT_E2E_PROFILEABLE | A real Spark-X2.5-1.7B one-layer W8A16 QDQ attention artifact, compiled as QNN DLC, ran on the exact hosted Snapdragon X Elite CRD (Windows 11 ARM64). Inference returned finite hidden/new-K/new-V tensors bitwise identical to the prior S24/S25 NPU outputs on the same fixture; the profile attributed all 73 execution-detail rows to NPU. Across 100 component samples, nearest-rank p50/p95 was 1.433/1.606 ms; the 1.346 ms estimated-time field is the minimum. Hidden/K/V relative L2 versus original FP32 ONNX CPU was 1.351%/0.377%/0.650%, without a next-token quality tolerance. There is no complete 28-layer prefill/decode/KV-ring/sampling loop, resident Omni controller or complete-request timing. | Qualify a complete X Elite resident artifact/controller with state, token quality, memory admission/cancel and sustained power; [X Elite NPU raw evidence](../../../e2e_expansion_20260923/evidence/spark_xelite_full_attention/README.md). |
|
||||
| PC Snapdragon X Elite CRD / AI Hub | Qwen3-TTS 0.6B CustomVoice | COMPONENT_ONNX_CPU_VOCODER_PARITY_PROFILED; DIRECTML_RUNTIME_FAILED; TALKER_FP16_NUMERIC_FAIL; QNN_NPU_VOCODER_NUMERIC_MEASURED; TALKER_ONNX_CPU_NUMERIC_MEASURED; PLACEMENT_PENDING; NOT_E2E_PROFILEABLE | The fresh ONNX vocoder inference on the exact Windows 11 ARM64 X Elite CRD requested CPU and returned an unsaturated waveform on the pinned fixture, matching local ONNX Runtime CPU with 8.09e-7 relative L2 and 121.84 dB SNR. Its 94-sample component profile had nearest-rank p50/p95 6.384/6.644 s and all 634 execution-detail rows on CPU; 5.917 s estimated time is the sample minimum. This is one component, without a listening-quality gate. Corrected DirectML inference and profile both failed at provider initialization with Windows error 80070057. A separate FP16 QNN DLC vocoder inference returned an unsaturated waveform at 1.138% relative L2 / 38.88 dB SNR versus local ONNX CPU on the same fixture; NPU node-placement profile is pending and no listening-quality tolerance is set. The 28-layer FP16 QNN talker step executed, yet changed CPU top-1 token 80 to 1720 with 8.57% logits relative L2 on a synthetic cache fixture; a separate ONNX CPU-requested talker step preserved CPU token 80 with logits relative L2 2.07e-5 and maximum K/V relative L2 2.18e-5; its placement profile is pending. The older TFLite vocoder target was rejected on Windows ARM; no complete stream exists. | Audit QNN vocoder and CPU talker placement, investigate DirectML failure, then qualify complete local streaming, memory and sustained behavior; [vocoder](../../../e2e_expansion_20260924/evidence/qwen_tts_vocoder_qualcomm/README.md) and [talker](../../../e2e_expansion_20260924/evidence/qwen_tts_talker_qualcomm/README.md) evidence. |
|
||||
| PC Snapdragon X Elite CRD / AI Hub | Qwen3-TTS 0.6B CustomVoice | COMPONENT_ONNX_CPU_VOCODER_PARITY_PROFILED; DIRECTML_RUNTIME_FAILED; TALKER_FP16_NUMERIC_FAIL; QNN_NPU_VOCODER_NUMERIC_MEASURED_PROFILE_TIMEOUT; TALKER_ONNX_CPU_NUMERIC_MEASURED; TALKER_CPU_PLACEMENT_PENDING; NOT_E2E_PROFILEABLE | The fresh ONNX vocoder inference on the exact Windows 11 ARM64 X Elite CRD requested CPU and returned an unsaturated waveform on the pinned fixture, matching local ONNX Runtime CPU with 8.09e-7 relative L2 and 121.84 dB SNR. Its 94-sample component profile had nearest-rank p50/p95 6.384/6.644 s and all 634 execution-detail rows on CPU; 5.917 s estimated time is the sample minimum. This is one component, without a listening-quality gate. Corrected DirectML inference and profile both failed at provider initialization with Windows error 80070057. A separate FP16 QNN DLC vocoder inference returned an unsaturated waveform at 1.138% relative L2 / 38.88 dB SNR versus local ONNX CPU on the same fixture; the NPU node-placement profile timed out during graph preparation with no timing or per-node samples, and no listening-quality tolerance is set. The 28-layer FP16 QNN talker step executed, yet changed CPU top-1 token 80 to 1720 with 8.57% logits relative L2 on a synthetic cache fixture; a separate ONNX CPU-requested talker step preserved CPU token 80 with logits relative L2 2.07e-5 and maximum K/V relative L2 2.18e-5; its placement profile is pending. The older TFLite vocoder target was rejected on Windows ARM; no complete stream exists. | Reduce or partition the QNN vocoder profile graph and audit CPU talker placement; investigate DirectML failure, then qualify complete local streaming, memory and sustained behavior; [vocoder](../../../e2e_expansion_20260924/evidence/qwen_tts_vocoder_qualcomm/README.md) and [talker](../../../e2e_expansion_20260924/evidence/qwen_tts_talker_qualcomm/README.md) evidence. |
|
||||
| PC Snapdragon X Elite CRD / 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. |
|
||||
| PC Snapdragon X Elite CRD / AI Hub | MiniCPM-o 4.5 | COMPONENT_SPEECH_HEAD_NUMERIC_MEASURED; PLACEMENT_PENDING; NOT_E2E_PROFILEABLE | The real 20-layer MiniCPM-o speech-head source compiled to FP16 QNN DLC for the exact X Elite CRD. Same-fixture NPU-requested 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. Actual NPU node assignment and timing await its placement profile. Thinker/encoders/vocoder and a device-local stateful Omni backend remain unqualified. | Audit the [X Elite speech-head placement profile](../../../e2e_expansion_20260924/evidence/minicpmo_tts_qualcomm/README.md), then validate the complete multimodal pipeline, state, quality, memory and sustained behavior. |
|
||||
| PC Snapdragon X Elite CRD / AI Hub | InternVLA-A1 | COMPONENT_COSMOS_QNN_COMPILE_PASS; INFERENCE_PENDING; NOT_E2E_PROFILEABLE | The real Place_Markpen Cosmos image encoder compiled to FP16 QNN DLC for exact X Elite CRD; same-fixture NPU-requested inference is pending. No encoder numerical result, actual placement, complete action policy or local stateful Omni backend exists. | Audit the [X Elite Cosmos encoder inference](../../../e2e_expansion_20260924/evidence/internvla_cosmos_qualcomm/README.md), then validate real observations, action units/timing, state, admission, cancellation and sustained behavior. |
|
||||
| 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_NUMERIC_MEASURED; PLACEMENT_PENDING; 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 NPU-requested route awaits actual node-placement/timing profile. No real-observation action tolerance, complete policy or local stateful Omni backend exists. | Audit the [X Elite Cosmos placement profile](../../../e2e_expansion_20260924/evidence/internvla_cosmos_qualcomm/README.md), then validate real observations, action units/timing, state, admission, cancellation and sustained behavior. |
|
||||
| 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; NOT_E2E_PROFILEABLE | Fresh FP16 predictor inference passed; its one output exactly matches the same compiled artifact/dataset reference. 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, 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. |
|
||||
@@ -104,12 +106,12 @@ NOT E2E means no complete device/model workload was verified. “Scoped E2E” i
|
||||
| Embedded SA8775P ADP / AI Hub | Spark-X2.5 | COMPONENT_NPU_INFERENCE_PROFILED; NOT_E2E_PROFILEABLE | A real Spark-X2.5-1.7B one-layer W8A16 QDQ attention artifact, compiled as QNN DLC, ran on the exact hosted SA8775P ADP (Android 14). Inference returned finite hidden/new-K/new-V tensors bitwise identical to the prior S24/S25 NPU outputs on the same fixture; the profile attributed all 73 execution-detail rows to NPU. Across 100 component samples, nearest-rank p50/p95 was 1.837/2.079 ms; the 1.749 ms estimated-time field is the minimum. Hidden/K/V relative L2 versus original FP32 ONNX CPU was 1.351%/0.377%/0.650%, without a next-token quality tolerance. There is no complete 28-layer prefill/decode/KV-ring/sampling loop, resident Omni controller or complete-request timing. | Qualify a complete embedded resident artifact/controller with state, token quality, memory admission/cancel and sustained power; [SA8775P NPU raw evidence](../../../e2e_expansion_20260923/evidence/spark_sa8775_full_attention/README.md). |
|
||||
| Embedded SA8775P ADP / AI Hub | Qwen3-TTS 0.6B CustomVoice | COMPONENT_CPU_VOCODER_PARITY_AND_PLACEMENT_PASS; TALKER_TFLITE_CPU_NUMERIC_MEASURED; QNN_NPU_VOCODER_INFERENCE_FAILED; COMPONENT_GPU_NUMERIC_FAIL; TALKER_FP16_NUMERIC_FAIL; NOT_E2E_PROFILEABLE | On the exact SA8775P, the same TFLite binary's CPU-requested Code2Wav inference matched original ONNX CPU within 4.13e-6 relative L2 / 107.67 dB SNR, without saturation. Its 100-sample CPU-requested component profile had p50/p95 5.384/5.534 s with all 738 execution-detail rows on CPU; the service estimated-time field 5.250 s is the sample minimum. The GPU-requested output saturated 96.63% of samples with 11.832 relative L2; its fresh 100-sample mixed CPU/GPU profile p50/p95 was 1.776/1.880 s, timing failed audio. Even with FP32-preserving GPU options, 84.89% of samples saturated with 11.389 relative L2. The 28-layer FP16 QNN talker step executed but changed CPU top-1 token 80 to 1720 with 9.43% logits relative L2. A separate TFLite CPU-requested talker step preserved CPU top-1 token 80 with logits relative L2 3.33e-5 and maximum K/V relative L2 3.41e-5; its placement profile is pending. A separate FP16 QNN DLC vocoder compile passed, but same-fixture NPU-requested inference failed after compilation without a waveform or placement samples. No complete pipeline exists. | Audit talker CPU placement and isolate the FP16 QNN vocoder runtime failure, GPU delegate failure and FP16 talker numerical drift, then establish listening quality, co-resident streaming, memory and sustained behavior; [vocoder](../../../e2e_expansion_20260924/evidence/qwen_tts_vocoder_qualcomm/README.md) and [talker](../../../e2e_expansion_20260924/evidence/qwen_tts_talker_qualcomm/README.md) evidence. |
|
||||
| Embedded SA8775P ADP / 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 SA8775P ADP / AI Hub | MiniCPM-o 4.5 | COMPONENT_SPEECH_HEAD_NUMERIC_MEASURED; PLACEMENT_PENDING; NOT_E2E_PROFILEABLE | The real 20-layer MiniCPM-o speech-head source compiled to FP16 QNN DLC for the exact SA8775P ADP. Same-fixture NPU-requested inference returned 41 finite tensors, preserved ONNX CPU top-1 speech token 1867, and had 0.3568% logits relative L2 and 1.225% maximum K/V relative L2. The requested NPU route awaits actual node-placement and timing profile; no complete thinker/encoders/vocoder bundle or device-local stateful controller exists. | Audit the [SA8775P speech-head placement profile](../../../e2e_expansion_20260924/evidence/minicpmo_tts_qualcomm/README.md), then qualify the complete multimodal pipeline and sustained behavior. |
|
||||
| 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_FP16_QNN_COMPILE_PASS_INFERENCE_PENDING; NOT_E2E_PROFILEABLE | The real Place_Markpen Cosmos image encoder source compiled to FP16 QNN DLC on exact SA8775P ADP. Same-fixture NPU-requested inference is pending; no numerical output, actual placement, full action policy or local stateful Omni backend exists yet. | Audit the [SA8775P Cosmos inference](../../../e2e_expansion_20260924/evidence/internvla_cosmos_qualcomm/README.md), then obtain placement, real-observation action validation and a complete local policy. |
|
||||
| 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_MIXED_VOCODER_PROFILED_NUMERIC_UNQUALIFIED; NOT_E2E_PROFILEABLE | Fresh same-fixture TFLite GPU-requested vocoder inference returned a finite unsaturated waveform, but relative L2 versus original ONNX CPU was 15.73% (16.06 dB SNR), without a listening-quality tolerance; it is not a qualified audio path. The fresh 100-sample component profile had nearest-rank p50/p95 3.099/3.133 s and 403 CPU plus 335 GPU execution-detail rows. Its 3.070 s estimated-time field is the sample minimum, not median. The historical NPU talker build was rejected for floating-point inputs; no full model pipeline exists. | Establish waveform quality and a compatible integer talker artifact, then validate complete local execution, memory and sustained behavior; [vocoder evidence](../../../e2e_expansion_20260924/evidence/qwen_tts_vocoder_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_COMPILE_PASS_INFERENCE_PENDING; 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 fallback compile passed with same-fixture CPU-requested inference pending; no numerical output, complete model bundle or local stateful controller exists. | Audit the [RB3 speech-head CPU fallback](../../../e2e_expansion_20260924/evidence/minicpmo_tts_qualcomm/README.md), then qualify the complete multimodal pipeline and sustained behavior. |
|
||||
| Embedded RB3 Gen 2 / QCS6490 / AI Hub | MiniCPM-o 4.5 | COMPONENT_SPEECH_HEAD_FP16_QNN_LOAD_FAILED; CPU_FALLBACK_NUMERIC_MEASURED_PLACEMENT_PENDING; 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. Actual CPU placement and timing profile is pending; no complete model bundle or local stateful controller exists. | Audit the [RB3 speech-head CPU placement profile](../../../e2e_expansion_20260924/evidence/minicpmo_tts_qualcomm/README.md), then qualify complete multimodal generation and sustained behavior. |
|
||||
| Embedded RB3 Gen 2 / QCS6490 / AI Hub | InternVLA-A1 | 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. |
|
||||
|
||||
## Measured request timing
|
||||
|
||||
@@ -15,15 +15,17 @@ 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. 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, with placement profiling pending. A separate SA8775P FP16 QNN DLC vocoder compile passed, but NPU-requested same-fixture inference failed after compilation without waveform or placement samples. 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. 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. 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 CPU-requested parity narrows the failure to the GPU-requested route. The FP32-preserving GPU option did not fix it, so per-node placement and delegate-operation isolation remain open.
|
||||
|
||||
A separate [28-layer talker decode-step attempt](../../benchmarks/edge_harness/results/e2e_expansion_20260924/evidence/qwen_tts_talker_qualcomm/README.md) retains a synthetic fixed-cache fixture and CPU reference. Historical FP16 QNN context-binary inference executed on S24, S25, SA8775P and X Elite, but all four changed the CPU top-1 speech token with 8.57–9.43% logits relative L2. RB3 rejected that floating-point-input artifact. Explicit X Elite ONNX CPU and SA8775P TFLite CPU fallback compiles passed. X Elite CPU-requested inference preserved CPU top-1 token 80 with logits relative L2 2.07e-5; its placement profile remains pending. SA8775P TFLite CPU-requested talker inference also preserved token 80 with logits relative L2 3.33e-5; its placement profile is pending. None advances M2 to numerical talker or full-stream qualification yet.
|
||||
|
||||
For M4, a [MiniCPM-o 4.5 speech-head study](../../benchmarks/edge_harness/results/e2e_expansion_20260924/evidence/minicpmo_tts_qualcomm/README.md) recovered the historical 20-layer ONNX source and matching S24/S25 fixtures. Both FP16 context-binary outputs preserved the ONNX CPU top-1 speech token on one decode step, with logits relative L2 0.346%/0.360%. Their 100-sample component profiles had p50/p95 8.537/9.006 ms and 7.197/7.615 ms, with all 1,029 execution-detail rows on NPU for each. New FP16 QNN DLC compiles passed for SA8775P, X Elite and RB3. SA8775P same-fixture NPU-requested inference preserved CPU top-1 speech token 1867 with 0.3568% logits relative L2 and 1.225% maximum K/V relative L2; placement profiling is pending. X Elite same-fixture inference also preserved token 1867 with 0.3170% logits relative L2; both placement profiles remain pending. RB3 FP16 QNN inference failed at graph load despite compile success; a TFLite CPU fallback compile passed with same-fixture CPU-requested inference pending. This is component C numerical evidence only, not thinker/encoder/vocoder or complete multimodal support.
|
||||
For M4, a [MiniCPM-o 4.5 speech-head study](../../benchmarks/edge_harness/results/e2e_expansion_20260924/evidence/minicpmo_tts_qualcomm/README.md) recovered the historical 20-layer ONNX source and matching S24/S25 fixtures. Both FP16 context-binary outputs preserved the ONNX CPU top-1 speech token on one decode step, with logits relative L2 0.346%/0.360%. Their 100-sample component profiles had p50/p95 8.537/9.006 ms and 7.197/7.615 ms, with all 1,029 execution-detail rows on NPU for each. New FP16 QNN DLC compiles passed for SA8775P, X Elite and RB3. SA8775P same-fixture inference preserved CPU top-1 speech token 1867 with 0.3568% logits relative L2 and 1.225% maximum K/V relative L2; its 100-sample component profile measured p50/p95 11.901/13.038 ms with all 944 execution-detail rows on NPU. X Elite same-fixture inference also preserved token 1867 with 0.3170% logits relative L2; its 100-sample component profile measured p50/p95 9.905/11.037 ms with all 944 execution-detail rows on NPU. RB3 FP16 QNN inference failed at graph load despite compile success; a TFLite CPU fallback same-fixture inference preserved top-1 token 1867 with logits relative L2 1.26e-6 versus ONNX CPU; CPU placement profiling is pending. This is component C numerical evidence only, not thinker/encoder/vocoder or complete multimodal support.
|
||||
|
||||
For M4, a [Galaxy S25 Cosmos encoder attempt](../../benchmarks/edge_harness/results/e2e_expansion_20260924/evidence/internvla_cosmos_qualcomm/README.md) repackages the real Place_Markpen FP32 ONNX export after retaining two CPU parity fixtures. FLOAT16 QNN DLC inference returned a latent within 0.0524% relative L2 of the source on one synthetic pattern. Injecting that output into the real policy on local CPU changed synthetic actions by 0.742% relative L2, without a task tolerance. S25 six-frame component profile returned 100 samples at p50/p95 49.665/51.382 ms, with all 121 execution-detail rows on NPU; the action policy did not run on S25. The same encoder compiled to FP16 QNN DLC for X Elite CRD, with same-fixture NPU-requested inference pending; an SA8775P FP16 QNN DLC compile passed, with same-fixture NPU-requested inference pending. This is component/action-sensitivity evidence, not device-local M4 qualification. The checkpoint train config names a2d_real/a2d_pen_holder; an [authenticated access check](../../benchmarks/edge_harness/results/e2e_expansion_20260924/evidence/internvla_real_observation_access/README.md) returned HTTP 404. The official vLLM-Omni example names an InternData-A1 Place_Markpen archive, but that dataset returned HTTP 403 gated-access denial under the current account, so real-observation reference-action quality is still unmeasured.
|
||||
The [native Windows Qwen3-TTS sustained audit](../../benchmarks/edge_harness/results/e2e_expansion_20260924/evidence/qwen_tts_sustained_drift/README.md) identifies an additional M2 desktop blocker. The historical RTX 5090 Laptop complete-model stream changed regime around minute 26–27; all 17 requests in minutes 27–30 had simulated playback underruns and median RTF 1.331. The separate WSL run had no sustained underruns. Existing logs do not identify the cause; timestamped GPU clocks, power, temperature and throttling are now available in the local profiler for a controlled repeat. Native Windows sustained playback remains unqualified.
|
||||
|
||||
For M4, a [Galaxy S25 Cosmos encoder attempt](../../benchmarks/edge_harness/results/e2e_expansion_20260924/evidence/internvla_cosmos_qualcomm/README.md) repackages the real Place_Markpen FP32 ONNX export after retaining two CPU parity fixtures. FLOAT16 QNN DLC inference returned a latent within 0.0524% relative L2 of the source on one synthetic pattern. Injecting that output into the real policy on local CPU changed synthetic actions by 0.742% relative L2, without a task tolerance. S25 six-frame component profile returned 100 samples at p50/p95 49.665/51.382 ms, with all 121 execution-detail rows on NPU; the action policy did not run on S25. The same encoder compiled to FP16 QNN DLC for X Elite CRD; same-fixture NPU-requested inference returned a finite latent at 0.0608% relative L2 versus source, with placement profiling pending. An SA8775P FP16 QNN DLC compile passed, with same-fixture NPU-requested inference pending. This is component/action-sensitivity evidence, not device-local M4 qualification. The checkpoint train config names a2d_real/a2d_pen_holder; an [authenticated access check](../../benchmarks/edge_harness/results/e2e_expansion_20260924/evidence/internvla_real_observation_access/README.md) returned HTTP 404. The official vLLM-Omni example names an InternData-A1 Place_Markpen archive, but that dataset returned HTTP 403 gated-access denial under the current account, so real-observation reference-action quality is still unmeasured.
|
||||
|
||||
The [WSL CPU expansion](../../benchmarks/edge_harness/results/e2e_expansion_20260923/README.md)
|
||||
adds constrained three-stage MiniCPM-o text-to-speech requests and a CPU-only
|
||||
|
||||
Reference in new issue
Block a user