我正在通过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
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
编辑:
另一个难题:
看来dask_worker正在运行多个BLOCKING IO ERROR
调用?听起来合理吗?
答案 0 :(得分:0)
此问题是由于ulimit -u
太低引起的。
事实证明,每个工作程序都有几个与之关联的进程,而python进程具有多个线程。最后,您将获得大约14个有助于ulimit -u
的线程。我的设置为512,使用64核系统时,我可能会达到约896。看来我每个进程最多可以有8个线程。
解决方案: 在.zshrc(.bashrc)中,我添加了这一行
ulimit -u unlimited
此后没有任何问题。