The power limit and 810 MHz memory lock were a host setting, applied at
every boot by nvidia-power-limit.service regardless of what the GPU was
doing. A host switched from mining back to LLM inference kept the lock
with the miner stopped, and inference is memory-bandwidth bound: a 27B
model on 2x RTX 5090 decoded at 3.8 tok/s on a build that had measured
21.9 tok/s. Nothing reported it — a -lmc lock is not a clocks event
reason, and utilisation still reads ~98%.
The profile now follows the workload:
- nvidia-power-limit.sh takes a mode. `miner` applies the configured
profile as before; `default` resets each card to its own default power
limit and memory clock.
- nvidia-power-limit.service runs `default` at boot. The miner applies
`miner` in ExecStartPre and `default` in ExecStopPost (quantus/miner).
- A drop-in for neuron.service makes it conflict with the miner and
reset to default before starting, so either one can take the host with
a single systemctl start and the clocks follow.
- infra-setup.sh installs the drop-in, always writes the profile config
(so removing a host clears it), and applies whichever profile matches
the running workload instead of restarting the boot unit under a live
miner.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XViS3RVfGTRaRSopLN68MA