It seems NVML has a bug where it incorrectly returns NVML_ERROR_NOT_SUPPORTED on certain calls for certain GPUs.
For example, I have a GeForce GTX TITAN which supports reporting utilization, yet the nvmlDeviceGetUtilizationRates call still returns NVML_ERROR_NOT_SUPPORTED incorrectly. I wrote a C program demonstrating both this behavior and a way to work around the bug here: http://cfsworks.com/files/downloads/nvml_bug.c
The first time through, it returns NVML_ERROR_NOT_SUPPORTED for both calls, but the calls are clearly supported… Upon applying the workaround, the correct information comes back!
Even better, when I used GDB to call the workaround from within nvidia-smi, it correctly reported everything except ECC information (though this is fine as I’m fairly sure my TITAN is not equipped with ECC RAM).
Since the workaround isn’t terribly complex and doesn’t seem to have any side-effects, I’d imagine this to be a fairly simple bug to fix upstream.