ECGLight / utils /hardware.py
nsrek's picture
Upload folder using huggingface_hub
e4d73f9 verified
Raw
History Blame Contribute Delete
1.75 kB
# utils/hardware.py
"""
Cached hardware detection for the ECG Dashboard sidebar.
Uses @st.cache_data to avoid re-running expensive subprocess/torch calls on every Streamlit rerun.
"""
import platform
import subprocess
import streamlit as st
@st.cache_data(show_spinner=False)
def get_cpu_name() -> str:
"""Detect CPU name. Cached so it only runs once per session."""
try:
return subprocess.check_output(
"wmic cpu get name", shell=True
).decode().split("\n")[1].strip()
except Exception:
return platform.processor().split(',')[0].strip()
@st.cache_data(show_spinner=False)
def get_gpu_info() -> dict:
"""
Detect GPU availability and details.
Cached so the heavy `import torch` only happens once per session.
Returns dict with keys: available, name, vram_gb.
"""
try:
import torch
if torch.cuda.is_available():
return {
"available": True,
"name": torch.cuda.get_device_name(0),
"vram_gb": torch.cuda.get_device_properties(0).total_memory / 1e9
}
except ImportError:
pass
return {"available": False, "name": None, "vram_gb": None}
def render_sidebar_hardware():
"""Render the hardware info panel in the sidebar using cached data."""
st.sidebar.markdown("### πŸ” Clinical Workstation Info")
cpu = get_cpu_name()
st.sidebar.markdown(f"**πŸ–₯️ CPU:**\n`{cpu}`")
gpu = get_gpu_info()
if gpu["available"]:
st.sidebar.markdown(
f"**πŸš€ GPU:**\n`{gpu['name']}`\n"
f"`CUDA Active | VRAM: {gpu['vram_gb']:.1f} GB`"
)
else:
st.sidebar.markdown("**πŸš€ GPU:**\n`Not Detected (Running on CPU)`")