My NVIDIA GTX 980 Ti being idle eats 53 W (out of 250 W max). Here's how to put to to a power saving mode at 30 W consumption and keep it prepared to run at higher performance automatically when there's a computation running.
sudo nvidia-smi -pm ENABLED -i 0
sudo nvidia-smi -ac 405,135 -i 0
See the current clocks of streaming multiprocessors and memory and the performance state.
nvidia-smi --query-gpu=index,pstate,power.draw,clocks.sm,clocks.mem --format=csv
index, pstate, power.draw [W], clocks.current.sm [MHz], clocks.current.memory [MHz]
0, P0, 53 W, 1139 MHz, 3505 MHz
Performance state is P0
(highest), power draw is 53 W (high), SM clock: 1139 MHz (quite high).
Is it possible to switch to some idle state that draws less power? The answer is YES. We don't directly switch the performance state, but change the clocks.
First it's necessary to enable the persistence mode.
The -i 0
argument in the GPU index (in case of multiple devices).
sudo nvidia-smi -pm ENABLED -i 0
Then we can set the memory and SM clocks together to compatible pair of values.
For given device it's possible to list possible values. Note that there are a few sections by memory clock and then fine-grained values for SM clock.
nvidia-smi -q -d SUPPORTED_CLOCKS
For my GPU the minimum values are 405 MHz for memory and 135 MHz for SM. Let's set them.
sudo nvidia-smi -ac 405,135 -i 0
Bingo! We saved 23 W (~ 43%). Temperature (with water cooling) went down from 43 to 40 deg C.
nvidia-smi --query-gpu=index,pstate,power.draw,clocks.sm,clocks.mem --format=csv
index, pstate, power.draw [W], clocks.current.sm [MHz], clocks.current.memory [MHz]
0, P8, 30.15 W, 135 MHz, 405 MHz
I tried running some deep learning training and the GPU automatically clocks up to 1341 MHz and then goes down.
For maximum performance we can try set the highest clock manually. In my case it had no effect.
sudo nvidia-smi -ac 3505,1531 -i 0
For Pascal GPUs I observe much less idle power consumption (5-10 W for 1070, 21 W for 1080 Ti).
More info: