Skip to content

Visualizing Custom Collector Metrics

Every column produced by a collector ends up as a column in the performance DataFrame. To make it available to %perfmonitor_plot --metrics, add an entry to jumper_extension/config/plots.yaml under subsets::

subsets:
  your_subset:           # group name — also usable as a shorthand key in --metrics
    your_metric_key:     # what the user types in --metrics
      type: single_series
      column: your_column    # column name declared in collectors.yaml handler columns
      title: "Chart title"
      ylim: null             # or [min, max]
      label: "Legend label"

Four built-in plot types are available:

Type Use when
single_series One line from one column
summary_series Three lines (min / avg / max) from three named columns
multi_series One line per device, matched by column prefix
composite_series Multiple columns from any collector on a single panel, with individual labels and colors

Once registered, the metric key works everywhere --metrics is accepted — interactive widgets, direct plots, live mode, and exports.

Controlling which subsets appear by default

When %perfmonitor_plot is called without --metrics, it shows the subsets listed in default_subsets: at the top of plots.yaml:

# plots.yaml
default_subsets: [cpu, mem, io]   # shown when %perfmonitor_plot is called with no --metrics

subsets:
  cpu: ...
  mem: ...
  io: ...
  network: ...   # not shown by default — request with --metrics or add to default_subsets

To make your custom subset part of the default view, append its name:

default_subsets: [cpu, mem, io, network]

GPU subsets (gpu, gpu_all) are appended automatically at runtime when a GPU is detected, regardless of what is listed here.

Example — combining NetworkCollector with disk I/O on one panel

A common HPC and ML scenario: you want to know whether your workload is bottlenecked by the local disk or by the network (e.g. data loaded from a Lustre/NFS mount). Both io_read and net_bytes_recv are collected as cumulative counters and stored in bytes/s — the same unit — so they can be plotted together on one panel using composite_series.

Add to plots.yaml:

subsets:
  network:
    net_vs_disk_read:
      type: composite_series
      series:
        - column: io_read
          label: "Disk Read (bytes/s)"
          color: "steelblue"
          width: 2.0
        - column: net_bytes_recv
          label: "Net Recv (bytes/s)"
          color: "darkorange"
          width: 2.0
      title: "Disk Read vs Network Receive (bytes/s)"
      ylim: null
      label: "Disk vs Network"

Note

composite_series renders columns without unit conversion. io_read will appear in bytes/s here, not MB/s (which is what single_series applies automatically). Both series stay on the same scale, making the comparison valid.

Then plot it — use --level system because network counters are only meaningful at the system level:

%perfmonitor_plot --metrics net_vs_disk_read --level system

Or in live mode:

%perfmonitor_plot --live --metrics net_vs_disk_read --level system

A high net_bytes_recv with low io_read means data is arriving over the network; the inverse points to local disk as the bottleneck.