深度学习训练时GPU温度过高?几个命令,为你的GPU迅速降温。
新买回来的不带水冷公版GPU,在满负载运行的时候,温度从室温马上飙升到85度,而且模型训练不是几分钟完事,很有可能要长期保持在高温状态下运行,让如此昂贵的GPU一直发烧真是让人太心疼!
首先得到知乎上一位朋友的文章启发,文章点击这里:从零开始组装深度学习平台(GPU散热)(https://zhuanlan.zhihu.com/p/27682206utm_medium=social&utm_source=wechat_session)。
这篇文章写的是在ubuntu X server环境下,通过修改nvidia-settings来修改GPU风扇速度,因为默认的nvidia-settings设置是,即使GPU在计算的时候温度已经达到85度,风扇速度最高不会超过70%,这样就无法很好地为GPU进行散热,因此需要手动修改GPU风扇速度。
注,以下设置都是针对linux系统的GPU设置,windows的朋友请搜索相关文章。
一.如果你有显示器(X server)
可以完全按照上面提到的这篇文章来设置:从零开始组装深度学习平台(GPU散热)(https://zhuanlan.zhihu.com/p/27682206?utm_medium=social&utm_source=wechat_session),这里贴出关键步骤为:
1.修改/etc/X11/xorg.cong文件
sudo nano /etc/X11/xorg.conf
2.在Section "Device"里面加入 Option "Coolbits" "4"
Section "Device" Identifier "Device0" Driver "nvidia" VendorName "NVIDIA" Option "Coolbits" "4" EndSection
3.重启电脑
sudo reboot
4.输入:
nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUTargetFanSpeed=100"
这里
GPUTargetFanSpeed=100
就是风扇的速度, 100就是风扇运行在100%的速度, 也可以改成其它速度. 注意在新的NVIDIA驱动,GPUCurrentFanSpeed
被改成了GPUTargetFanSpeed
. 另外GPUFanControlState=1
表示让用户可以手动调节GPU风扇速度。
感谢原文知乎作者:张三
二、如果你没有显示器
一般在ubuntu上搭建完深度学习环境后,许多朋友习惯把ubuntu的X桌面服务禁用掉,然后通过另一台windows系统的电脑通过ssh来连接GPU机器使用。这个时候X server已经被禁用掉,开机也自动启动命令行模式,上面第一种做法就不适用于这种情况了。原因是,nvidia-settings只能在X桌面环境下运行,若你想强行使用这个设置就会报错:
因此正常情况下,是不可能通过修改这个设置来改变风扇速度的。
但有没有其它方法修改呢?有!你需要骗过系统,让它你有显示器,这就是常说的headless模式。
主要的解决方法是参考了这篇文章:fan speed without X (headless) : powermizer drops card to p8(https://devtalk.nvidia.com/default/topic/831440/linux/fan-speed-without-x-headless-powermizer-drops-card-to-p8/),这篇文章提供了修改风扇速度的脚本,在ubuntu下运行脚本即可实时调节风扇速度,从而为GPU降温。
这里提供详细步骤:
- 克隆这个github仓库到本地目录/opt:https://github.com/boris-dimitrov/set_gpu_fans_public
cd /opt git clone https://github.com/boris-dimitrov/set_gpu_fans_public
在这个仓库包括上图几个文件,主要起作用的是cool_gpu这个文件,我们把文件夹克隆下来之后,运行cool_gpu就可以调节风扇速度了。
2.修改文件夹名字为set-gpu-fans,因为作者疏忽,在cool_gpu代码中此文件夹被命名为“set-gpu-fans”,然而git clone下来的文件夹名字是“set_gpu_fans_public”。
sudo mv set_gpu_fans_public set-gpu-fans
3.创建一个符号链接,让系统知道这个代码在哪里:
ln -sf ~/set-gpu-fans /opt/set-gpu-fans
4.定位到set-gpu-fans文件夹,输入以下命令:
cd /opt/set-gpu-fans
sudo tcsh
./cool_gpu >& controller.log &
tail -f controller.log
这个命令是运行cool_gpu降温代码,启动后会看到这些实时变化的提示:
在开始计算测试前,我们看看目前GPU的温度:
这里用的是2卡进行计算测试,我们可以看到,2卡的Perf(性能)一项已经被调整为“P2”(其它卡仍为P8),2卡的温度为35度,而且三个风扇的速度均为55%。“P2”指的是nvidia的显卡power state,从P0到P12,最高性能状态为P0,运行计算是为P2,最低功耗(最低性能)为P12。
启动模型训练,我们可以看到程序正在不断地自动调节温度:
当运行训练模型一段时间后,最终的温度状态如下图:
风扇被全部调节到80%的速度,温度稳定在65度!对比文章开头的数据,显卡温度从84度降到65度,整整下降了20度!
三.一点要注意的
在上面第二部分的文章出来之前,网上还流传着另一篇文章,那篇可以说是最原始的版本,上面第二部分的代码正是基于该篇原始版本文章改进的,链接地址在这里:Set fan speed without an X server(https://devtalk.nvidia.com/default/topic/789888/set-fan-speed-without-an-x-server-solved-/?offset=).
但这篇文章的原始代码存在一个严重问题:虽然能够强制改变风扇速度,但GPU会被降频工作,power state会被强制降为P8,导致运算性能严重下降!
可能是那篇文章发表时间比较早,不大适用现在最新的显卡和驱动,因此才有了上面第二部分的改进版本,所以大家不要使用原始版本的代码,否则GPU会被限制性能。
- jquery 层级选择器
- Twitter发布基于组件的轻量级JavaScript框架——Flight
- jquery的基本选择器
- WordPress 路径相关函数总结(一):站点路径相关函数
- 修复Visual Studio 2010 SP1的Toolbox导致的VS不可用
- 破解Excel 密码保护
- 配置Subversion
- WordPress 路径相关函数总结(二):主题路径相关函数
- ASP.NET 2.0 中 Web 事件
- Visual Studio 必备可视化插件推荐
- WordPress 路径相关函数总结(一):站点路径相关函数
- 在 ASP.NET 2.0 中,Global.asax 文件没有后置代码,如何将Globa.asax中的页面移到代码文件中
- 如何启用WSS 3的匿名用户访问
- 移除 WordPress 后台“外观-主题” 管理功能
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Go 常见并发模式实现(二):通过缓冲通道实现共享资源池
- 在 Linux 终端中查找域名 IP 地址的命令(五种方法)
- Laravel 表单方法伪造与 CSRF 攻击防护
- Java图形验证码支持gif、中文、算术等
- Go 常见并发模式实现(三):通过无缓冲通道创建协程池
- Linux下安装SVN服务端的方法步骤
- SSM项目频繁打成war包部署,使用tomcat和maven实现热部署配置
- Laravel 视图使用入门
- 基于 Go 协程实现图片马赛克应用(上):同步版本
- Blade 模板引擎入门篇
- 基于 Go 协程实现图片马赛克应用(下):并发重构
- Python入门教程笔记(三)数组
- Greenplum集群Master与Standby相互切换
- Java基础知识三问—百度真题
- 访问权限导致toString返回空BUG分享