I have collectd running on my gpu nodes with the collectd_nvidianvml
plugin from pip.
I have a collectd frontend that displays that data along with slurm
data for the whole cluster for users to see.
Some of my users watch that carefully and tune their jobs to maximize
utilization.
When I spot jobs that are either not using their gpus effectively or
don't have them open at all, I email users.
Most are appreciative, as they didn't know their job wasn't working
correctly. Unapologetic repeat offenders find their jobs converted to
preemptive jobs with a job submit plugin and a change of QOS.
I considered writing something to kill jobs outright when they didn't
use the gpu resources they requested, but through the above approach,
I've found it unnecessary.