I have a pretty custom GPU cooling setup on a few machines (I run ML workloads locally and I want stuff to be quiet).
Couple of gotchas that I ran across. I found that on Linux, desktop PC fan control support is pretty abysmal. The sensor library that everyone relies on, lm_sensors, is semi-abandoned and didn't recognize sensors on my relatively popular, 7 year old ATX motherboard and GPU. It also requires having Perl installed.
About GPU cooling in particular - modern NVidia cards in particular seem to have a built-in minimum of 30% fan speed when controlling them manually. The connectors are also a different, smaller connector (perhaps a JST PH?).
zargon · 2h ago
> The sensor library that everyone relies on, lm_sensors, is semi-abandoned and didn't recognize sensors on my relatively popular, 7 year old ATX motherboard
This is mainly because the companies that make the “super io” controller chips (ITE and others) are deluded and think that they have some sort of cutting edge tech and their chip documentation must be super secret.
Years ago there was someone at a mobo manufacturer who would leak the datasheets, but they left or got found out, and there hasn’t really been a source for that info since.
Scene_Cast2 · 1h ago
The Windows FanControl software uses LibreHardwareMonitor as the sensor backend. It works pretty well in my experience.
zargon · 3h ago
I have been wanting a PWM controller for my Tesla cards in my workstation. Currently I open the case and manually turn up their fan speed when I’m going to use them, and turn it back down afterward. What I would like, but am not very interested in spending the time on, is a microcontroller that controls the fan speed based on messages it gets over serial from a script running on the host that tells it what speed to run based on GPU temperature. When I first set it up, I also placed thermistors that the microcontroller could use as a fallback if it doesn’t receive commands.
Seems like something similar should already exist, but I haven’t been able to find anything that is a close enough fit.
bArray · 5h ago
Could have been simpler still. You can read the internal temperature of the ATiny85 [1]. You can also get the ATiny85 to speak USB and even be flashed via USB via the micronucleus bootloader [2].
I did try the internal temperature sensor, but it didn't measure the ambient temperature. I have read that if you set the ATtiny85 to sleep mode for some time, it will converge to ambient temperature, but it would take too long to validate, and I didn't want to go down another rabbit hole.
USB Bootloader is interesting, but I already had a few ISP loaders. You can make an ISP loader with Arduino as well. [1]
How does the internal temperature sensor help here?
gosub100 · 2h ago
I think he means tape/glue it to the heat source to (mis)-use it as a probe. "It's not stupid if it works" but I think there would need to be a few deg of compensation to account for the thermal resistance of the package.
MisterTea · 1h ago
Then you have the problem of the PCB getting in the way.
MisterTea · 3h ago
Would be nice if you posted a picture of the schematic in addition to the PCB rendering.
ashafq · 2h ago
Thank you! I will add them later on. You can access the schematic and PCBs here:
Couple of gotchas that I ran across. I found that on Linux, desktop PC fan control support is pretty abysmal. The sensor library that everyone relies on, lm_sensors, is semi-abandoned and didn't recognize sensors on my relatively popular, 7 year old ATX motherboard and GPU. It also requires having Perl installed.
About GPU cooling in particular - modern NVidia cards in particular seem to have a built-in minimum of 30% fan speed when controlling them manually. The connectors are also a different, smaller connector (perhaps a JST PH?).
This is mainly because the companies that make the “super io” controller chips (ITE and others) are deluded and think that they have some sort of cutting edge tech and their chip documentation must be super secret.
Years ago there was someone at a mobo manufacturer who would leak the datasheets, but they left or got found out, and there hasn’t really been a source for that info since.
Seems like something similar should already exist, but I haven’t been able to find anything that is a close enough fit.
[1] https://andrey.mikhalchuk.com/2011/06/20/reading-attiny85452...
[2] https://github.com/micronucleus/micronucleus
USB Bootloader is interesting, but I already had a few ISP loaders. You can make an ISP loader with Arduino as well. [1]
[1] https://docs.arduino.cc/built-in-examples/arduino-isp/Arduin...
GitHub: https://github.com/Colahall/tiny85fancontrol/tree/main/schem... Codeberg: https://codeberg.org/Colahall/tiny85fancontrol/src/branch/ma...