训练速度突然下降以及执行nvidia-smi卡顿如何解决?
问题现象
在高性能8卡GPU的裸金属上的训练任务突然变慢,以前1个epoch约2小时执行完成,最近1个epoch需要2天才能执行完成,并且执行“nvidia-smi”也明显变很卡顿。
原因分析
根据现象描述可能出现了nvidia-smi D+进程。 "D+"表示进程状态为"Uninterruptible Sleep (usually IO)",即进程正在等待I/O操作完成,此时无法被中断。
在正常情况下,nvidia-smi进程通常只会短暂地出现D+状态,因为它们是由内核控制的,该进程处于等待I/O操作完成的状态,可能是在读取或写入GPU相关的数据,这是正常的操作。但是,如果该进程一直处于"D+"状态,可能表明出现了I/O操作阻塞或其他问题,这可能导致系统死锁或其他问题。
如果想构造nvidia-smi D+进程,可以死循环一直执行nvidia-smi体验D+进程带来的系统不稳定性, 如:
#!/bin/bash while true; do nvidia-smi & sleep 1 # 可以根据需要调整间隔时间 done
然后执行查看产生nvidia D+进程
ps -aux | grep -w D+
结果如下:
![](https://support.huaweicloud.com/trouble-modelarts/figure/zh-cn_image_0000001981285601.png)
此时可以观察你的训练任务或者执行“nvidia-smi”等命令,几乎是卡顿无法执行,因为内核IO已经阻塞, 无法执行相关GPU命令,只能尝试释放D+进程。
处理方法
“nvidia-smi”是一个NVIDIA GPU监视器命令行工具,用于查看GPU的使用情况和性能指标,可以帮助用户进行GPU优化和故障排除。 但是建议在业务软件或训练算法中,避免频繁使用“nvidia-smi”命令功能获取相关信息,存在锁死的风险。出现D+进程后可以尝试如下方法:
- 方法1: 可以根据ps -aux查到的进程号, 使用kill -9强制关闭进程。
sudo kill -9 <进程ID>
- 方法2: 如果方法1执行后无法消除D+进程, 请尝试重启服务器。