PyTorch导入时程序阻塞挂起问题求助与排查
排查PyTorch导入挂起问题的思路
这确实是个挺罕见的问题,结合你提供的回溯信息、环境细节以及过往的部署经验,我整理了几个针对性的排查方向,你可以逐一尝试:
1. 清理残留进程,排查系统资源冲突
你提到出现过Soft lock up on CPU#4的提示,这大概率和残留进程占用关键资源有关:
- 先杀掉所有Python相关进程:执行
ps aux | grep python列出所有Python进程,用kill -9 <pid>强制终止所有可疑进程(包括之前挂起的Python会话) - 检查文件描述符是否耗尽:执行
ulimit -n查看当前限制,lsof | wc -l统计已使用的文件描述符数量,如果已接近限制,临时调高试试:ulimit -n 65535,之后再测试import torch
2. 深挖uname调用的异常场景
从回溯信息看,问题卡在Python调用uname -p的子进程读取环节,虽然直接执行uname正常,但Python的子进程环境可能有差异:
- 手动模拟Python的调用方式:执行
python3 -c "import os; print(os.popen('uname -p 2> /dev/null').read())",观察是否会挂起 - 确认
uname的合法性:执行which uname确保路径是/bin/uname,再用ls -l /bin/uname检查是否为正常系统二进制文件,避免被异常脚本替换 - 临时绕过platform模块调用(验证用):在导入torch前手动覆盖
platform.system方法,看是否能正常导入:import platform # 临时替换platform.system的返回值 original_system = platform.system platform.system = lambda: 'Linux' # 尝试导入torch import torch # 恢复原方法 platform.system = original_system
3. 排查CUDA与GPU相关异常
虽然你用的CUDA10.0和440.82驱动版本兼容,但GPU层面的异常也可能导致初始化挂起:
- 检查GPU状态:执行
nvidia-smi查看GPU是否被其他进程占用,驱动是否正常加载;再用lsmod | grep nvidia确认内核模块是否正常 - 测试无GPU环境下的导入:设置
export CUDA_VISIBLE_DEVICES="",然后执行python3 -c "import torch",如果不再挂起,说明问题可能出在CUDA上下文初始化环节,可进一步排查GPU硬件或驱动的深层问题
4. 验证Python环境的纯净性
系统级Python环境可能存在损坏或第三方库干扰:
- 创建全新虚拟环境测试:
python3 -m venv torch_test_env source torch_test_env/bin/activate pip install torch==1.4.0 torchvision==0.5.0 python -c "import torch" - 排除第三方库干扰:在干净的虚拟环境中只安装PyTorch,不导入其他自研库或第三方库,测试是否能正常导入
5. 系统层面的深层排查
Soft lock up提示通常指向系统内核或硬件问题:
- 查看系统日志:执行
dmesg搜索是否有CPU、内存、PCIe总线相关的错误日志,尤其是和Soft lock up相关的条目 - 更新系统内核:CentOS7.4的内核版本较老,部分内核bug可能导致进程挂起,执行
yum update kernel更新到最新稳定内核后重启系统,再测试问题是否消失
补充提示:你提到多次测试中偶尔出现Soft lock up,这更偏向系统底层的资源竞争或硬件/内核异常,建议优先排查系统日志和进程残留的情况。
内容的提问来源于stack exchange,提问作者Ted Yu
相关产品推荐
相关产品推荐

