Spaces:
Sleeping
Sleeping
import GPUtil | |
import matplotlib.pyplot as plt | |
import os | |
import psutil | |
import gradio as gr | |
# TODO: Use plotly trace to update a plot of the stats; try to get near parity to system monitor | |
# Ask: what stats are users most interested in knowing? | |
def get_stats(plot): | |
stats = "" | |
# Get CPU usage | |
cpu_percent = psutil.cpu_percent(interval=0) | |
# Get the number of CPU cores | |
num_cores = os.cpu_count() | |
# Get RAM usage | |
ram = psutil.virtual_memory() | |
total_ram = psutil.virtual_memory().total | |
stats += f"CPU Usage: {cpu_percent}%\n" | |
stats += f"Number of CPU Cores: {num_cores}\n" | |
stats += f"RAM Usage: {ram.percent}%\n" | |
stats += f"RAM Used: {ram.used / (1024 ** 3):.2f} GB\n" | |
stats += f"Total RAM: {total_ram / (1024 ** 3):.2f} GB\n" | |
# print(f"CPU Usage: {cpu_percent}%") | |
# print(f"Number of CPU Cores: {num_cores}") | |
# print(f"RAM Usage: {ram.percent}%") | |
# print(f"RAM Used: {ram.used / (1024 ** 3):.2f} GB") | |
# print(f"Total RAM: {total_ram / (1024 ** 3):.2f} GB") | |
# Get GPU usage and memory info | |
gpu_info = GPUtil.getGPUs() | |
for i, gpu in enumerate(gpu_info): | |
stats += f"GPU {i + 1}:\n" | |
stats += f" GPU Name: {gpu.name}\n" | |
stats += f" GPU Usage: {gpu.load * 100}%\n" | |
stats += f" GPU VRAM Usage: {(gpu.memoryUtil * 100):.2f}%\n" | |
stats += f" GPU Free VRAM: {(gpu.memoryFree / 1024):.2f} MB\n" | |
stats += f" GPU Total VRAM: {gpu.memoryTotal / 1024} MB\n\n" | |
# print(f"GPU {i + 1}:") | |
# print(f" GPU Name: {gpu.name}") | |
# print(f" GPU Usage: {gpu.load * 100}%") | |
# print(f" GPU VRAM Usage: {(gpu.memoryUtil * 100):.2f}%") | |
# print(f" GPU Free VRAM: {(gpu.memoryFree / 1024):.2f} MB") | |
# print(f" GPU Total VRAM: {gpu.memoryTotal / 1024} MB\n") | |
return stats, None | |
with gr.Blocks() as demo: | |
gr.Markdown(value='# System Monitor') | |
with gr.Row(): | |
with gr.Column(scale=1): | |
gr.Markdown('## View system resource usage for the demo') | |
stats_box = gr.TextArea(label="System Stats") | |
with gr.Column(scale=1): | |
plot = gr.Plot(label="Plot", value=None) | |
dep = demo.load(get_stats, [plot], [stats_box, plot], every=5) | |
stats_box.change(get_stats, [plot], [stats_box, plot], every=5, cancels=[dep]) | |
with gr.Accordion('Developer Notes:', open=False): | |
gr.Markdown('I\'ve seen a number of Ai tools that report system resource usage and think that is a good trend.\n\n' | |
'With more time I could see a "Task Manager" component for gradio being useful for demos.\n\n' | |
'The plot for this demo is broken but I may revisit this later.') | |
if __name__ == '__main__': | |
demo.queue().launch() | |