GPU停止工作现象
GPU训练上一个模型用了5个小时,我在训练下一个模型的时候,发现GPU停止工作了。
虽然GPU显存占用了24G,但是GPU没有运行任何数据。
基本也可以排除是报错原因,首先训练已经启动了,已经训练了一批数据,而且现在显存还是处于占用状态。
我猜测应该是长时间运行,导致温度过高,GPU停止工作。毕竟之前已经连续运行了很长一段时间了。
使用下述命令,查看GPU的温度:
nvidia-smi -q -d temperature
输出信息:
==============NVSMI LOG==============
Timestamp : Mon May 12 08:52:44 2025
Driver Version : 560.35.05
CUDA Version : 12.6
Attached GPUs : 1
GPU 00000000:01:00.0
Temperature
GPU Current Temp : 87 C
GPU T.Limit Temp : N/A
GPU Shutdown Temp : 98 C
GPU Slowdown Temp : 95 C
GPU Max Operating Temp : 93 C
GPU Target Temperature : 84 C
Memory Current Temp : N/A
Memory Max Operating Temp : N/A
以下是对GPU温度相关信息的解释:
- Timestamp: 显示查询的时间戳,即2025年5月12日星期一08:49:17。
- Driver Version: 显示当前安装的NVIDIA驱动版本为560.35.05。
- CUDA Version: 显示当前支持的CUDA版本为12.6。
关于连接的GPU的信息:
- Attached GPUs: 表示系统中连接了1个GPU。
- GPU 00000000:01:00.0: 这里列出了具体的GPU信息。
对于该GPU的温度细节:
- GPU Current Temp: 当前GPU的核心温度是87摄氏度。这是一个需要注意的数值,因为这个温度已经相当高。
- GPU T.Limit Temp (GPU目标温度): N/A(未提供),这可能意味着没有设置特定的目标温度或者工具无法读取这一信息。
- GPU Shutdown Temp (GPU关机温度): 98摄氏度。当GPU温度达到这个值时,为了保护硬件免受损害,系统会自动关闭GPU。
- GPU Slowdown Temp (GPU减速温度): 95摄氏度。如果GPU温度达到这个值,系统将开始降低GPU的工作频率以减少热量产生。
- GPU Max Operating Temp (GPU最大工作温度): 93摄氏度。这是GPU在正常操作下允许的最高温度。
- GPU Target Temperature: 84摄氏度。这是理想的操作温度或目标温度,当前温度(87摄氏度)略高于此值。
- Memory Current Temp 和 Memory Max Operating Temp: 对于显存的当前温度和最大工作温度均为N/A,表明这些信息要么不适用,要么不可用。
GPU当前运行温度为87摄氏度,接近但尚未达到导致性能下降或自动关机的温度阈值。然而,考虑到最佳实践和硬件寿命,建议采取措施降低其工作温度,比如改善散热条件、确认风扇是否正常运作、确保环境温度适宜等。长期处于高温状态下可能会缩短GPU的使用寿命,并影响性能。
应对方案 sleep
在做这种批量运行的模型训练的时候,可以在上一个模型训练完成之后,休眠一段时间,让GPU降温。
pipeline1.sh
是我写的一个大模型批量训练的脚本:
bash pipeline1.sh Qwen/Qwen2.5-7B-Instruct qwen dataset_name1 > logs/qwen_dataset_name1_pipeline1.log 2>&1
sleep 1200
bash pipeline1.sh Qwen/Qwen2.5-7B-Instruct qwen dataset_name2 > logs/qwen_dataset_name2_pipeline1.log 2>&1
每一个模型训练之后,都休息1200秒
温度检查的脚本:
下述的解决方案更实用,GPU温度降低到某个值之后,才开始下一个模型训练:
# 上一个模型训练
while [ $(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader) -gt 70 ]; do
sleep 60
done
# GPU 温度降至 70°C 以下后再启动下一作业
# 下一个模型训练
chatgpt的回答
概览
通过硬件和软件层面的综合优化,你可以有效降低 GPU 的运行温度并避免长时间训练过程中的意外停机。主要策略包括:
- 优化机箱和环境气流(增设或重定位风扇、清理灰尘、更换导热硅脂,甚至采用水冷方案);
- 利用 NVIDIA 工具设置功率和温控上限(开启常驻模式、设置功率/温度限制、使用动态风扇曲线);
- 在训练管道中降低持续峰值负载(混合精度训练、梯度累积、按需冷却停顿);
- 实施实时温度监控与自动化作业控制(脚本或 AI 驱动的散热管理),以防止热降频或自动关机。
1. 改善物理散热与气流
1.1 优化机箱气流
- 在机箱前部/底部安装进风风扇,后部/顶部安装出风风扇,形成前进后出的气流路径,将热空气快速排出。
1.2 定期清洁与维护
- 定期开箱清理灰尘,用压缩空气清理风扇叶片和散热鳍片;
- 每隔 1–2 年更换一次 GPU 导热硅脂,以恢复散热效率。
1.3 考虑水冷方案
- 对于持续高负载场景,可选用一体式封闭水冷(AIO)或定制水冷系统,有效将 GPU 温度控制在低于风冷极限的水平。
2. 利用 NVIDIA 软件控制
2.1 开启常驻模式
保持驱动常驻,可避免每次作业重启时自定义功率和温度设置被重置:
sudo nvidia-smi -pm ENABLED
2.2 限制功率上限
降低功耗可显著减少热量输出,例如将功率上限设为 250W:
sudo nvidia-smi -i 0 -pl 250
2.3 设置目标温度与风扇曲线
通过驱动将温控目标设为 80°C,接近时风扇自动提速:
nvidia-smi --gpu-target-temp=80
3. 训练管道优化
3.1 采用混合精度与梯度累积
- 使用 NVIDIA AMP(自动混合精度)可降低显卡计算强度;
- 通过梯度累积在不改变全局 batch 大小的前提下,分批次微调,进一步降低持续功耗与热量。
3.2 安排冷却间歇
在连续训练作业间插入短暂休息,并在重启前检测温度:
while [ $(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader) -gt 70 ]; do
sleep 60
done
# GPU 温度降至 70°C 以下后再启动下一作业
4. 主动监控与智能调控
4.1 实时监控脚本
- 使用简单脚本或监控系统(如 Prometheus、Ganglia)记录温度,一旦超阈值自动降频或暂停作业,避免无声停机。
4.2 AI 驱动的散热管理
- 部分前沿系统可预测温度峰值,动态调节风扇转速或水泵功率,实现更高效的散热保护。
5. 考虑云端或专业机房
如本地散热始终受限,可将大规模训练迁往配备工业级空调和电力管理的 GPU 云实例,从而彻底摆脱硬件散热瓶颈。
推荐阅读
如果微调过程中程序崩溃了,如果你使用的是 llamafactory微调,建议你阅读下述文章:
llamafactory SFT 从断点恢复训练