Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:joblib(仅)在通过bash脚本运行时冻结_Python_Linux_Bash_Multiprocessing - Fatal编程技术网

Python:joblib(仅)在通过bash脚本运行时冻结

Python:joblib(仅)在通过bash脚本运行时冻结,python,linux,bash,multiprocessing,Python,Linux,Bash,Multiprocessing,我通过SSH连接到一个集群,为了数据科学的目的在集群上运行Python脚本,并且一些脚本是并行的 我使用两种方法在集群上执行脚本: PyCharm部署和远程interperter(端口转发+隧道) 从bash脚本执行 当我在PyCharm或使用bash脚本上运行代码时,代码运行平稳,但只在非常小的数据集上运行。当我使用bash脚本在更大的数据集(=>更多的任务)上运行它时,它在接近任务结束时冻结。没有显示错误/警告,只是并行计算被卡住了(下面的示例)。问题总是发生在最后一个任务上,不管是完成

我通过SSH连接到一个集群,为了数据科学的目的在集群上运行Python脚本,并且一些脚本是并行的

我使用两种方法在集群上执行脚本:

  • PyCharm部署和远程interperter(端口转发+隧道)

  • 从bash脚本执行

当我在PyCharm或使用bash脚本上运行代码时,代码运行平稳,但只在非常小的数据集上运行。当我使用bash脚本在更大的数据集(=>更多的任务)上运行它时,它在接近任务结束时冻结。没有显示错误/警告,只是并行计算被卡住了(下面的示例)。问题总是发生在最后一个任务上,不管是完成1000个任务,还是完成100000个任务,这都无关紧要

冻结输出示例(应完成5000个任务):

...
[Parallel(n_jobs=32)]: Done 4889 tasks      | elapsed:   50.1s
[Parallel(n_jobs=32)]: Done 4890 tasks      | elapsed:   50.1s
[Parallel(n_jobs=32)]: Done 4891 tasks      | elapsed:   50.1s
[Parallel(n_jobs=32)]: Done 4892 tasks      | elapsed:   50.1s
[Pa
#!/bin/sh

/storage/home/username/.conda/envs/conaenv/bin/python2.7 /storage/home/username/script.py 2>&1  | tee /storage/home/username/log.txt

exit 0
Python脚本要点:

...
[Parallel(n_jobs=32)]: Done 4889 tasks      | elapsed:   50.1s
[Parallel(n_jobs=32)]: Done 4890 tasks      | elapsed:   50.1s
[Parallel(n_jobs=32)]: Done 4891 tasks      | elapsed:   50.1s
[Parallel(n_jobs=32)]: Done 4892 tasks      | elapsed:   50.1s
[Pa
#!/bin/sh

/storage/home/username/.conda/envs/conaenv/bin/python2.7 /storage/home/username/script.py 2>&1  | tee /storage/home/username/log.txt

exit 0
并行化命令的形式如下:

from joblib import Parallel, delayed
result = Parallel(n_jobs=N_CORES)(delayed(FUNCTION)(ARGUMENTS) for i in xrange(n))
参数和函数包括numpy和pandas数组

我使用的bash脚本:

...
[Parallel(n_jobs=32)]: Done 4889 tasks      | elapsed:   50.1s
[Parallel(n_jobs=32)]: Done 4890 tasks      | elapsed:   50.1s
[Parallel(n_jobs=32)]: Done 4891 tasks      | elapsed:   50.1s
[Parallel(n_jobs=32)]: Done 4892 tasks      | elapsed:   50.1s
[Pa
#!/bin/sh

/storage/home/username/.conda/envs/conaenv/bin/python2.7 /storage/home/username/script.py 2>&1  | tee /storage/home/username/log.txt

exit 0
为了解决这个问题,我试着:

  • 同时使用joblib和多处理(两者都会出现问题)

  • 指定超时以退出并行计算并仅捕获部分结果,但对超时没有响应

  • 尝试/捕获并行化函数中的任何错误,但未捕获任何错误

  • 将joblib环境变量“joblib\u START\u METHOD”设置为“forkserver”


有什么想法吗?谢谢

你现在解决这个问题了吗?据我所知,这项工作实际上根本没有冻结。很有可能Parallel()函数后面的代码已经在后台运行,但没有显示其输出(原因尚不清楚)。因为它后面的代码涉及到非常繁重的计算,它似乎在每一个实际的方面都被完全卡住了。这意味着如果你晚上不碰它,程序就会正确地处理所有的事情并相应地完成?在我的例子中,这是一个多晚上,但基本上是可以的。如果你面临类似的问题,那么值得一试。