From f9c8c88e13806cb8a47016f6de7dedcb36d68097 Mon Sep 17 00:00:00 2001
From: TKS <32640296+bigsk1@users.noreply.github.com>
Date: Mon, 25 Nov 2024 12:32:14 -0800
Subject: [PATCH] add post gpu monitor
---
_posts/2024-11-24-GPU-Monitor.md | 461 +++++++++++++++++++++++++
assets/images/headers/gpu-monitor.webp | Bin 0 -> 17850 bytes
2 files changed, 461 insertions(+)
create mode 100644 _posts/2024-11-24-GPU-Monitor.md
create mode 100644 assets/images/headers/gpu-monitor.webp
diff --git a/_posts/2024-11-24-GPU-Monitor.md b/_posts/2024-11-24-GPU-Monitor.md
new file mode 100644
index 0000000..bb29bf4
--- /dev/null
+++ b/_posts/2024-11-24-GPU-Monitor.md
@@ -0,0 +1,461 @@
+---
+title: Nvidia GPU Monitor
+date: 2024-11-24 12:05:00 -500
+categories: [nvidia]
+tags: [docker,gpu,monitoring] # Tag should always be in lowercase
+image:
+ path: /assets/images/headers/gpu-monitor.webp
+---
+
+# GPU Monitor: Your NVIDIA GPU's Best Friend 🎮
+
+Ever wondered what your GPU is up to? Whether you're training ML models, rendering videos, or gaming hard, keeping an eye on your GPU's health is crucial. Enter GPU Monitor - a sleek, real-time dashboard that turns boring metrics into beautiful visualizations.
+
+## Who Needs This?
+
+- **ML Engineers** training models for days (Is that GPU throttling?)
+- **Content Creators** rendering their masterpieces (Why is this export taking so long?)
+- **Gamers** pushing their hardware to the limit (Is it time to dial back those settings?)
+
+## Why You'll Love It
+
+- **Real-time Metrics**: Temperature, utilization, memory usage, and power consumption at a glance
+- **Historical Data**: See how your GPU performs over time (15min to 24hr views)
+- **Smart Alerts**: Get notified when your GPU needs attention
+- **Clean Interface**: Modern, dark theme dashboard that's easy on the eyes
+- **Lightweight**: Uses minimal resources while monitoring
+- **Docker-based**: Run it anywhere, no messy installations
+
+## Quick Setup
+
+1. Got Docker? You're halfway there! Just run:
+```bash
+docker run -d \
+ --name gpu-monitor \
+ -p 8081:8081 \
+ -e TZ=America/Los_Angeles \
+ -v /etc/localtime:/etc/localtime:ro \
+ -v ./history:/app/history \
+ -v ./logs:/app/logs \
+ --gpus all \
+ --restart unless-stopped \
+ bigsk1/gpu-monitor:latest
+```
+
+2. Open `http://localhost:8081` in your browser
+
+3. Watch your GPU metrics come alive!
+
+
+## Cool Features You Might Not Expect
+
+- **Clickable Gauges**: Toggle different metrics on the performance graph
+- **Intelligent Alerts**: Set custom thresholds for temperature, utilization, and power
+- **Sound Notifications**: Hear when your GPU needs attention (customizable)
+- **Browser Notifications**: Stay informed even when the tab isn't active
+- **Data Persistence**: Track performance across restarts
+- **Mobile Responsive**: Check your GPU from your phone
+
+## Real-world Uses
+
+### For ML Engineers
+Track GPU utilization during training runs. Is your model actually using the GPU efficiently? Are you thermal throttling? GPU Monitor helps you optimize your training pipelines.
+
+### For Content Creators
+Monitor rendering jobs without constantly checking task manager. Get notified when renders complete or if your GPU is struggling.
+
+### For Gamers
+Keep an eye on temperatures during intense gaming sessions. Perfect for overclocking experiments or optimizing game settings.
+
+
+## Pro Tips
+- Set custom alert thresholds based on your GPU's specs
+- Use browser notifications for headless setups
+- Check historical data to identify performance patterns
+- Monitor power efficiency for optimal workloads
+
+
+## Join the Community
+
+Found a bug? Have a feature request? Want to contribute? Check out our [GitHub repository](https://github.com/bigsk1/gpu-monitor)!
+
+---
+
+Remember: A watched GPU never throttles! 🚀
+
+## Github Readme
+
+
+![Docker support](https://img.shields.io/badge/docker-supported-blue)
+[![Docker Pulls](https://img.shields.io/docker/pulls/bigsk1/gpu-monitor)](https://hub.docker.com/r/bigsk1/gpu-monitor)
+[![Docker Image Size](https://img.shields.io/docker/image-size/bigsk1/gpu-monitor)](https://hub.docker.com/r/bigsk1/gpu-monitor)
+
+
+# Nvidia GPU Dashboard
+
+A real-time lightweight NVIDIA GPU monitoring dashboard built with Docker for easy deployment and cross-platform compatibility.
+
+https://github.com/user-attachments/assets/cd6cbe1f-33f0-47d5-8b30-29e4d08e90b4
+
+
+## Quick Navigation 🔍
+
+
+ Features
+
+ - [Features](#features)
+
+
+
+
+ Prerequisites
+
+ - [Prerequisites](#prerequisites)
+
+
+
+
+ Quick Start
+
+ - [Using Pre-built Image](#using-pre-built-image)
+ - [Using Docker Compose](#using-docker-compose)
+
+
+
+
+ Installation Prerequisites
+
+ - [Ubuntu / Debian / WSL](#1-ubuntu--debian--wsl)
+ - [Install NVIDIA Container Toolkit](#2-install-nvidia-container-toolkit)
+ - [Configure Docker with Toolkit](#3-configure-docker-with-toolkit)
+ - [Restart Docker Daemon](#4-restart-docker-daemon)
+ - [Test Installation](#5-test-to-see-if-installed-correctly)
+
+
+
+
+ Building gpu-monitor from Source
+
+ - [Clone and Build the Repository](#building-gpu-monitor-from-source)
+
+
+
+
+ Configuration
+
+ - [Access the Dashboard](#configuration)
+
+
+
+
+ Alternative Setup Method
+
+ - [Setup Script Instructions](#alternative-setup-method)
+
+
+
+
+ Data Persistence
+
+ - [Managing Data Persistence](#data-persistence)
+
+
+
+
+ Alerts
+
+ - [Configuring Alerts](#alerts)
+
+
+
+
+ Troubleshooting
+
+ - [Common Issues](#common-issues)
+
+
+
+
+ License
+
+ - [License](#license)
+
+
+
+
+## Features
+
+- Real-time GPU metrics monitoring
+- Interactive web dashboard
+- Historical data tracking (15m, 30m, 1h, 6h, 12h, 24h)
+- Temperature, utilization, memory, and power monitoring
+- Docker-based for easy deployment
+- Persist history between new containers
+- Real time alerts - sound and notification
+- Responsive theme for any size screen
+- Toggle gauges on or off to show metrics in graph
+
+## Prerequisites
+
+- Docker
+- NVIDIA GPU
+- NVIDIA Container Toolkit
+
+## Quick Start
+
+Test to see if you already have the requirements and ready to use.
+
+```bash
+sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
+```
+If this failed proceed to [Installation Prerequisites](#installation-prerequisites)
+
+
+
+### Using Pre-built Image
+
+```bash
+docker run -d \
+ --name gpu-monitor \
+ -p 8081:8081 \
+ -e TZ=America/Los_Angeles \
+ -v /etc/localtime:/etc/localtime:ro \
+ -v ./history:/app/history \
+ -v ./logs:/app/logs \
+ --gpus all \
+ --restart unless-stopped \
+ bigsk1/gpu-monitor:latest
+```
+Note: Update your timezone to use the correct time
+### Using Docker Compose
+
+1. Clone the repository:
+```bash
+git clone https://github.com/bigsk1/gpu-monitor.git
+cd gpu-monitor
+```
+
+2. Start the container:
+```bash
+docker-compose up -d
+```
+
+3. Access the dashboard at: [http://localhost:8081](http://localhost:8081)
+
+
+
+## Installation Prerequisites
+
+
+### 1. Ubuntu / Debian / WSL
+Windows users make sure you have wsl with docker an easy way is [Docker Desktop Installation for Windows](https://docs.docker.com/desktop/setup/install/windows-install/)
+
+Installing with apt add NVIDIA package repositories
+
+```bash
+curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
+ && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
+ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
+ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
+```
+
+### 2. Install nvidia container toolkit
+
+```bash
+sudo apt-get update
+```
+```bash
+sudo apt-get install -y nvidia-container-toolkit
+```
+
+### 3. Configure Docker with toolkit
+
+```bash
+sudo nvidia-ctk runtime configure --runtime=docker
+```
+The nvidia-ctk command modifies the /etc/docker/daemon.json file on the host. The file is updated so that Docker can use the NVIDIA Container Runtime.
+
+
+### 4. Restart Docker daemon
+
+```bash
+sudo systemctl restart docker
+```
+
+### 5. Test to see if installed correctly
+
+```bash
+sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
+```
+
+
+For other distributions, check the [official documentation](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html).
+
+
+## Building gpu-monitor from source
+
+1. Clone the repository:
+```bash
+git clone https://github.com/bigsk1/gpu-monitor.git
+cd gpu-monitor
+```
+
+2. Build the image:
+```bash
+docker build -t gpu-monitor .
+```
+
+3. Run the container:
+```bash
+docker run -d \
+ --name gpu-monitor \
+ -p 8081:8081 \
+ -e TZ=America/Los_Angeles \
+ -v /etc/localtime:/etc/localtime:ro \
+ -v ./history:/app/history \
+ -v ./logs:/app/logs \
+ --gpus all \
+ --restart unless-stopped \
+ gpu-monitor
+```
+
+## Configuration
+
+The dashboard is accessible at: [http://localhost:8081](http://localhost:8081)
+ by default. To change the port, modify the `docker-compose.yml` file or the `-p` parameter in the docker run command.
+
+---
+
+![GPU Monitor Dashboard](https://imagedelivery.net/WfhVb8dSNAAvdXUdMfBuPQ/a081bac1-e86f-4833-91ad-a1d64c994200/public)
+
+
+## Alternative Setup Method
+
+A setup script is provided for convenience. It checks prerequisites and manages the service:
+
+- If you have issues then make sure `setup.sh` is executable
+
+```bash
+chmod +x ./setup.sh
+```
+
+---
+- Check prerequisites and start the service
+```bash
+./setup.sh start
+```
+---
+- Stop the service
+```bash
+./setup.sh stop
+```
+---
+- Restart the service
+```bash
+./setup.sh restart
+```
+---
+- Check service status
+```bash
+./setup.sh status
+```
+---
+- View logs
+```bash
+./setup.sh logs
+```
+
+Example of script running
+```bash
+~/gpu-monitor ./setup.sh start
+[+] Checking prerequisites...
+[+] Docker: Found
+[+] Docker Compose: Found
+[+] NVIDIA Docker Runtime: Found
+[+] NVIDIA GPU: Found
+[+] Starting GPU Monitor...
+Creating network "gpu-monitor_default" with the default driver
+Creating gpu-monitor ... done
+[+] GPU Monitor started successfully!
+[+] Dashboard available at: http://localhost:8081
+[+] To check logs: docker-compose logs -f
+```
+
+
+## Data Persistence
+
+By default, all data is stored within the container will persist between container rebuilds, if you don't want that then remove volumes, modify the docker run or docker-compose.yml:
+
+```yaml
+services:
+ gpu-monitor:
+ # ... other settings ...
+ volumes:
+ - ./history:/app/history # Remove Persist historical data
+ - ./logs:/app/logs # Remove Persist logs
+```
+
+## Alerts
+
+You can enable or disable alerts in ui, you can set thresholds for gpu temp, gpu utilization % and watts. Setting are saved in your browser if you make changes you only need to do it once, however you can always modify the code and rebuild the container to make it permanent.
+
+The defaults are:
+
+```bash
+ temperature: 80,
+ utilization: 100,
+ power: 300
+```
+
+![GPU Monitor Dashboard](https://imagedelivery.net/WfhVb8dSNAAvdXUdMfBuPQ/6799f2b8-aac2-4741-d125-3b4ed7496e00/public)
+
+
+## Troubleshooting
+
+### Common Issues
+
+1. **NVIDIA SMI not found**
+ - Ensure NVIDIA drivers are installed
+ - Verify NVIDIA Container Toolkit installation
+ - Make sure you can run:
+
+```bash
+sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
+```
+If this failed proceed to [Installation Prerequisites](#installation-prerequisites)
+
+2. **Container fails to start**
+ - Check Docker logs: `docker logs gpu-monitor`
+ - Verify GPU access: `nvidia-smi`
+ - Ensure proper permissions
+
+3. **Dashboard not accessible**
+ - Verify container is running: `docker ps`
+ - Check container logs: `docker logs gpu-monitor`
+ - Ensure port 8081 is not in use
+4. **TimeStamps don't match your local time**
+
+ - Replace `America/Los_Angeles` with your timezone
+[List of tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)
+
+5. **I don't like the alert sound**
+ - Replace the .mp3 in the `sounds` folder and name it alert.mp3
+ - Getting double sounds from notifications, disable windows notifications or disable it in ui.
+
+## Mobile Layout
+
+
+
+
+
+
+
+
+
+
+## License
+[![License](https://img.shields.io/github/license/bigsk1/gpu-monitor)](https://github.com/bigsk1/gpu-monitor/blob/main/LICENSE)
+
+Docker Scout Score
+
+![Docker Scout](https://imagedelivery.net/WfhVb8dSNAAvdXUdMfBuPQ/969b5bc9-6c2c-44c7-32a8-359287378a00/public)
\ No newline at end of file
diff --git a/assets/images/headers/gpu-monitor.webp b/assets/images/headers/gpu-monitor.webp
new file mode 100644
index 0000000000000000000000000000000000000000..349c92d6e2f4fbb5733d5ce7199ff8fd430c6969
GIT binary patch
literal 17850
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
CAl5