Linux终端运行python命令卡死,torch.utils.cpp_extension.load 无响应?
Posted lishanlu136
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux终端运行python命令卡死,torch.utils.cpp_extension.load 无响应?相关的知识,希望对你有一定的参考价值。
大体情况是这样的,我在本地用xshell连接到远程服务器,用xshell的界面打开服务器终端,通过Anaconda虚拟环境执行工程服务文件,执行命令是这样的:
CUDA_VISIBLE_DEVICES=1 python service.py
,当我在终端敲完这条命令,点击enter键,终端没任何反应(排除掉ctrl+s锁死终端界面的情况,因为我还能输入命令,按enter键后,光标能跳到下一行)
附上终端的快捷键命令:
ctrl+s 暂停屏幕输出
ctrl+q 恢复屏幕输出
ctrl+l 清屏,和clear作用一样
ctrl+d 退出用户
ctrl+c 结束当前正在运行的程序
解决思路
第一步:在service.py文件里面导入系统库后面添加打印信息,在导入自己写的模块后面添加打印信息;结果看到在程序其实能运行,只是卡死在导入自己写的模块的地方,但是明明上午我还能运行,这点有些奇怪。
第二步:确定具体是哪个模块导入出错,根据自己导入的文件一步一步深入发现有两个文件:fused.act.py,upfirdn2d.py,在导入upfirdn2d模块时卡住了。
fused_act.py最开始部分如下:
upfirdn2d.py最开始部分如下:
两个文件在同一个目录下,目录里的文件如下:
懂pytorch的都知道,pytorch利用torch.utils.cpp_extension构建CUDA/C++拓展,将cpp和cu文件做成.so动态库供python调用,可参考链接,生成的.so文件自动缓存到临时目录:
可以看到upfirdn2d文件夹下有一个lock文件,这就是导致卡死的原因,可参考链接
于是我用命令把它删除后,就可以运行了。
第三步:找到问题原因,这还不够
每次运行都得编译生成.so文件在导入,这导致启动程序很慢,所以我索性直接将两个.so文件复制在fused.act.py,upfirdn2d.py同级目录下,直接import这两个.so文件于是就成了这样:
fused.act.py开头部分:
upfirdn2d.py开头部分:
这样修改后,每次启动程序就不需要编译生成.so文件,直接从同级目录下导入.so文件即可,加快程序运行时间。
以上是关于Linux终端运行python命令卡死,torch.utils.cpp_extension.load 无响应?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Java 的 linux 终端中交互地执行多个命令?
无法导入 Torch (ImportError: libcudart.so.10.0)
(已解决)Ubuntu多显卡训练模型时程序卡死:torch torch 奈若何