Adding a High-Performance Cooler to a GPU That Doesn't Have One

Learn how Devon Bray was able to add a cooler to his NVIDIA Tesla K80 card that is meant for data center use.

The problem with the Tesla K80

Virtually all consumer-oriented graphics cards have shipped with integrated air coolers or water blocks for well over a decade now, as they are meant to sit within a PC case that might have restricted airflow. But cards meant for servers, on the other hand, often lack this feature because it is assumed they will be cooled by a large bank of fans at the entrance of a server rack. Due to the ongoing chip shortage, Devon Bray wanted to buy a GPU that had plenty of VRAM for not that much money, essentially forcing him to choose the Tesla K80 card from NVIDIA. Other cooling solutions for this fan-less card already out there often lacked temperature control, adequate heat dissipation, and being too large, leading him to design his own.

An early design

Bray's first iteration of this air cooling shroud involved 3D printing a curved duct that has a pair of fans on one end and a mounting point on the other. The two fans were regulated by a DC/DC converter module and could spin at up to 9200RPM for a total flow-rate of 17CFM. This initial foray worked well enough to keep the GPU from overheating, but the use of a DC/DC converter and the excessive material used for the shroud were major drawbacks.

Gathering the required components

For Bray's final designed, he decided to make some major changes regarding how the fans themselves are controlled. Rather than using changes in voltage to adjust their speed, Bray realized he could simply switch the VCC line going to the fan quickly, which is referred to as PWM. Because of this, his control board had its DC/DC converters swapped out for a bank of six MOSFET drivers, along with a single Raspberry Pi Pico development board. To help the Pico determine what speed the fans should run at, two thermistors were also added.

Controlling the fans

Going from a single temperature measurement to a speed for three fans is not just a single multiplication problem, since parameters such as noise, current temperature, and the number of fans available all have to be taken into account. Therefore, Bray's algorithm, which he implemented in MicroPython, works by using a fan-speed curve that maps a given temperature to the number of fans and their respective speeds. By optimizing this curve, certain fans can be shut off completely when not needed, thereby minimizing noise, or all can be ramped up to maximum speed when the GPU needs extra cooling.

Adding a shroud

The final step in this custom cooler journey was designing and fabricating a fan shroud that could help direct air where it needed to go without being too bulky. The result was a single duct that holds a set of three, 40mm fans on one side whilst having a mounting point on the opposite end. The control board attaches to the side with a few standoffs and screws.

How did it turn out?

Overall, this custom cooling project was considered a success by Bray, as it was able to keep the GPU's core temperature below 80C even while running under full load. In the future, Bray would like to try out different fans for quieter operation and adding proper PID control in his code. You can read about his project in more detail here on his blog or you can watch a build video here on YouTube.

Arduino “having11” Guy
20 year-old IoT and embedded systems enthusiast. Also produce content for and love working on projects and sharing knowledge.
Latest articles
Sponsored articles
Related articles
Latest articles
Read more
Related articles