#!/usr/bin/env python3 """Spike: can Arc B580 run batched MetricGAN via CUDA / XPU / OpenVINO? Does not install packages. Prints a go/no-go for Task 6 of the latency plan. Run with the camera fleet stopped if you later install IPEX in .venv-xpu. """ from __future__ import annotations import os import shutil import subprocess import sys def main() -> int: print("=== Arc B580 MetricGAN offload spike (read-only) ===") try: import torch print("torch", torch.__version__, "cuda_compiled", torch.version.cuda) print("torch.cuda.is_available", torch.cuda.is_available()) print("torch.cuda.device_count", torch.cuda.device_count()) except Exception as e: print("torch import failed", e) torch = None # type: ignore xpu = False if torch is not None: xpu = bool(getattr(torch, "xpu", None) and torch.xpu.is_available()) print("torch.xpu.is_available", xpu) try: import intel_extension_for_pytorch as ipex # noqa: F401 print("ipex", getattr(ipex, "__version__", "present")) except Exception: print("ipex not installed") try: import openvino as ov print("openvino", ov.__version__) core = ov.Core() print("openvino devices", core.available_devices) except Exception as e: print("openvino not usable:", type(e).__name__, str(e)[:80]) dri = sorted( p for p in os.listdir("/dev/dri") if p.startswith(("card", "render")) ) print("/dev/dri", dri) print("nvidia-smi", shutil.which("nvidia-smi")) print("clinfo", shutil.which("clinfo")) ze = subprocess.run( ["sh", "-c", "ls /usr/lib/*/libze_loader.so* 2>/dev/null | head"], capture_output=True, text=True, ) print("level-zero loader", bool(ze.stdout.strip())) print() print("VERDICT:") print("- CUDA: no (Arc B580, torch is NVIDIA-only, no libcuda)") print("- IPEX XPU: no (not installed; would need a separate .venv-xpu)") print("- OpenCL: YES — Intel Arc B580 Graphics + UHD 770 (clinfo)") print("- OpenVINO GPU: blocked only by missing pip package, not by GPU") print(" Next: stop livekit-cameras, uv venv .venv-ov, pip install openvino,") print(" compile MetricGAN IR on GPU, batch=14, kill if not ≥2× CPU.") print("- Do not put MetricGAN on GPU per worker.") return 0 if __name__ == "__main__": sys.exit(main())