mirror of
https://github.com/vladmandic/automatic
synced 2026-09-19 17:24:32 +02:00
fix global state tracking
Signed-off-by: Vladimir Mandic <mandic00@live.com>
This commit is contained in:
+14
-17
@@ -25,9 +25,11 @@ def get_reason(val):
|
||||
reason = ', '.join([throttle[i] for i in throttle if i & val])
|
||||
return reason if len(reason) > 0 else 'ok'
|
||||
|
||||
|
||||
def get_nvml():
|
||||
global nvml_initialized # pylint: disable=global-statement
|
||||
try:
|
||||
from modules.memstats import ram_stats
|
||||
if not nvml_initialized:
|
||||
install('pynvml', quiet=True)
|
||||
import pynvml # pylint: disable=redefined-outer-name
|
||||
@@ -44,33 +46,28 @@ def get_nvml():
|
||||
except Exception:
|
||||
name = ''
|
||||
load = pynvml.nvmlDeviceGetUtilizationRates(dev)
|
||||
"""
|
||||
'load': {
|
||||
'gpu': round(load.gpu),
|
||||
'memory': round(load.memory),
|
||||
'temp': pynvml.nvmlDeviceGetTemperature(dev, 0),
|
||||
'fan': pynvml.nvmlDeviceGetFanSpeed(dev),
|
||||
},
|
||||
'chart_val1': load.memory,
|
||||
'chart_val2': load.gpu,
|
||||
}
|
||||
"""
|
||||
mem = pynvml.nvmlDeviceGetMemoryInfo(dev)
|
||||
ram = ram_stats()
|
||||
data = {
|
||||
"CUDA": f'version {pynvml.nvmlSystemGetCudaDriverVersion()} compute {pynvml.nvmlDeviceGetCudaComputeCapability(dev)}',
|
||||
"CUDA": f'Version {pynvml.nvmlSystemGetCudaDriverVersion()} Compute {pynvml.nvmlDeviceGetCudaComputeCapability(dev)}',
|
||||
"Driver": pynvml.nvmlSystemGetDriverVersion(),
|
||||
"Hardware": f'VBIOS {pynvml.nvmlDeviceGetVbiosVersion(dev)} ROM {pynvml.nvmlDeviceGetInforomImageVersion(dev)}',
|
||||
"PCI link": f'gen.{pynvml.nvmlDeviceGetCurrPcieLinkGeneration(dev)} x{pynvml.nvmlDeviceGetCurrPcieLinkWidth(dev)}',
|
||||
"PCI link": f'Gen.{pynvml.nvmlDeviceGetCurrPcieLinkGeneration(dev)} x{pynvml.nvmlDeviceGetCurrPcieLinkWidth(dev)}',
|
||||
"Power": f'{round(pynvml.nvmlDeviceGetPowerUsage(dev)/1000, 2)} W / {round(pynvml.nvmlDeviceGetEnforcedPowerLimit(dev)/1000, 2)} W',
|
||||
"GPU clock": f'{pynvml.nvmlDeviceGetClockInfo(dev, 0)} Mhz / {pynvml.nvmlDeviceGetMaxClockInfo(dev, 0)} Mhz',
|
||||
"SM clock": f'{pynvml.nvmlDeviceGetClockInfo(dev, 1)} Mhz / {pynvml.nvmlDeviceGetMaxClockInfo(dev, 1)} Mhz',
|
||||
"Memory clock": f'{pynvml.nvmlDeviceGetClockInfo(dev, 2)} Mhz / {pynvml.nvmlDeviceGetMaxClockInfo(dev, 2)} Mhz',
|
||||
"Memory usage": f'used {round(mem.used / 1024 / 1024)} MB | free {round(mem.free / 1024 / 1024)} MB | total {round(mem.total / 1024 / 1024)} MB',
|
||||
"System load": f'GPU {load.gpu}% | Memory {load.memory}% | temp {pynvml.nvmlDeviceGetTemperature(dev, 0)}C | fan {pynvml.nvmlDeviceGetFanSpeed(dev)}%',
|
||||
"VRAM clock": f'{pynvml.nvmlDeviceGetClockInfo(dev, 2)} Mhz / {pynvml.nvmlDeviceGetMaxClockInfo(dev, 2)} Mhz',
|
||||
"VRAM usage": f'{round(100 * mem.used / mem.total)}% | {round(mem.used / 1024 / 1024)} MB used | {round(mem.free / 1024 / 1024)} MB free | {round(mem.total / 1024 / 1024)} MB total',
|
||||
"RAM usage": f'{round(100 * ram["used"] / ram["total"])}% | {round(1024 * ram["used"])} MB used | {round(1024 * ram["free"])} MB free | {round(1024 * ram["total"])} MB total',
|
||||
"System load": f'GPU {load.gpu}% | VRAM {load.memory}% | Temp {pynvml.nvmlDeviceGetTemperature(dev, 0)}C | Fan {pynvml.nvmlDeviceGetFanSpeed(dev)}%',
|
||||
'State': get_reason(pynvml.nvmlDeviceGetCurrentClocksThrottleReasons(dev)),
|
||||
}
|
||||
chart = [load.memory, load.gpu]
|
||||
devices.append({ 'name': name, 'data': data, 'chart': chart })
|
||||
devices.append({
|
||||
'name': name,
|
||||
'data': data,
|
||||
'chart': chart,
|
||||
})
|
||||
# log.debug(f'nmvl: {devices}')
|
||||
return devices
|
||||
except Exception as e:
|
||||
|
||||
+12
-5
@@ -3,12 +3,14 @@ import json
|
||||
import subprocess as sp
|
||||
from enum import IntFlag
|
||||
|
||||
|
||||
try:
|
||||
from installer import log
|
||||
except Exception:
|
||||
import logging
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
try:
|
||||
from modules.rocm import version as rocm_version
|
||||
except Exception:
|
||||
@@ -87,14 +89,19 @@ def get_rocm_smi():
|
||||
"PCI link": f'Gen.{int(math.log2(float(rocm_smi_data[key].get("pcie_link_speed (0.1 GT/s)", 10)) / 10))} x{rocm_smi_data[key].get("pcie_link_width (Lanes)", "unknown")}',
|
||||
"Power": f'{round(float(rocm_smi_data[key].get("Average Graphics Package Power (W)", 0)), 2)} W / {round(float(rocm_smi_data[key].get("Max Graphics Package Power (W)", 0)), 2)} W',
|
||||
"GPU clock": f'{rocm_smi_data[key].get("average_gfxclk_frequency (MHz)", 0)} Mhz / {rocm_smi_data[key].get("Valid sclk range", "0").split(" - ")[-1].removesuffix("Mhz")} Mhz',
|
||||
"Memory clock": f'{rocm_smi_data[key].get("current_uclk (MHz)", 0)} Mhz / {rocm_smi_data[key].get("Valid mclk range", "0").split(" - ")[-1].removesuffix("Mhz")} Mhz',
|
||||
"Memory usage": f'used {load["memory"]}% | activity {rocm_smi_data[key].get("GPU Memory Read/Write Activity (%)", "unknown")}%',
|
||||
"GPU usage": f'GPU {load["gpu"]}% | fan {load["fan"]}%',
|
||||
"GPU temp": f'edge {load["temp"]}C | junction {load["temp_junction"]}C | memory {load["temp_memory"]}C',
|
||||
"VRAM clock": f'{rocm_smi_data[key].get("current_uclk (MHz)", 0)} Mhz / {rocm_smi_data[key].get("Valid mclk range", "0").split(" - ")[-1].removesuffix("Mhz")} Mhz',
|
||||
"VRAM usage": f'{load["memory"]}% Used | {rocm_smi_data[key].get("GPU Memory Read/Write Activity (%)", "unknown")}% Activity',
|
||||
"GPU usage": f'GPU {load["gpu"]}% | Fan {load["fan"]}%',
|
||||
"GPU temp": f'Edge {load["temp"]}C | Junction {load["temp_junction"]}C | Memory {load["temp_memory"]}C',
|
||||
'Throttle reason': str(ThrottleStatus(int(rocm_smi_data[key].get("throttle_status", 0)))),
|
||||
}
|
||||
name = rocm_smi_data[key].get('Device Name', 'unknown')
|
||||
chart = [load["memory"], load["gpu"]]
|
||||
devices.append({ 'name': rocm_smi_data[key].get('Device Name', 'unknown'), 'data': data, 'chart': chart })
|
||||
devices.append({
|
||||
'name': name,
|
||||
'data': data,
|
||||
'chart': chart,
|
||||
})
|
||||
return devices
|
||||
except Exception as e:
|
||||
log.error(f'ROCm SMI: {e}')
|
||||
|
||||
Reference in New Issue
Block a user