深度学习:服务器操作常见问题及解决方案
作者:光火
深度学习任务普遍需要显卡支持,因此相关领域的研究者经常会在服务器端开展工作。这时,除了代码潜藏的 Bug,server 操作过程中的各种问题也会带来极大困扰。考虑到这些问题相当繁杂且颇为常见,本文对此进行了汇总并提供相应的解决方案。文章不定期更新,建议追踪。
Driver/library version mismatch
- 问题描述:命令行输入
nvidia-smi
后,出现如下报错信息,并且所有使用 GPU 的程序均无法正常运行Failed to initialize NVML: Driver/library version mismatch
- 解决方案:一般是由于系统驱动自动升级,导致驱动版本与内核版本不一致引起的
-
首先在终端输入如下命令
cat /var/log/dpkg.log | grep nvidia
如图,系统驱动已经自 525.89.02 更新为 525.105.17
随后通过下述命令,查看显卡驱动的内核版本
cat /proc/driver/nvidia/version
倘若显卡驱动仍为旧版本,则考虑重启服务器。在终端输入
sudo reboot
服务器重启后会重新加载内核,此时再输入
nvidia-smi
即可正常查看显卡使用状况并运行程序了。倘若问题仍未解决,可以参考这篇文章
-
ImportError: … version GLIBCXX_3.4.29 not found
-
问题描述:程序运行失败,并出现如下报错
ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version GLIBCXX_3.4.29 not found
-
解决方案:该报错说明默认路径下的
libstdc++.so.6
缺少GLIBCXX_3.4.29
,详细的解决方案可以参考这篇文章,这里做简要总结-
首先在终端输入如下命令,查看当前拥有的全部
GLIBCXX
版本strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
倘若确实缺少对应的版本号(如本例中的
GLIBCXX_3.4.29
),则继续查看当前系统的其他同类型文件,并找到一个相对较高的版本sudo find / -name "libstdc++.so.6*"
选择该高版本路径,利用之前的指令查看
GLIBCXX
strings 找到的高版本 GLIBCXX 路径 | grep GLIBCXX 例如: strings /home/datamining/miniconda3/envs/target/lib/libstdc++.so.6.0.30 | grep GLIBCXX
如若其中包含需要的版本,则复制到指定目录并建立新的链接
# 复制 # cp 搜索到的路径 cp /home/datamining/miniconda3/envs/target/lib/libstdc++.so.6.0.30 /lib/x86_64-linux-gnu/ # 删除之前的链接 sudo rm /lib/x86_64-linux-gnu/libstdc++.so.6 # 创建新的链接 sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 /lib/x86_64-linux-gnu/libstdc++.so.6
-
(errno: 98 – Address already in use).
-
问题描述: 在多卡机使用
DDP
训练模型,但程序运行后出现如下报错。(关于DDP
的具体介绍可以参考这篇文章)The server socket has failed to bind to ?UNKNOWN? (errno: 98 - Address already in use).
-
解决方案:
DDP
选择的默认端口号为 29500,倘若该端口当前被其他程序占用,则会产生冲突,导致上述报错。此处提供两种解决方案- 方法一:通过
nvidia-smi
或ps aux|grep python
查询对应的进程,并利用kill -9 PID
强制释放资源 - 方法二:在
DDP
的启动命令中手动添加--master_port=xxxxx
选项,避开已被占用的 29500 端口# before nohup torchrun --nproc_per_node=4 train.py > nohup.out & # after nohup torchrun --nproc_per_node=4 --master_port=25641 train.py > nohup.out &
- 方法一:通过
Server VS Code 插件需要反复安装
- 问题描述:多人使用 VS Code 操纵同一台服务器,发现扩展(Extensions)经常需要重复安装
- 解决方案:所有操作者统一将 VS Code 更新至最新版本【左上角点击 Help(帮助) 后选择 Check for Updates(检查更新) 】
nohup 后程序随 VS Code 窗口关闭而终止
- 问题描述:使用
nohup
命令让程序后台运行,但 VS Code 窗口关闭后,程序也随之自动终止 - 解决方案:使用
nohup
命令挂载程序后,在终端输入 exit 后再关闭窗口
参考资料
- 解决 Failed to initialize NVML: Driver/library version mismatch
- 解决 ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.22‘ not found
- 解决 DDP :The server socket has failed to bind to [::]:29500 (errno: 98 – Address already in use