Yet another monitoring dashboard for GB10 clusters or even standalone installs

Spark-dash — yet another monitoring dashboard for GB10 clusters or standalone installs

github.com/anakronox/spark-dash

Everything eventually becomes a dashboard, or at least that’s the meme. This just happens to be the one that I had Claude build for me, the way that I wanted to view the data. I’m putting it out there with the hope that maybe you also find it useful. It’s oh-so-creatively named spark-dash because I’m a network engineer by day and really couldn’t think of anything original.

My main goal in spoon-feeding project directives was that I wanted this to easily support growing clusters of DGX Sparks . It all runs in Docker since I’m not personally crazy about installing software directly to the host Sparks and potentially wrecking a dependency chain for another app. It runs an agent on each GB10 node you have in your deployment and send collected stats to a Prometheus backend, served up by a custom dashboard. There’s also experimental support for a single-host rollout since the central stack builds clean and works on arm64.

Right now this supports llama.cpp with routers, vllm, and sglang. Open to adding any other engines if there’s interest or need. Since I also use ComfyUI and Tdarr on my standalone node, it recognizes those processes.

The biggest difference and the driver behind me vibe-coding my way to this thing (and slight insanity) was that I wanted something where I could host the main dashboard and collector on a central server/vm/lxc and leave the footprint pretty light on the actual inference boxes. No installing the same code on every client across the deployment.

You get 180-day retention of statistics in Prometheus, the custom dashboard, and also a bring-your-own-Grafana option if you’re way smarter than I am and want to roll your own. You can view and be alerted via ntfy.sh of basically everything that apps like nvitop expose. For those clusters out there, RDMA stats on interfaces are tracked, networking alerts are built-in.

Oh and it also has a few themes that are pretty okay. As a feature it only shows read-only data - it’s not responsible for loading/unloading models or services.

Sample Docker compose files are included in the repo to help spin this up.

Getting Started for those brave enough

On your monitoring server:

git clone https://github.com/anakronox/spark-dash && cd spark-dash ./scripts/build-images.sh backend cd central && cp .env.example .env && docker compose up -d

Then on each node you want to monitor:

git clone https://github.com/anakronox/spark-dash && cd spark-dash ./scripts/build-images.sh agent # builds spark-dash-agent:latest cd node cp .env.example .env $EDITOR .env # one value to change: BACKEND_URL docker compose up -d

BACKEND_URL is the address and port from your monitoring host, on the dashboard’s port:

BACKEND_URL=http://10.0.0.10:8080        # the monitoring host, not this node

The agent runs on the node and fetches its configuration from the monitoring host. It’ll be the same value on each node: the agent takes its id from the machine’s hostname, and takes which routers and engines to poll from the config on the monitoring host.

Feedback

I’m half idiot on a good day and if you do try this out, let me know how it works for you and if I can make it better, I’ll be happy to work on it. I really made this for me first and if anything is glaringly missing or that I haven’t thought of I’d be glad to add features where possible.

For being a network engineer I’m pretty surprised you didn’t include any networking graphs in your dashboard.

You let Claude build this? What if it’s a Trojan horse? You know Dario doesn’t like open models.

Fair point, the data is collected just not visualized. Adding that to the roadmap.

Oh no, Dario’s already in the syst -

A lot of work has gone into fixing some honest criticisms and to expose more stats and graphs - everyone loves a good chart! We have so many charts now!

All that new/improved stuff:

  • Added graphs for network stats
  • All cards are draggable to resize vertically and to snap between half and full width
  • Multiple cards of each type can be added so if you’ve want to look at interface charts and RDMA stats (usually on the same card in a separate tab) you can add that
  • Draggable columns on cards to space out info how you want to see it
  • Don’t want to see info on a card - hide that particular stat!
  • Cleaned up settings
  • Themes are now much more legible and accessible
  • Don’t like multiple pages of info? Set each card to scroll instead!
  • Now with exactly 42% more vibes
  • A temperature card to show you all that for your nodes
  • Experimental sglang support, needs more testing
  • Tightened up the UI/UX overall

What isn’t new:

  • Still runs in Docker only
  • Can run on a single GB10 if you really want to do that

Feedback is very much welcome, thanks for checking this out if you do!

Thank you so much for sharing this! It’s nice to see everything in one place - I’m running 4xDGXs with GLM-5.2 across them with TP=4 and had resorted to opening four DGX Dashboards to verify memory usage and actual compute happening on each node.

What did we do before Claude Code? I literally dropped the URL for your Github repo into my Claude Code prompt and said deploy on machine x (it already knew about my cluster since it set it up for me.) It asked me two questions: deploy reporting container on nodes too? Yes, skip notification push for now? Yes. I had dinner and came back to your beautiful dashboard in my browser.

Hey, you’re very welcome and glad you are getting some use out of it! It is a bit scary to think of how easy Claude has made things and also amazing that it made it so easy to drop this in across your cluster!

How much CPU and memory resources on the sparks ? I’ve build a couple of these but the challenge I get is the CPU and memory resources…

Took a survey to answer your question across my 3 GB10 systems, sampled over the past 100 hours:

Node Container RAM now Avg CPU (100h) CPU now
sparky spark-dash-agent 83 MiB 2.2% of one core 0.14%
sparky node-exporter 16 MiB 0.2% of one core 0.00%
sparketa spark-dash-agent 170 MiB 2.6% of one core 0.15%
sparketa node-exporter 17 MiB 0.2% of one core 0.00%
sparkjr spark-dash-agent 131 MiB 2.0% of one core 0.18%
sparkjr node-exporter 18 MiB 0.2% of one core 0.00%


Since each node needs the two containers, the sum of resource usage would be:

Node RAM Avg CPU (100h) Share of the box
sparky 99 MiB 2.4% of one core 0.08% RAM, 0.12% CPU
sparketa 187 MiB 2.8% of one core 0.15% RAM, 0.14% CPU
sparkjr 149 MiB 2.2% of one core 0.12% RAM, 0.11% CPU


It’s up to you if these are lightweight enough for your environment. I’m comfortably running them, especially on the sparketa-sparkjr cluster serving vllm with deepseek v4 flash with vision, fp8 kv cache, 500k context. Each one of those nodes only runs hawser for Dockhand orchestration, a tiny proxy for the DGX Dashboard, this node agent stack, and vllm. Each has ~14.5 GB of shared RAM to spare.

Updated to include a maintenance mode feature - place a single node or entire cluster into maintenance mode when you expect to do work on them: scheduled updates, model/inference stack swaps, reboots. This silences alarms when you intend to take services down.

A lot of updates to the project:

  • Optional DGX OS updates so that managing updates across your nodes is seamless. Uses the same method that the DGX Dashboard does.
  • TensorFold support.
  • Clients view with optional LiteLLM support. See which clients are hitting your nodes and if they rack up errors.
  • Lazy deployment - pull the repo and use your agent to get up and running.