Skip to content

SCHED-1920: Remove DCGM hpc_job job mapping, join via Slurm exporter - #2923

Open
theyoprst wants to merge 2 commits into
mainfrom
SCHED-1920/0
Open

SCHED-1920: Remove DCGM hpc_job job mapping, join via Slurm exporter#2923
theyoprst wants to merge 2 commits into
mainfrom
SCHED-1920/0

Conversation

@theyoprst

@theyoprst theyoprst commented Sep 1, 2026

Copy link
Copy Markdown
Collaborator

Problem

DCGM metrics dominate storage on GPU clusters, and the hpc_job label multiplies DCGM series count by the number of jobs. The label and its plumbing (prolog/epilog scripts, hostPath mounts) exist only to attribute GPU metrics to jobs in dashboards.

Solution

  • Delete the map_job_dcgm.sh/unmap_job_dcgm.sh prolog/epilog scripts from slurm-cluster
  • Remove DCGM_HPC_JOB_MAPPING_DIR, the hpc-jobs-dir/host-var hostPath mounts and the create-hpc-jobs-dir init container from soperator-dcgm-exporter, and hpcJobMapDir from soperator-fluxcd
  • Rework per-job GPU dashboard panels to join DCGM metrics with the Slurm exporter's slurm_node_job/slurm_job_info on exported_pod <-> node_name; GPU allocation panels use slurm_node_info state_base instead of the hpc_job presence test
  • Document the join recipe in docs/slurm-exporter.md

Job attribution becomes node-granular: when several jobs share one node, each job inherits the whole node's GPU signal.

Testing

Validated dashboards on a dev cluster

Release Notes

Breaking: DCGM metrics no longer carry the hpc_job label. Per-job GPU dashboards and queries should join with the Slurm exporter's slurm_node_job metric instead (node-granular attribution).

@theyoprst theyoprst added helm Functional changes in Helm charts observability labels Sep 1, 2026
@theyoprst
theyoprst marked this pull request as draft September 1, 2026 18:04
@theyoprst
theyoprst marked this pull request as ready for review September 2, 2026 14:45
Comment thread docs/slurm-exporter.md Outdated
slurm_node_job
* on (node_name) group_left()
avg by (node_name) (
label_replace(DCGM_FI_DEV_GPU_UTIL, "node_name", "$1", "exported_pod", "(.*)")

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not directly related to objective of this PR, but since there are a lot of changes here, why not add node_name label to DCGM_* metrics to simplify such joins? we can do it next to other relabeling rules.

},
"editorMode": "code",
"expr": "avg(DCGM_FI_DEV_SM_CLOCK{cluster=~\"$cluster\", exported_pod=~\"$worker\",hpc_job=~\"$slurm_job\"}*1000000)",
"expr": "avg(DCGM_FI_DEV_SM_CLOCK{cluster=~\"$cluster\", exported_pod=~\"$worker\"}*1000000)",

@ali-sattari ali-sattari Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removing job filter makes correlating specific job's lifetime more difficult in these panels. It is not a blocker, but something we lose. Do we have other panels or dashboards to see DCGM metrics per job (i.e. only specifically for duration of that job)?

The label multiplied DCGM series count by the number of jobs, and DCGM metrics dominate storage on GPU clusters. Remove the DCGM-Slurm job-mapping integration: the map/unmap_job_dcgm prolog/epilog scripts, the DCGM_HPC_JOB_MAPPING_DIR env, the hpc-jobs-dir/host-var hostPath mounts, the create-hpc-jobs-dir init container, and the hpcJobMapDir fluxcd value. Instead, expose node_name on DCGM series (metric relabeling copies exported_pod, the worker pod name, which equals the Slurm node name) and migrate the dashboards to join with the Slurm exporter's slurm_node_job/slurm_job_info; GPU allocation panels use slurm_node_info state_base as the allocation test. Job attribution becomes node-granular.
Filtering by the $worker variable alone shows the node's GPU metrics for the whole time range, losing what the hpc_job label used to provide: series present only while the job ran. Restore it by intersecting each per-job DCGM expression with slurm_node_job{job_id=~"$slurm_job"}, which exists exactly for the job's runtime on each node.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

helm Functional changes in Helm charts observability

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants