import platform import onnxruntime as ort from typing import Optional try: import psutil HAS_PSUTIL = True except ImportError: HAS_PSUTIL = False try: import cpuinfo HAS_CPUINFO = True except ImportError: HAS_CPUINFO = False try: import GPUtil HAS_GPUTIL = True except ImportError: HAS_GPUTIL = False def get_cpu_info() -> str: cpu_name = None cpu_freq_mhz = None cpu_cores = None cpu_threads = None if HAS_CPUINFO: try: info = cpuinfo.get_cpu_info() cpu_name = ( info.get("brand_raw") or info.get("brand") or info.get("model name") ) if cpu_name: cpu_name = cpu_name.strip() except Exception: pass if HAS_PSUTIL: try: cpu_freq = psutil.cpu_freq() cpu_cores = psutil.cpu_count(logical=False) cpu_threads = psutil.cpu_count(logical=True) if cpu_freq and cpu_freq.current: cpu_freq_mhz = cpu_freq.current except Exception: pass if not cpu_name: cpu_name = platform.processor() or "Unknown CPU" parts = [] if cpu_name: parts.append(cpu_name) if cpu_cores and cpu_threads: if cpu_cores == cpu_threads: parts.append(f"{cpu_cores} cores") else: parts.append(f"{cpu_cores}C/{cpu_threads}T") if cpu_freq_mhz: if cpu_freq_mhz >= 1000: parts.append(f"{cpu_freq_mhz/1000:.2f} GHz") else: parts.append(f"{cpu_freq_mhz:.0f} MHz") return " | ".join(parts) if parts else "Unknown CPU" def get_gpu_info() -> Optional[str]: if HAS_GPUTIL: try: gpus = GPUtil.getGPUs() if gpus and len(gpus) > 0: gpu = gpus[0] return gpu.name.strip() except Exception: pass try: import subprocess result = subprocess.run( ["nvidia-smi", "--query-gpu=name", "--format=csv,noheader"], capture_output=True, text=True, timeout=2, ) if result.returncode == 0 and result.stdout.strip(): return result.stdout.strip().split("\n")[0] except Exception: pass return None def get_execution_provider_name(session: ort.InferenceSession) -> str: try: providers = session.get_providers() if "CUDAExecutionProvider" in providers: return "CUDA" elif "CPUExecutionProvider" in providers: return "CPU" elif providers: return providers[0].replace("ExecutionProvider", "") return "Unknown" except Exception: return "Unknown"