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

时间:2017-09-04 00:02:36

标签: python linux bash multiprocessing

我通过SSH连接到群集,在其上运行Python脚本用于数据科学目的,并且一些脚本是并行化的。

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

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

  • 从bash脚本执行。

我在PyCharm上运行或使用bash脚本时,我的代码运行顺畅,但仅限于非常小的数据集。当我使用bash脚本在较大的数据集(=>更多的任务)上运行它时,它会在接近任务结束时冻结。没有显示错误/警告,只是并行计算被卡住(例如下面的例子)。问题总是发生在最后的任务上,无论是1000个任务应该完成,还是100,000个 - 没关系。

示例冻结输出(应该完成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

Python脚本要点:

并行化命令的格式为:

from joblib import Parallel, delayed
result = Parallel(n_jobs=N_CORES)(delayed(FUNCTION)(ARGUMENTS) for i in xrange(n))

论据和功能包括numpy&熊猫阵列。

我使用的bash脚本:

#!/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和amp;多处理(两者都有问题)。

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

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

  • 将joblib环境变量'JOBLIB_START_METHOD'设置为'forkserver'。

有什么想法吗?谢谢!

0 个答案:

没有答案