我通过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'。
有什么想法吗?谢谢!