Skip to content

Commit e8897c1

Browse files
authored
Merge pull request #44 from mathoudebine/fix/unsupported-gpu-memory-values
Fix/unsupported gpu memory values
2 parents f26413f + c9a6475 commit e8897c1

File tree

1 file changed

+87
-65
lines changed

1 file changed

+87
-65
lines changed

library/stats.py

Lines changed: 87 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -179,68 +179,90 @@ def temperature():
179179
# TODO: Built in function for *nix in psutil, for Windows can use WMI or a third party library
180180

181181

182-
def display_gpu_stats(load, memory_percentage, memory_used, temperature):
182+
def display_gpu_stats(load, memory_percentage, memory_used_mb, temperature):
183183
if THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("SHOW", False):
184-
# logger.debug(f"GPU Load: {load}")
185-
display.lcd.DisplayProgressBar(
186-
x=THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("X", 0),
187-
y=THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("Y", 0),
188-
width=THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("WIDTH", 0),
189-
height=THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("HEIGHT", 0),
190-
value=int(load) if not math.isnan(load) else 0,
191-
min_value=THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("MIN_VALUE", 0),
192-
max_value=THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("MAX_VALUE", 100),
193-
bar_color=THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("BAR_COLOR", (0, 0, 0)),
194-
bar_outline=THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("BAR_OUTLINE", False),
195-
background_color=THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("BACKGROUND_COLOR", (255, 255, 255)),
196-
background_image=get_full_path(THEME_DATA['PATH'],
197-
THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("BACKGROUND_IMAGE",
198-
None))
199-
)
184+
if math.isnan(load):
185+
logger.warning("Your GPU load is not supported yet")
186+
THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH']['SHOW'] = False
187+
THEME_DATA['STATS']['GPU']['PERCENTAGE']['TEXT']['SHOW'] = False
188+
else:
189+
# logger.debug(f"GPU Load: {load}")
190+
display.lcd.DisplayProgressBar(
191+
x=THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("X", 0),
192+
y=THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("Y", 0),
193+
width=THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("WIDTH", 0),
194+
height=THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("HEIGHT", 0),
195+
value=int(load),
196+
min_value=THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("MIN_VALUE", 0),
197+
max_value=THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("MAX_VALUE", 100),
198+
bar_color=THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("BAR_COLOR", (0, 0, 0)),
199+
bar_outline=THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("BAR_OUTLINE", False),
200+
background_color=THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("BACKGROUND_COLOR",
201+
(255, 255, 255)),
202+
background_image=get_full_path(THEME_DATA['PATH'],
203+
THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("BACKGROUND_IMAGE",
204+
None))
205+
)
200206

201207
if THEME_DATA['STATS']['GPU']['PERCENTAGE']['TEXT'].get("SHOW", False):
202-
display.lcd.DisplayText(
203-
text=f"{int(load):>3}%" if not math.isnan(load) else f"{int(0):>3}%",
204-
x=THEME_DATA['STATS']['GPU']['PERCENTAGE']['TEXT'].get("X", 0),
205-
y=THEME_DATA['STATS']['GPU']['PERCENTAGE']['TEXT'].get("Y", 0),
206-
font=THEME_DATA['STATS']['GPU']['PERCENTAGE']['TEXT'].get("FONT", "roboto-mono/RobotoMono-Regular.ttf"),
207-
font_size=THEME_DATA['STATS']['GPU']['PERCENTAGE']['TEXT'].get("FONT_SIZE", 10),
208-
font_color=THEME_DATA['STATS']['GPU']['PERCENTAGE']['TEXT'].get("FONT_COLOR", (0, 0, 0)),
209-
background_color=THEME_DATA['STATS']['GPU']['PERCENTAGE']['TEXT'].get("BACKGROUND_COLOR", (255, 255, 255)),
210-
background_image=get_full_path(THEME_DATA['PATH'],
211-
THEME_DATA['STATS']['GPU']['PERCENTAGE']['TEXT'].get("BACKGROUND_IMAGE",
212-
None))
213-
)
208+
if math.isnan(load):
209+
logger.warning("Your GPU load is not supported yet")
210+
THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH']['SHOW'] = False
211+
THEME_DATA['STATS']['GPU']['PERCENTAGE']['TEXT']['SHOW'] = False
212+
else:
213+
display.lcd.DisplayText(
214+
text=f"{int(load):>3}%",
215+
x=THEME_DATA['STATS']['GPU']['PERCENTAGE']['TEXT'].get("X", 0),
216+
y=THEME_DATA['STATS']['GPU']['PERCENTAGE']['TEXT'].get("Y", 0),
217+
font=THEME_DATA['STATS']['GPU']['PERCENTAGE']['TEXT'].get("FONT", "roboto-mono/RobotoMono-Regular.ttf"),
218+
font_size=THEME_DATA['STATS']['GPU']['PERCENTAGE']['TEXT'].get("FONT_SIZE", 10),
219+
font_color=THEME_DATA['STATS']['GPU']['PERCENTAGE']['TEXT'].get("FONT_COLOR", (0, 0, 0)),
220+
background_color=THEME_DATA['STATS']['GPU']['PERCENTAGE']['TEXT'].get("BACKGROUND_COLOR",
221+
(255, 255, 255)),
222+
background_image=get_full_path(THEME_DATA['PATH'],
223+
THEME_DATA['STATS']['GPU']['PERCENTAGE']['TEXT'].get("BACKGROUND_IMAGE",
224+
None))
225+
)
214226

215227
if THEME_DATA['STATS']['GPU']['MEMORY']['GRAPH'].get("SHOW", False):
216-
# logger.debug(f"GPU Load: {load}")
217-
display.lcd.DisplayProgressBar(
218-
x=THEME_DATA['STATS']['GPU']['MEMORY']['GRAPH'].get("X", 0),
219-
y=THEME_DATA['STATS']['GPU']['MEMORY']['GRAPH'].get("Y", 0),
220-
width=THEME_DATA['STATS']['GPU']['MEMORY']['GRAPH'].get("WIDTH", 0),
221-
height=THEME_DATA['STATS']['GPU']['MEMORY']['GRAPH'].get("HEIGHT", 0),
222-
value=int(memory_percentage),
223-
min_value=THEME_DATA['STATS']['GPU']['MEMORY']['GRAPH'].get("MIN_VALUE", 0),
224-
max_value=THEME_DATA['STATS']['GPU']['MEMORY']['GRAPH'].get("MAX_VALUE", 100),
225-
bar_color=THEME_DATA['STATS']['GPU']['MEMORY']['GRAPH'].get("BAR_COLOR", (0, 0, 0)),
226-
bar_outline=THEME_DATA['STATS']['GPU']['MEMORY']['GRAPH'].get("BAR_OUTLINE", False),
227-
background_color=THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("BACKGROUND_COLOR", (255, 255, 255)),
228-
background_image=get_full_path(THEME_DATA['PATH'],
229-
THEME_DATA['STATS']['GPU']['MEMORY']['GRAPH'].get("BACKGROUND_IMAGE", None))
230-
)
228+
if math.isnan(memory_percentage):
229+
logger.warning("Your GPU memory relative usage (%) is not supported yet")
230+
THEME_DATA['STATS']['GPU']['MEMORY']['GRAPH']['SHOW'] = False
231+
else:
232+
display.lcd.DisplayProgressBar(
233+
x=THEME_DATA['STATS']['GPU']['MEMORY']['GRAPH'].get("X", 0),
234+
y=THEME_DATA['STATS']['GPU']['MEMORY']['GRAPH'].get("Y", 0),
235+
width=THEME_DATA['STATS']['GPU']['MEMORY']['GRAPH'].get("WIDTH", 0),
236+
height=THEME_DATA['STATS']['GPU']['MEMORY']['GRAPH'].get("HEIGHT", 0),
237+
value=int(memory_percentage),
238+
min_value=THEME_DATA['STATS']['GPU']['MEMORY']['GRAPH'].get("MIN_VALUE", 0),
239+
max_value=THEME_DATA['STATS']['GPU']['MEMORY']['GRAPH'].get("MAX_VALUE", 100),
240+
bar_color=THEME_DATA['STATS']['GPU']['MEMORY']['GRAPH'].get("BAR_COLOR", (0, 0, 0)),
241+
bar_outline=THEME_DATA['STATS']['GPU']['MEMORY']['GRAPH'].get("BAR_OUTLINE", False),
242+
background_color=THEME_DATA['STATS']['GPU']['PERCENTAGE']['GRAPH'].get("BACKGROUND_COLOR",
243+
(255, 255, 255)),
244+
background_image=get_full_path(THEME_DATA['PATH'],
245+
THEME_DATA['STATS']['GPU']['MEMORY']['GRAPH'].get("BACKGROUND_IMAGE",
246+
None))
247+
)
231248

232249
if THEME_DATA['STATS']['GPU']['MEMORY']['TEXT'].get("SHOW", False):
233-
display.lcd.DisplayText(
234-
text=f"{int(memory_used / 1000000):>5} M",
235-
x=THEME_DATA['STATS']['GPU']['MEMORY']['TEXT'].get("X", 0),
236-
y=THEME_DATA['STATS']['GPU']['MEMORY']['TEXT'].get("Y", 0),
237-
font=THEME_DATA['STATS']['GPU']['MEMORY']['TEXT'].get("FONT", "roboto-mono/RobotoMono-Regular.ttf"),
238-
font_size=THEME_DATA['STATS']['GPU']['MEMORY']['TEXT'].get("FONT_SIZE", 10),
239-
font_color=THEME_DATA['STATS']['GPU']['MEMORY']['TEXT'].get("FONT_COLOR", (0, 0, 0)),
240-
background_color=THEME_DATA['STATS']['GPU']['MEMORY']['TEXT'].get("BACKGROUND_COLOR", (255, 255, 255)),
241-
background_image=get_full_path(THEME_DATA['PATH'],
242-
THEME_DATA['STATS']['GPU']['MEMORY']['TEXT'].get("BACKGROUND_IMAGE", None))
243-
)
250+
if math.isnan(memory_used_mb):
251+
logger.warning("Your GPU memory absolute usage (M) is not supported yet")
252+
THEME_DATA['STATS']['GPU']['MEMORY']['TEXT']['SHOW'] = False
253+
else:
254+
display.lcd.DisplayText(
255+
text=f"{int(memory_used_mb):>5} M",
256+
x=THEME_DATA['STATS']['GPU']['MEMORY']['TEXT'].get("X", 0),
257+
y=THEME_DATA['STATS']['GPU']['MEMORY']['TEXT'].get("Y", 0),
258+
font=THEME_DATA['STATS']['GPU']['MEMORY']['TEXT'].get("FONT", "roboto-mono/RobotoMono-Regular.ttf"),
259+
font_size=THEME_DATA['STATS']['GPU']['MEMORY']['TEXT'].get("FONT_SIZE", 10),
260+
font_color=THEME_DATA['STATS']['GPU']['MEMORY']['TEXT'].get("FONT_COLOR", (0, 0, 0)),
261+
background_color=THEME_DATA['STATS']['GPU']['MEMORY']['TEXT'].get("BACKGROUND_COLOR", (255, 255, 255)),
262+
background_image=get_full_path(THEME_DATA['PATH'],
263+
THEME_DATA['STATS']['GPU']['MEMORY']['TEXT'].get("BACKGROUND_IMAGE",
264+
None))
265+
)
244266

245267
if THEME_DATA['STATS']['GPU']['TEMPERATURE']['TEXT'].get("SHOW", False):
246268
display.lcd.DisplayText(
@@ -265,20 +287,20 @@ def stats():
265287
nvidia_gpus = GPUtil.getGPUs()
266288

267289
memory_used_all = [item.memoryUsed for item in nvidia_gpus]
268-
memory_used = sum(memory_used_all) / len(memory_used_all)
290+
memory_used_mb = sum(memory_used_all) / len(memory_used_all)
269291

270292
memory_total_all = [item.memoryTotal for item in nvidia_gpus]
271-
memory_total = sum(memory_total_all) / len(memory_total_all)
293+
memory_total_mb = sum(memory_total_all) / len(memory_total_all)
272294

273-
memory_percentage = (memory_used / memory_total) * 100
295+
memory_percentage = (memory_used_mb / memory_total_mb) * 100
274296

275297
load_all = [item.load for item in nvidia_gpus]
276298
load = (sum(load_all) / len(load_all)) * 100
277299

278300
temperature_all = [item.temperature for item in nvidia_gpus]
279301
temperature = sum(temperature_all) / len(temperature_all)
280302

281-
display_gpu_stats(load, memory_percentage, memory_used, temperature)
303+
display_gpu_stats(load, memory_percentage, memory_used_mb, temperature)
282304

283305
@staticmethod
284306
def is_available():
@@ -297,20 +319,20 @@ def stats():
297319
i = i + 1
298320

299321
memory_used_all = [item.query_vram_usage() for item in amd_gpus]
300-
memory_used = sum(memory_used_all) / len(memory_used_all)
322+
memory_used_bytes = sum(memory_used_all) / len(memory_used_all)
301323

302324
memory_total_all = [item.memory_info["vram_size"] for item in amd_gpus]
303-
memory_total = sum(memory_total_all) / len(memory_total_all)
325+
memory_total_bytes = sum(memory_total_all) / len(memory_total_all)
304326

305-
memory_percentage = (memory_used / memory_total) * 100
327+
memory_percentage = (memory_used_bytes / memory_total_bytes) * 100
306328

307329
load_all = [item.query_load() for item in amd_gpus]
308330
load = (sum(load_all) / len(load_all)) * 100
309331

310332
temperature_all = [item.query_temperature() for item in amd_gpus]
311333
temperature = sum(temperature_all) / len(temperature_all)
312334

313-
display_gpu_stats(load, memory_percentage, memory_used, temperature)
335+
display_gpu_stats(load, memory_percentage, memory_used_bytes / 1000000, temperature)
314336
elif pyadl:
315337
amd_gpus = pyadl.ADLManager.getInstance().getDevices()
316338

@@ -320,8 +342,8 @@ def stats():
320342
temperature_all = [item.getCurrentTemperature() for item in amd_gpus]
321343
temperature = sum(temperature_all) / len(temperature_all)
322344

323-
# Memory usage not supported by pyadl
324-
display_gpu_stats(load, -1, -1, temperature)
345+
# Memory absolute (M) and relative (%) usage not supported by pyadl
346+
display_gpu_stats(load, math.nan, math.nan, temperature)
325347

326348
@staticmethod
327349
def is_available():

0 commit comments

Comments
 (0)