Python 3.x OpenBLAS blas_thread_init:pthread_create:资源暂时不可用

Python 3.x OpenBLAS blas_thread_init:pthread_create:资源暂时不可用,python-3.x,keras,openblas,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

我现在面临一个问题,无法在群集中运行任何程序。它给出了错误

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
是否还有其他人面临同样的问题,或者对如何解决这个问题有想法?多谢各位

编辑:
好的,看起来这是因为管理员试图实现一些配置限制。现在它又起作用了。

这是为将来遇到此错误的其他人准备的。群集设置很可能会限制用户可以在交互节点上运行的进程数。线索在错误的第二行:

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-u10000可以增加shell的限制,但这不能保证有效。最好像OP一样通知管理员。

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

  • PyCapsule_导入无法从导入模块“datetime”
  • numpy.core.\u多数组\u umath导入(OpenBLAS blas\u线程\u初始化:
  • 32个线程中的第25个线程的pthread_创建失败:资源暂时不可用
我发布这个答案是因为它让我发疯。对我有帮助的是添加:

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

import numpy as np

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

通常,这个问题与通过
ulimit
提供的进程数量限制有关(在Linux中):

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

ulimit -u 127590
然后,在我的
~/.bashrc
文件中添加一行,以在登录时设置它


有关如何永久解决此问题的更多信息,请查看:

如果您是经理,您可以:

  • 使用命令
    ulimit-u[number]

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

  • 如果您是用户,您可以:

  • 在狂欢节上
  • 用Python

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

    基于Ylor的答案,而不是将自己限制为单个线程,阅读错误输出(这里是我的前几行):

    并找到失败的最小线程数–然后将线程数设置为少一个(此处为12):


    这将最大限度地提高代码使用线程的能力,同时仍保持在当前系统限制内(如果无法更改)当我遇到错误时,我还试图以交互方式运行Keras程序。然后群集管理员取消了限制,我可以使用它。在我的例子中,
    OpenBLAS blas_thread_init:pthread_create在线程3/24时失败:资源暂时不可用OpenBLAS blas_thread_init:RLIMIT_NPROC 4096 current,1540106 max
    谢谢,这帮了我很大的忙谢谢你@Ylor和@Haramoz。对我来说,在导入熊猫之前添加
    import os
    os.environ['OPENBLAS\u NUM\u THREADS']='1'
    时,它就起到了这个解决方案的作用。所有这些都在我的flask应用程序的my app.py文件中
    → 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 -u 127590
    
        $ export OPENBLAS_NUM_THREADS=2
        $ export GOTO_NUM_THREADS=2
        $ export OMP_NUM_THREADS=2
    
        >>> import os
        >>> os.environ['OPENBLAS_NUM_THREADS'] = '1`
    
    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
    ...
    
    >>> import os
    >>> os.environ['OPENBLAS_NUM_THREADS'] = '12`