This repo contains a small two-part setup for using GPU temperatures from a passthrough VM/render node to control Dell PowerEdge chassis fans from the Proxmox host.
It is useful when:
- GPUs are passed through to a VM.
- iDRAC cannot see the real GPU temperatures.
- Dell's automatic fan logic does not react to GPU heat.
- Static manual fan speed is either too loud or not safe enough.
GPU VM / render node
nvidia-smi
↓
/mnt/nas_ai/shared/gpu_fan_bridge/gpu_temp
↓
Proxmox host
gpu-fan-control.sh
↓
ipmitool raw Dell fan control
The VM exports:
/mnt/nas_ai/shared/gpu_fan_bridge/gpu_temp
/mnt/nas_ai/shared/gpu_fan_bridge/gpu_temps_detail
/mnt/nas_ai/shared/gpu_fan_bridge/heartbeat
/mnt/nas_ai/shared/gpu_fan_bridge/status
The Proxmox host reads those files and sets Dell chassis fan speed.
scripts/gpu-temp-export.sh # run inside the GPU VM/render node
scripts/gpu-fan-control.sh # run on the Proxmox host
systemd/gpu-temp-export.service # VM service
systemd/gpu-fan-control.service # Proxmox oneshot service
systemd/gpu-fan-control.timer # Proxmox timer
- NVIDIA driver working
nvidia-smiavailable- shared NAS/NFS mount available at
/mnt/nas_ai/shared
ipmitool- same shared NAS/NFS mount available at
/mnt/nas_ai/shared - Dell server that supports the Dell raw fan commands
Install ipmitool on Proxmox:
apt update
apt install -y ipmitoolCopy:
sudo cp scripts/gpu-temp-export.sh /usr/local/bin/gpu-temp-export.sh
sudo chmod +x /usr/local/bin/gpu-temp-export.sh
sudo cp systemd/gpu-temp-export.service /etc/systemd/system/gpu-temp-export.service
sudo systemctl daemon-reload
sudo systemctl enable --now gpu-temp-export.serviceWatch logs:
sudo journalctl -u gpu-temp-export.service -fCheck output:
cat /mnt/nas_ai/shared/gpu_fan_bridge/gpu_temp
cat /mnt/nas_ai/shared/gpu_fan_bridge/gpu_temps_detail
cat /mnt/nas_ai/shared/gpu_fan_bridge/heartbeat
cat /mnt/nas_ai/shared/gpu_fan_bridge/statusCopy:
cp scripts/gpu-fan-control.sh /usr/local/sbin/gpu-fan-control.sh
chmod +x /usr/local/sbin/gpu-fan-control.sh
cp systemd/gpu-fan-control.service /etc/systemd/system/gpu-fan-control.service
cp systemd/gpu-fan-control.timer /etc/systemd/system/gpu-fan-control.timer
systemctl daemon-reload
systemctl enable --now gpu-fan-control.timerWatch logs:
tail -f /var/log/gpu-fan-control.logCheck state:
cat /run/gpu-fan-stateThe Proxmox script uses fan levels rather than raw one-shot thresholds.
| Temp | Level |
|---|---|
<65C |
32% |
65C+ |
40% |
72C+ |
50% |
78C+ |
60% |
84C+ |
80% |
88C+ |
100% |
92C+ |
immediate 100% |
It also has:
- hysteresis
- minimum hold time
- one-step fan transitions
- stale heartbeat handling
- 100% failsafe for long stale data
On Proxmox:
systemctl stop gpu-fan-control.timer
ipmitool raw 0x30 0x30 0x01 0x00
ipmitool raw 0x30 0x30 0x02 0xff 0x28That sets manual fan mode around 40%.
ipmitool raw 0x30 0x30 0x01 0x01This setup intentionally does not fall back to iDRAC automatic fan control when GPU data is stale. On systems where iDRAC does not see passed-through GPU temperatures, automatic fan control may be too slow or unaware of the GPU heat. Long stale data forces 100% instead.