NVIDIA-Grafikkarten beim Stromverbrauch begrenzen
Meine RTX3080 Ti zieht bis zu 350 Watt. Das kann so heiß werden, dass Spiele langsamer laufen. Der Stromverbrauch lässt sich bei dieser Karte aber zwischen 100 und 370 Watt begrenzen.
Wie richtet man das so ein, dass sie bereits beim Start mit einem niedrigeren Limit läuft?
Ein systemd-Dienst ist zuverlässiger als zum Beispiel .bashrc, crontab oder /etc/rc.local, weil er beim Systemstart als Root läuft (NVIDIA-Dokumentation).
Dienst anlegen
Ersetze 200 durch die gewünschte Leistungsaufnahme in Watt:
sudoedit /etc/systemd/system/nvidia-power-limit.service
Füge Folgendes ein:
[Unit] Description=Set NVIDIA GPU power limit After=nvidia-persistenced.service Wants=nvidia-persistenced.service [Service] Type=oneshot ExecStart=/usr/bin/nvidia-smi -i 0 -pl 200 RemainAfterExit=yes [Install] WantedBy=multi-user.target
Speichere die Datei und aktiviere den Dienst:
sudo systemctl daemon-reload sudo systemctl enable --now nvidia-power-limit.service
Der Befehl wird sofort ausgeführt und bei jedem Systemstart automatisch wiederholt.
Einstellung prüfen
Prüfe das konfigurierte Limit:
nvidia-smi -i 0 --query-gpu=power.limit --format=csv
Prüfe den Dienst:
systemctl status nvidia-power-limit.service
Falls der Dienst fehlschlägt, sieh dir das Boot-Log an:
journalctl -u nvidia-power-limit.service -b
Gültige Wattwerte zuerst prüfen
Deine GPU akzeptiert nur Werte innerhalb des unterstützten Bereichs:
nvidia-smi -i 0 -q -d POWER
Achte auf:
Min Power Limit Max Power Limit
Verwende einen Wert zwischen diesen beiden Grenzen. Die Syntax von NVIDIA lautet:
sudo nvidia-smi -i 0 -pl <watts>
Zum Beispiel:
sudo nvidia-smi -i 0 -pl 180
Falls /usr/bin/nvidia-smi in deiner Distribution nicht existiert, ermittle den Pfad mit:
command -v nvidia-smi
Verwende diesen Pfad anschließend in ExecStart. Bei mehreren GPUs kannst du einen weiteren Dienstbefehl hinzufügen, zum Beispiel:
ExecStart=/usr/bin/nvidia-smi -i 0 -pl 200 ExecStart=/usr/bin/nvidia-smi -i 1 -pl 200
Beachte, dass einige Kombinationen aus Treiber und GPU das Limit zurücksetzen können, wenn der GPU-Treiber neu geladen wird, obwohl der systemd-Dienst es beim Systemstart korrekt setzt. Ein systemd-Timer, der einige Sekunden nach dem Start ausgeführt wird, kann diesen Fall abfangen.
Diskussion