OpenBLAS blas_thread_init:pthread_create:资源暂时不可用

时间:2018-08-26 13:20:36

标签: python-3.x keras openblas

我现在遇到问题,无法在群集中运行任何程序。它给出了错误。 OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable OpenBLAS blas_thread_init: RLIMIT_NPROC 64 current, 64 max OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable OpenBLAS blas_thread_init: RLIMIT_NPROC 64 current, 64 max OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable OpenBLAS blas_thread_init: RLIMIT_NPROC 64 current, 64 max OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable OpenBLAS blas_thread_init: RLIMIT_NPROC 64 current, 64 max Traceback (most recent call last): File "hello-world.py", line 1, in <module> from keras.models import Sequential File "/home/amalli2s/anaconda3/lib/python3.6/site-packages/keras/__init__.py", line 3, in <module> from . import utils File "/home/amalli2s/anaconda3/lib/python3.6/site-packages/keras/utils/__init__.py", line 2, in <module> from . import np_utils File "/home/amalli2s/anaconda3/lib/python3.6/site-packages/keras/utils/np_utils.py", line 6, in <module> import numpy as np File "/home/amalli2s/.local/lib/python3.6/site-packages/numpy/__init__.py", line 142, in <module> from . import add_newdocs File "/home/amalli2s/.local/lib/python3.6/site-packages/numpy/add_newdocs.py", line 13, in <module> from numpy.lib import add_newdoc File "/home/amalli2s/.local/lib/python3.6/site-packages/numpy/lib/__init__.py", line 8, in <module> from .type_check import * File "/home/amalli2s/.local/lib/python3.6/site-packages/numpy/lib/type_check.py", line 11, in <module> import numpy.core.numeric as _nx File "/home/amalli2s/.local/lib/python3.6/site-packages/numpy/core/__init__.py", line 16, in <module> from . import multiarray SystemError: initialization of multiarray raised unreported exception 我认为这个问题与这个Multiple instances of Python running simultaneously limited to 35

相同

所以根据我设置的解决方案 export OPENBLAS_NUM_THREADS=1

然后我最终遇到以下错误。 terminate called after throwing an instance of 'std::system_error' what(): Resource temporarily unavailable Aborted

是否还有其他人面临相同的问题或对如何解决这个问题有想法?谢谢。

6 个答案:

答案 0 :(得分:2)

这是给将来遇到此错误的其他人的。群集设置很可能会限制用户可以在交互式节点上运行的进程数。提示位于错误的第二行:

OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable
OpenBLAS blas_thread_init: RLIMIT_NPROC 64 current, 64 max

此处限制设置为64。尽管这对于正常的CLI使用是足够的,但对于交互式运行Keras作业(例如OP)而言可能还不够;或者就我而言,尝试运行交互式Dask集群。

使用ulimit -u 10000可能会增加shell的限制,但这不能保证正常工作。最好像OP这样通知管理员。

答案 1 :(得分:2)

此问题通常与通过ulimit(在Linux中)可用的进程数限制有关:

→ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 127590
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 4096         # <------------------culprit
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

一个临时解决方案是增加此限制:

ulimit -u unlimited

我遇到的大多数服务器都将此值设置为未决信号的数量。例如。 ulimit -i。因此,在上面的示例中,我改为:

ulimit -u 127590

然后,在我的~/.bashrc文件上添加一行以在登录时进行设置。

有关如何永久解决此问题的更多信息,请查看:https://serverfault.com/a/485277

答案 2 :(得分:0)

好吧,似乎是由于管理员试图实现某些配置限制而发生的。现在它又可以工作了。

答案 3 :(得分:0)

我在ubuntu服务器上运行numpy时遇到此问题。我遇到以下所有错误,具体取决于我是尝试在Shell中导入numpy还是运行django应用程序:

  • PyCapsule_Import无法从中导入模块“ datetime”
  • numpy.core._multiarray_umath导入(OpenBLAS blas_thread_init:
  • pthread_create在线程25(共32)中失败:资源暂时不可用

我正在发布此答案,因为它使我发疯。对我有用的是添加:

import os
os.environ['OPENBLAS_NUM_THREADS'] = '1'

之前

import numpy as np

我猜想服务器对其允许的线程数量有一些限制(?)。希望它能对某人有所帮助!

答案 4 :(得分:0)

如果您是经理,则可以:

  1. 使用命令ulimit -u [number]

    临时更改限制进程数
  2. 永久更改进程数的限制,即nproc中的参数/etc/security/limit.conf

如果您是用户,则可以:

  1. 在bash中
    $ export OPENBLAS_NUM_THREADS=2
    $ export GOTO_NUM_THREADS=2
    $ export OMP_NUM_THREADS=2
  1. 在Python中
    >>> import os
    >>> os.environ['OPENBLAS_NUM_THREADS'] = '1`

然后应该解决由于Python中的多线程导致的问题。关键是将线程数设置为小于群集中的限制。

答案 5 :(得分:0)

以 Ylor 的回答为基础,不要将自己限制在一个线程中,而是通读错误输出(这是我的前几行):

OpenBLAS blas_thread_init: pthread_create failed for thread 13 of 64: Resource temporarily unavailable
OpenBLAS blas_thread_init: RLIMIT_NPROC 2048 current, 384066 max
OpenBLAS blas_thread_init: pthread_create failed for thread 58 of 64: Resource temporarily unavailable
OpenBLAS blas_thread_init: RLIMIT_NPROC 2048 current, 384066 max
...

并找到失败的最小线程数——然后将线程数设置为少一(这里对我来说是 12):

>>> import os
>>> os.environ['OPENBLAS_NUM_THREADS'] = '12`

这将最大限度地提高您的代码使用线程的能力,同时仍保持在当前系统限制范围内(如果无法更改)。