電力バカ食いのRadeon VIIを低電圧化する
2023-05-01Radeon VIIでStable Diffusionを使って画像生成している時に、同じ部屋の照明がチラつくことに気が付いた。 明らかにグラボの消費電力が原因なので対策する。
PCスペック
CPU | AMD Ryzen 7 1700 |
メモリ | DDR4-2400 32GB(8GB x 4) |
マザーボード | Fatal1ty AB350 Gaming K4 |
グラフィックボード | SAPPHIRE RADEON VII |
SSD(NVMe) | PX-256M9PeG |
無線LANアダプター | Archer TX3000E |
OS | Ubuntu 22.04.2 LTS |
グラフィックボード詳細
GPU | Radeon VII |
コアクロック | 1750MHz |
メモリクロック | 1000MHz |
メモリサイズ/バス幅 | 16GB/4096bit |
消費電力 | 300W |
手段
Linux環境にはAMD Softwareのような便利なGUIソフトウェアはない。
そのため、デバイスファイルにデータを書き込む方法で各設定値を調整していく。
その辺の基本的な操作はArchWikiが詳しい↓
https://wiki.archlinux.jp/index.php/AMDGPU
- /etc/default/grubに値を追加
GRUB_CMDLINE_LINUX_DEFAULT="amdgpu.ppfeaturemask=0xffffffff
- 管理者権限でupdate-grub2を実行して再起動
$sudo update-grub2
ここまでやればあとは自由に設定変更できるようになる。
よく使うコマンド
P-state確認
$sudo cat /sys/class/drm/card0/device/pp_od_clk_voltage
OD_SCLK:
0: 808Mhz
1: 1801Mhz
OD_MCLK:
1: 1000Mhz
OD_VDDC_CURVE:
0: 808Mhz 713mV
1: 1304Mhz 823mV
2: 1801Mhz 1124mV
OD_RANGE:
SCLK: 808Mhz 2200Mhz
MCLK: 800Mhz 1200Mhz
VDDC_CURVE_SCLK[0]: 808Mhz 2200Mhz
VDDC_CURVE_VOLT[0]: 738mV 1218mV
VDDC_CURVE_SCLK[1]: 808Mhz 2200Mhz
VDDC_CURVE_VOLT[1]: 738mV 1218mV
VDDC_CURVE_SCLK[2]: 808Mhz 2200Mhz
VDDC_CURVE_VOLT[2]: 738mV 1218mV
最大GPUクロック変更
$sudo sh -c "s 1 1801 > /sys/class/drm/card0/device/pp_od_clk_voltage"
↓の電圧変更と合わせて使う。
電圧変更
$sudo sh -c "vc 2 1801 1124 > /sys/class/drm/card0/device/pp_od_clk_voltage"
設定を適用
$sudo sh -c "echo c > /sys/class/drm/card0/device/pp_od_clk_voltage"
GPUモニタリング
$sudo watch -n 0.5 cat /sys/kernel/debug/dri/0/amdgpu_pm_info
測定
以前の記事と同様の設定を使用する。
設定
使用するモデル
AbyssOrangeMix2_nsfw
ポジティブプロンプト
a photograph of an astronaut riding a horse
ネガティブプロンプト
nsfw, (worst quality, low quality, extra digits, male:1.4), bad_prompt
他設定
Sampling method | DPM++ 2M Karras |
Sampling steps | 20 |
Width/Height | 640 / 480 |
Batch count | 2 |
Batch size | 5 |
CFG Scale | 7 |
Seed | 2382819807 |
パフォーマンス比較
GPUクロック | 電圧 | 描画時間(Time taken) | 消費電力(ワットチェッカー読み) |
---|---|---|---|
1801MHz(デフォルト) | 1123mV(デフォルト) | 217.7s | 430W |
1600MHz | 900mV | 221.5s | 335W |
1500MHz | 860mV | 233.6s | 285W |
1400MHz | 810mV | 249.6s | 245W |
1300MHz | 770mV | 265.6s | 220W |
1200MHz | 740mV | 286.0s | 200W |
当然だが、GPUクロックを下げるたびに消費電力が下がって描画時間が長くなる。 どれが効率が良いのかが分かりづらいので、一回の生成にかかる電力量を計算してみる。
GPUクロック | 電圧 | 1回の生成にかかる電力量(W) |
---|---|---|
1801MHz(デフォルト) | 1123mV(デフォルト) | 93,611 |
1600MHz | 900mV | 74,202.5 |
1500MHz | 860mV | 66,576 |
1400MHz | 810mV | 61,152 |
1300MHz | 770mV | 58,432 |
1200MHz | 740mV | 57,200 |
1200Mhz/740mVの組み合わせが一番効率的という結果になった。
まとめ
Radeon VIIのGPUクロックと電圧を下げることで、性能は落ちるものの、消費電力を抑えられた。また、当初の問題だった照明のちらつきもなくすことができた。 電力をバカ食いする本グラボでは、デフォルト値が盛られていることもあり、低電圧化の恩恵は大きいことが分かった。
同じようなグラボを使っている方は自己責任でぜひ試してほしい。