Files
livekit-cameras/scripts/SPIKE_OPENVINO_METRICGAN.md
T
root 42443420be chore: OpenVINO MetricGAN GPU spike (do not merge)
Arc B580 lost the kill test: batch-14 mask p50 103 ms vs Torch CPU
70 ms enhance / OpenVINO CPU 5 ms. Production stays on known-good
CPU workers (tag known-good-cpu-2026-08-28). Hop stays 200 ms.
2026-08-28 07:18:54 +00:00

2.1 KiB
Raw Blame History

Spike: OpenVINO MetricGAN on Arc B580

Date: 2026-08-28 Known-good tag: known-good-cpu-2026-08-28 (736eccb) Fleet was stopped (cameras + displays). LiveKit server stayed up.

What ran

  • Export enhance_model (EnhancementGenerator BLSTM) to ONNX. Input for 1 s @ 16 kHz: (batch, 63, 257) log-magnitude. STFT / ISTFT stay on Torch CPU (not in the ONNX).
  • OpenVINO 2026.3.1 in .venv-ov (not the CUDA project venv).
  • Devices: CPU i7-14700, GPU.0 UHD 770, GPU.1 Arc B580.

Numbers (batch=14, 1 s windows)

path p50 batch p95 batch p99 batch p50 / cam
Torch CPU enhance_batch (1 thread) 69.7 ms 69.9 ms 69.9 ms 4.98 ms
Torch CPU mask only 63.6 ms 63.7 ms 63.7 ms 4.54 ms
OpenVINO CPU mask 5.13 ms 5.49 ms 5.65 ms 0.37 ms
OpenVINO GPU.0 iGPU mask 75.0 ms 75.4 ms 75.4 ms 5.36 ms
OpenVINO GPU.1 Arc B580 mask 103.0 ms 103.1 ms 103.4 ms 7.35 ms

Kill criterion (plan)

OpenVINO GPU ms/camera must be ≥2× thread-capped CPU batch, and p99 including copies < hop/2.

  • Arc vs Torch CPU enhance: slower (7.35 vs 4.98 ms/cam). Fail.
  • Arc vs OpenVINO CPU mask: 20× slower. Fail.
  • Arc p99 103 ms is already half of a 200 ms hop for the mask only, before STFT/ISTFT. Fail for hop cut.

Do not put MetricGAN on the B580. Do not merge a GPU enhance daemon.

What would actually cut hop

OpenVINO CPU mask is ~12× Torch. A single batched CPU enhance process (STFT + OV-CPU mask + ISTFT) is the only path that looks fast enough for ENHANCE_HOP_S=0.1. That is a new architecture (workers DelaySum locally, one enhance server), not a CUDA/device=xpu switch.

This spike does not implement that server. Production stays on the known-good per-worker Torch path (hop 200 ms).

Reproduce

systemctl stop livekit-cameras livekit-displays
.venv/bin/python scripts/spike_export_metricgan_onnx.py
.venv/bin/python scripts/spike_bench_cpu_metricgan.py --batch 14
.venv-ov/bin/python scripts/spike_bench_openvino.py --batch 14
systemctl start livekit-cameras livekit-displays