启动时,dask jobqueue worker失败“资源暂时不可用”

时间:2018-11-05 04:35:14

标签: dask slurm python-3.7 dask-distributed

我正在通过Jobqueue进行口齿不清的操作,我一直都得到3个错误...

基本上我的问题是什么可能导致这些失败?乍看之下,问题是太多的工作人员一次要写入磁盘,或者我的工作人员正在分叉到许多其他进程,但是要跟踪它非常困难。我可以ssh进入该节点,但是没有看到异常数量的进程,并且每个节点都有500gb的ssd,所以我不应该写太多。

以下所有内容仅是有关我的配置和此类信息的信息
我的设置如下:

1

我想我不确定是否应该设置process = False。

我在4gb内存,2个内核(-c)(即使我希望只需要1个)和1个任务(-n)的情况下通过sbatch运行此启动脚本。这通过上面的slurmcluster配置启动了我所有的工作。我将口吃提交脚本转储到文件中,看起来很合理。

每个作业并不复杂,它是对占用1个内核和2-4 GB内存的已编译可执行文件的cluster = SLURMCluster(cores=1, memory=f"{args.gbmem}GB", queue='fast_q', name=args.name, env_extra=["source ~/.zshrc"]) cluster.adapt(minimum=1, maximum=200) client = await Client(cluster, processes=False, asynchronous=True) 命令。我要求客户端调用和进一步的调用是异步的,因为我有很多条件计算。因此,每个工作程序在加载时应包含1个python进程,1个正在运行的可执行文件和1个shell。 由我们的调度程序强加

subprocess.call(

每个节点有64个核心。所以我真的不认为我会遇到任何限制。

我正在使用如下所示的jobqueue.yaml文件:

>> ulimit -a
-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-m: resident set size (kbytes)      unlimited
-u: processes                       512
-n: file descriptors                1024
-l: locked-in-memory size (kbytes)  64
-v: address space (kbytes)          unlimited
-x: file locks                      unlimited
-i: pending signals                 1031203
-q: bytes in POSIX msg queues       819200
-e: max nice                        0
-r: max rt priority                 0
-N 15:                              unlimited

我将不胜感激任何建议!完整日志如下。

slurm:
  name: dask-worker
  cores: 1                 # Total number of cores per job
  memory: 2                # Total amount of memory per job
  processes: 1                # Number of Python processes per job
  local-directory: /scratch       # Location of fast local storage like /scratch or $TMPDIR
  queue: fast_q
  walltime: '24:00:00'
  log-directory: /home/dbun/slurm_logs

https://pastebin.com/ibYUNcqD

FORK BLOCKING IO ERROR


distributed.nanny - INFO -         Start Nanny at: 'tcp://172.16.131.82:13687'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/dbun/.local/share/pyenv/versions/3.7.0/lib/python3.7/multiprocessing/forkserver.py", line 250, in main
    pid = os.fork()
BlockingIOError: [Errno 11] Resource temporarily unavailable
distributed.dask_worker - INFO - End worker

Aborted!

CANT START NEW THREAD ERROR

https://pastebin.com/FGfxqZEk

编辑: 另一个难题: 看来dask_worker正在运行多个BLOCKING IO ERROR 调用?听起来合理吗?

https://pastebin.com/r2pTQUS4

1 个答案:

答案 0 :(得分:0)

此问题是由于ulimit -u太低引起的。

事实证明,每个工作程序都有几个与之关联的进程,而python进程具有多个线程。最后,您将获得大约14个有助于ulimit -u的线程。我的设置为512,使用64核系统时,我可能会达到约896。看来我每个进程最多可以有8个线程。

解决方案: 在.zshrc(.bashrc)中,我添加了这一行

ulimit -u unlimited

此后没有任何问题。