GPU Pulse is a compact native macOS menu-bar app for checking GPU memory and utilization across multiple servers. It talks directly to the servers over your existing SSH configuration—there is no hosted backend and no monitoring data is uploaded elsewhere.
The screenshot uses generic SERVER 1–4 labels for privacy. At runtime, the app
lists the explicit Host entries from ~/.ssh/config and lets you choose the
servers to monitor. Dashboard labels use the part before the first dot, so
zxcpu1.cse.example.edu appears as ZXCPU1.
Click the small indigo three-line button beside MEM in a server card
header. It opens the latest process snapshot for that server without starting
another SSH connection.
- GPU is the device index (
#0through#7). When one GPU has multiple processes, its index appears only on the first row and the rows share one tinted group. - USER is the remote operating-system user that owns the process. The slim indigo rail marks the current SSH login user.
- PROCESS is the executable reported by the remote process table.
- TIME is elapsed process runtime, not a start timestamp.
- MEM is GPU memory used by that process. Its green/yellow/red text follows the parent GPU’s current utilization color; it does not rate the memory value itself.
PID is intentionally not displayed. The screenshot uses generic server, username, and process data.
- Four servers are shown in a compact 2×2 grid.
- Additional servers continue in the same two-column grid with vertical scrolling and a compact scrollbar. Four or fewer servers do not show a scrollbar.
- Each row represents one GPU. Bar length is memory usage; green, yellow, and red represent GPU utilization.
MINEhighlights GPUs running processes owned by your SSH login user.- Each server card has one indigo three-line detail button. It opens a compact nvitop-style table covering all GPUs on that server.
- Multiple processes on the same GPU share a compact tinted group, with the GPU
index shown only once and fixed-width
TIMEandMEMcolumns. - Process
MEMvalues use the same green/yellow/red utilization color as their GPU bar. - The detail panel grows to show a typical eight-GPU server at once and scrolls only when the process list would exceed a safe screen height.
- Left-click the menu-bar icon to open the monitor.
- Right-click it to change the refresh interval, toggle Launch at Login, or quit GPU Pulse.
- Only SSH hosts selected in Servers… are contacted.
- On first launch, the Servers window opens automatically before any SSH host is contacted.
- Polling runs only while the panel is open. Closing the panel pauses SSH queries.
- Clicking the desktop or another app automatically closes the panel.
- Download
GPU-Pulse-macOS.zipfrom the latest release. - Unzip it and move
GPU Pulse.appinto/Applications. - Control-click the app and choose Open on the first launch if macOS asks you to confirm the locally signed build.
- On first launch, select the SSH hosts to monitor in the Servers window. You can reopen it later from the menu-bar icon’s right-click menu.
GPU Pulse reads explicit SSH aliases from your existing ~/.ssh/config; no
separate app configuration file is needed. It requires macOS 13 or newer.
Remote hosts must provide nvidia-smi and key-based SSH access.
- Open/close: left-click the menu-bar chart icon.
- Refresh now: click the circular arrow in the upper-right corner.
- GPU process details: click the indigo three-line button beside
MEMin a server card header. - Servers: right-click the menu-bar icon, choose Servers…, then select any number of hosts. The selection is stored only on this Mac.
- Refresh frequency: choose 5, 10, 30, or 60 seconds. The default is 10 seconds.
- Launch at login: enable it from the right-click menu. macOS may ask you to approve it in System Settings → General → Login Items.
- Quit: choose Quit GPU Pulse from the right-click menu.
Right-click the GPU Pulse menu-bar icon to access its controls without opening the dashboard:
- Servers… opens the SSH Host selection window.
- Launch at Login starts GPU Pulse automatically after you sign in to macOS.
- Refresh Interval selects a 5, 10, 30, or 60-second polling interval.
- Quit GPU Pulse stops monitoring and closes the application.
SSH connections are multiplexed for up to 60 seconds to avoid repeating jump host and authentication handshakes. A reconnect may still occur after that idle window expires.
cd app
swift build -c releaseThe monitored hosts are selected from the explicit Host entries in your local
~/.ssh/config; wildcard entries are ignored and full host names are not
embedded in the app.
| Path | Description |
|---|---|
app/ |
Current native SwiftUI macOS application |
web/ |
Previous Streamlit web version |
assets/ |
App icon and privacy-safe README screenshots |
The original Streamlit monitor remains available in web/:
cd web
pip install pandas streamlit
streamlit run monitor.pyIt is retained for reference and is no longer the primary version.


