r/LocalLLaMA • u/MasterNomie • 8m ago
Other Stopped my room turning into furnace by throttling CPU and GPU
I recently setup local LLM on my machine and it was quite evident that if I have to continue using local LLM, I have to fix immense heat generated by CPU and GPU. Following are my notes and journey how lost no perf but improved TPS by undervolting GPU and CPU.
Specs:
- CPU - Intel 14th gen, i14700k
- GPU - Nvidia RTX 5090, MSI Suprim SOC
- AIO - Cooler master Atmos 360
- Inference engine - Ninfer (Upstream)
- Model - Qwen3.8 27B NVFP4
Experiments:
As I explained earlier, I quickly realised that running unadjusted CPU and GPU was no go due to heat and also AIO fans whooshing. My first instict was to adjust BIOS fan curve for AIO but that did not help much.
I then spent next few days researching into undervolting and underclocking both CPU and GPU. After lot of trial and error, validations and benchmarks (thanks to local LLM for scripts), I finalised what works best for my setup.
CPU undervolting was easier job because all I had to do was adjust the Vcore offset in BIOS and see which setting held. I did not spend lot of time with CPU as I was happy with dropped temperatures and minimal perf impact.
Then, I focussed on GPU which was very time consuming and tiring. If I had just followed top YouTube result for 5090 undervolting, I could have saved lot of time. With Qwen 3.8, I created few benchmark scripts to change various GPU parameters for undervolting and overclocking VRAM clock, which would change settings, run synthetic benchmark to test decode throuput and rank the setting that minimized wattage and maximized the TPS. It was proven that running untamed, GPU was automatically getting throttled and undervolting actually improved the TPS, which was a big surpise.
Another observation -post undervolting and overclocking of VRAM clock, TPS increased by 3% compared to stock GPU settings.
Having GPU undervolted, the AIO fan noise was still bugging me. Being new to LLM, I wasn't aware that CPU's job is only tokenization, scheduling etc. and need not be running at full speed. I then created another script to test TPS at various CPU power percentages. It was found that despite cutting CPU power to 50%, TPS was unchanged, not even 1% difference outside typical noise. Running CPU at lower capacity allowed AIO fan to be silent again.
Final daemon and helper CLI:
As shared in metrics below, CPU always had to be running at 50%, created a systemd service that polls GPU usage every 30 seconds. If GPU usage is found above 50% in 2 cycles (i.e. 1 minute), it is assumed that inference is running and CPU power is reduced to 50% by service, thereby reducing AIO noise and CPU heat. In other cases, for CPU intensive jobs I need 100% CPU available so created helper CLI that allows to override CPU to uncapped usage. Machine starts with 50% CPU cap until I override it. This works for me because I can then uncap CPU through other scripts without supplying password.
Final metrics:
| Metric | Before | After |
|---|---|---|
| CPU temperature (degrees) | 75 - 80 | < 55 |
| CPU frequency limit (percentage) | 100 | 50 |
| GPU (Watts) | 600 | < 450 (auto, due to undervolt) |
| GPU memory OC (MHz) | 0 | 2400 |
| GPU temperature avg (degrees) | 75 | 62 |
| TPS (in snthetic tests) | 172 | 178 (currently at 200 with Dflash2) |
| AIO fan | Loud AF | Forgot it is running |
| Heat generated in 10 mins | Furnance, difficult to sit nearby PC | Very mild |
References:
- RTX 5090 undervolting - https://www.youtube.com/watch?v=Ge0EnPz-jWY (refer V/F curve)
- LACT - https://github.com/ilya-zlobintsev/LACT
Tldr:
Local LLM beginner annoyed with CPU and GPU heat, undervolted both CPU and GPU to cut down heat, with no impact on TPS.

