Description
dcgm-exporter:4.6.0-4.8.3 cannot attribute metrics to pods using Dynamic MIG devices allocated by dra-driver-nvidia-gpu.
In case of Dynamically created MIG devices, NVIDIA DRA ResourceSlices only contain an abstract device (which has ParentUUID and Profile), not the live MIG UUID and GI created during device preparation. The exporter currently requires that MIG UUID to resolve the GI key and therefore drops the mapping. https://github.com/NVIDIA/dcgm-exporter/blob/main/internal/pkg/transformation/kubernetes.go#L758
I think we missed addressing it properly earlier #664 (comment)
kubectl logs "$DCGM_POD" -n nvidia-gpu-operator --since=5m -c nvidia-dcgm-exporter | grep DRA
time=2026-07-23T18:57:37.605Z level=DEBUG msg="Skipping DRA MIG mapping without MIG UUID" parentUUID=GPU-a15aaed3-d4e7-dde0-adcd-4432a8caf752
time=2026-07-23T18:57:37.605Z level=DEBUG msg="Completed toDeviceToPodsDRA transformation" totalMappings=0 deviceToPodsMap=map[]
time=2026-07-23T18:57:37.606Z level=DEBUG msg="Device to pod mapping for DRA: map[]"
An example ResourceSlice entry of an abstract mig device that can be created when a claim requests it:
"name": "gpu-0-mig-1g12gb-19-0",
"attributes": {
"uuid": null,
"parentUUID": {
"string": "GPU-a15aaed3-d4e7-dde0-adcd-4432a8caf752"
},
"profile": {
"string": "1g.12gb"
},
"type": {
"string": "mig"
}
},
"capacity": {
"memory": {
"value": "11904Mi"
}
},
"consumesCounters": [
{
"counterSet": "gpu-0-counter-set",
"counters": {
"copy-engines": {
"value": "1"
},
"decoders": {
"value": "1"
},
"encoders": {
"value": "0"
},
"jpeg-engines": {
"value": "1"
},
"memory": {
"value": "11904Mi"
},
"memory-slice-0": {
"value": "1"
},
"multiprocessors": {
"value": "16"
},
"ofa-engines": {
"value": "0"
}
}
}
]
}
Claim with allocated device
status:
allocation:
allocationTimestamp: "2026-07-23T18:55:23Z"
devices:
results:
- device: gpu-0-mig-1g12gb-19-0
driver: gpu.nvidia.com
pool: lego-cg1-qct-046
request: mig
nodeSelector:
nodeSelectorTerms:
- matchFields:
- key: metadata.name
operator: In
values:
- lego-cg1-qct-046
reservedFor:
- name: dcgm-dynamic-mig
The ResourceSlice intentionally has no live MIG UUID or GI ID. These identities exist only after the dra plugin creates the partition during ResourceClaim preparation.
The ResourceClaim also has no concrete identity, just the device name instatus.devices.
For Static MIG, exporter maps MIG UUID → parent UUID + GI ID + CI ID via GetMIGDeviceInfoByID()
but for Dynamic MIG, we need a new mapping something like: parent UUID + profile ID + placement → live GI ID
Using only parentUUID + profile would not be safe because multiple live instances with the same profile may exist at different placements.
Potential fixes:
Option 1 (DCGM only change) Parse device-name:
- Parse profile and placement start from the allocated DRA device name. The device name encodes:
gpu-0-mig-1g12gb-19-0
└─ placement start: 0
└──── profile ID: 19
https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/blob/main/cmd/gpu-kubelet-plugin/mig.go#L113
- Enumerate live MIG devices under parentUUID through NVML.
- Inspect each device's GI profile ID and placement.
- Match exactly parentUUID + profileID + placementStart.
- Use the resulting runtime GI ID with the existing GetGPUInstanceIdentifier() path.
No change is needed for Static MIG where if MIG UUID present use GetMIGDeviceInfoByID()
Any issue on relying on parsing the device-name?
Option 2 (DRA change): Should we add placementStart in the ResourceSlice attributes as we already have the profile. With profileID + placementStart, dcgm wont have to parse the device-name.
Option 3 (DRA change): Concrete identity in ResourceClaim device status
After creating the MIG device, the DRA driver could populate ResourceClaim.status.devices[].data with MIGUUID, GI or CI. This may require additional cleanup on the driver side during tear down.
Description
dcgm-exporter:4.6.0-4.8.3cannot attribute metrics to pods using Dynamic MIG devices allocated bydra-driver-nvidia-gpu.In case of Dynamically created MIG devices, NVIDIA DRA ResourceSlices only contain an abstract device (which has ParentUUID and Profile), not the live MIG UUID and GI created during device preparation. The exporter currently requires that MIG UUID to resolve the GI key and therefore drops the mapping. https://github.com/NVIDIA/dcgm-exporter/blob/main/internal/pkg/transformation/kubernetes.go#L758
I think we missed addressing it properly earlier #664 (comment)
An example ResourceSlice entry of an abstract mig device that can be created when a claim requests it:
Claim with allocated device
The ResourceSlice intentionally has no live MIG UUID or GI ID. These identities exist only after the dra plugin creates the partition during ResourceClaim preparation.
The ResourceClaim also has no concrete identity, just the device name in
status.devices.For Static MIG, exporter maps MIG UUID → parent UUID + GI ID + CI ID via GetMIGDeviceInfoByID()
but for Dynamic MIG, we need a new mapping something like: parent UUID + profile ID + placement → live GI ID
Using only parentUUID + profile would not be safe because multiple live instances with the same profile may exist at different placements.
Potential fixes:
Option 1 (DCGM only change) Parse device-name:
gpu-0-mig-1g12gb-19-0
└─ placement start: 0
└──── profile ID: 19
https://github.com/kubernetes-sigs/dra-driver-nvidia-gpu/blob/main/cmd/gpu-kubelet-plugin/mig.go#L113
No change is needed for Static MIG where if MIG UUID present use GetMIGDeviceInfoByID()
Any issue on relying on parsing the device-name?
Option 2 (DRA change): Should we add placementStart in the ResourceSlice attributes as we already have the profile. With profileID + placementStart, dcgm wont have to parse the device-name.
Option 3 (DRA change): Concrete identity in ResourceClaim device status
After creating the MIG device, the DRA driver could populate ResourceClaim.status.devices[].data with MIGUUID, GI or CI. This may require additional cleanup on the driver side during tear down.