Linux 上でNVIDIA GPUの電力を制限する方法を紹介。
概要
最近の GPU の消費電量は CPUをはるかに凌いで、
例えば NVIDIA GeForce RTX 3080 では消費電力が 320W にもなります。
一方、多少電力制限をしても性能はほとんど落ちないので、かなりワットパフォーマンスは改善します。
Windows では MSI Afterburner を使う方法が有名ですが、Linux ではどうすればよいのでしょうか?
今回は Linux 上で NVIDIA の GPUへ電力制限を行う方法を紹介します。
環境
- CPU: Ryzen 7 3700X
- GPU: NVIDIA GeForce RTX 3080
- PS: SilverStone 550W (静音, 80PLUS GOLD)
- OS: Ubuntu Server 20.04
設定方法
$ sudo nvidia-smi --persistence-mode=1 # '-pm 1' と等価
$ sudo nvidia-smi --power-limit=xxx # '-pl xxx' と等価
確認方法
$ nvidia-smi -q -d POWER [-l n]
上記のコマンドで設定最大電力、現在の消費電力などを取得できる。
末尾のオプションは n
に秒数を指定すると、その秒数事に出力が更新・追記される。
注意事項
今回はマイニングのために電力効率を上げようと画策した、、、わけではなく、
"環境" で紹介したように 550W という非力な電源で、なんとか RTX3080 を使えないかという試みだった。
結論からいうとその狙いは失敗に終わった。
とはいっても、電力制限ができなかったというわけではなく、
電力設定に応じてパフォーマンスは変化したし、
消費電力をモニターしても確かに制限値以下になっていた。
今回は GeekBench5 compute で簡単に負荷を掛けてテストを行ったが、
デフォルトの 340W 制限でも完走はするのだが、終了後しばらくたってからクラッシュした。
消費電力を 260W, 140W, 120W, 100W と制限を課しても症状は結局変わらなかった。
私の憶測では、制限はあくまでもある時間内の平均電力であって、
制限を低く設定しても、瞬間的な電力は度々超えているのではないかと想像している。
この瞬間的な負荷に電源側が耐えられないのかもしれない。
念のためGPUの初期不良も疑って別の850W電源搭載マシンで試したところ、
問題なく動作したのでやはり電源容量によるところが大きいと判断。
余談
電力制限下での RTX3080 の GeekBench 5 Compute の結果は以下の通り。
(computeスコアは丸めてある)
電力制限値 | GB5 compute スコア | 標準とのスコア比 | 標準とのワッパ比 |
---|---|---|---|
340W(標準) | 209400 | 100% | 100% |
260W | 203500 | 97.2% | 127% |
140W | 180900 | 86.4% | 209% |
120W | 145100 | 69.3% | 196% |
100W | 79900 | 38.1% | 130% |
120W を下回るあたりから急激な性能劣化がみられるが、
260W までは目立った性能劣化が見られず、140W でもまだかなりの性能を維持している。
どうも 140~260W の間に最適な動作電力があるような気がする。
というか、どうして標準が 340W (TGP:320W) に設定されているのか、かなり謎である。
GB5 compute がまったくこのGPU の性能を使い切れていないということなのだろうか。
ちなみに260W という電源制限値は、同製品のレビューをされていたちもろぐ(やかもちさん)の値を参考にした。
同記事によると 260W制限でゲーミング性能は 6-7% の低下ながらワッパは 1.27倍 と、私の結果とほぼ同等のようです。