Gregory-L's picture
fork mindXtrain from GitHub (Professor-Codephreak/mindXtrain@661bd41) as the mindX-specific line
dfb775d verified
Raw History Blame Contribute Delete
1.15 kB
"""Energy / power telemetry — wraps `rocm-smi --showpower --json`.
Returns 0.0 W if the binary isn't on PATH (typical CPU-only dev box).
"""
from __future__ import annotations
import json
import shutil
import subprocess
def sample_power_w(gpu_index: int = 0) -> float:
"""Return current GPU power draw in watts; 0.0 if `rocm-smi` is unavailable."""
if shutil.which("rocm-smi") is None:
return 0.0
try:
out = subprocess.run(
["rocm-smi", "--showpower", "--json"],
capture_output=True,
text=True,
timeout=5.0,
check=False,
)
except (subprocess.TimeoutExpired, OSError):
return 0.0
if out.returncode != 0:
return 0.0
try:
data = json.loads(out.stdout)
except json.JSONDecodeError:
return 0.0
card_key = f"card{gpu_index}"
card = data.get(card_key) or {}
for k, v in card.items():
if "power" in k.lower():
try:
return float(str(v).replace("W", "").strip())
except ValueError:
continue
return 0.0
__all__ = ["sample_power_w"]