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)

Torch的安装

(已解决)Ubuntu多显卡训练模型时程序卡死:torch torch 奈若何

通过Python子进程模块(airodump-ng)停止Linux终端中正在运行的进程[重复]

从命令行运行 python 要求我导入模块