Skip to content

feat: fleet storage tiers and model placement view - #42

Open
yr75myjnqx-tech wants to merge 8 commits into
MiaAI-Lab:mainfrom
yr75myjnqx-tech:feat/model-tier-storage
Open

feat: fleet storage tiers and model placement view#42
yr75myjnqx-tech wants to merge 8 commits into
MiaAI-Lab:mainfrom
yr75myjnqx-tech:feat/model-tier-storage

Conversation

@yr75myjnqx-tech

@yr75myjnqx-tech yr75myjnqx-tech commented Aug 9, 2026

Copy link
Copy Markdown

Summary

Brings the multi-tier model storage concept to sparkDash for DGX Spark fleets: a read-only Storage view that classifies every Spark's disks into storage tiers, inventories the model weight files on the fleet, and shows where each model lives — both as a local copy and as served across the CX7/ConnectX fabric.

This is fully self-contained: tier classification and model scanning run inside the existing SystemCollector (local + SSH), with no external registry or service dependency.

What's in the PR

Tier classification

Every mounted disk is labeled a tier:

  • Hot — root NVMe (active working copy)
  • Warm — other real local disks
  • Cold — NAS / network mounts (/mnt/modelshelf, /media, /Volumes, /mnt, or any cifs/smb/smb3/nfs/nfs4 filesystem)

Per-Spark tierPaths in config/sparks.json override the heuristic per mount.

Model inventory

The collector scans the configured model directories (grouped per tier via optional per-Spark modelDirs) for weight files — .safetensors, .gguf, .bin, .pt, .pth, .ckpt — and reports each model by name, size, and tier. New models metrics domain, polled via POLL_INTERVAL_MODELS (default 30 s). Each scanned root is inspected one level deep; modelDirs should point at the directory whose direct children are the model folders (for HF-style nesting, the outer family dir, e.g. ~/models/hf).

Dual placement (resident + fabric)

A model is resident on a Spark holding a local copy. A peer that has the model loaded in its LLM probe — matched by model name — serves it to the fleet over the CX7/ConnectX fabric, so that Spark shows the model as placed over the fabric even with no local copy. This mirrors the storage intent: a "hot" model is available to the fleet either from local disk or from a peer's memory across the fabric.

UI

  • New reserved Storage tab (fleet level), plus per-Spark tier cards and a model placement table
  • Each Spark's Storage panel shows a Hot/Warm/Cold badge per disk

Verification

  • npm test — 94 passing (incl. new tierClassify and collectModels unit tests)
  • npm run typecheck and npm run build — clean
  • Live smoke on a DGX Spark (Gx10) — the real mount table classifies correctly (root NVMe → Hot, cifs NAS /mnt/macmini → Cold, other local/snap disks → Warm) and collectModels correctly detected the resident DeepSeek-V4-Flash-0731 (155.4 GiB) from a modelDirs root

Notes for review

  • Read-only and additive: no eviction, promotion, or write actions; no changes to existing storage/liveness behavior
  • Out of scope on purpose: warm-tier USB config UI, eviction/promotion actions, activity history, non-DGX support

…mesg fallback to host journal; test remote default-0
Adds a Storage view that classifies each Spark's mounted disks into hot/warm/cold tiers (root NVMe vs other local disks vs NAS cifs/nfs mounts), scans configured model directories for weight files over a new models metrics domain, and shows both resident (local copy) and CX7/ConnectX-fabric model placement. Per-Spark modelDirs/tierPaths can override the heuristics in config/sparks.json.
# Conflicts:
#	CHANGELOG.md
#	server/sparks/SparkRegistry.js
#	src/components/SparkPage/SparkPage.tsx
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant