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

bjp0bcyl  于 2023-08-06  发布在  其他
关注(0)|答案(6)|浏览(728)

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

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


有没有其他人面临同样的问题或有想法如何解决这个问题?- 谢谢你-谢谢
编辑:好的,看起来这是因为管理员试图实现的一些配置限制。现在它又起作用了。

tkclm6bt

tkclm6bt1#

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

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

我把这个答案贴出来,因为它让我发疯。对我有帮助的是补充:

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

字符串
之前

import numpy as np


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

g52tjvyc

g52tjvyc2#

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

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一样通知管理员。

daupos2t

daupos2t3#

通常,此问题与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

chy5wohz

chy5wohz4#

如果您是经理,您可以:
1.使用命令ulimit -u [number]临时更改进程的限制数量
1.永久改变进程的限制数量,即/etc/security/limit.conf中的参数nproc
如果您是用户,您可以:
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中的多线程问题就应该解决了。关键是将集群中的线程数设置为小于您的限制。

csbfibhn

csbfibhn5#

在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`


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

xytpbqjk

xytpbqjk6#

在Docker中有这个确切的问题,似乎是旧版本的问题。
如果有人遇到这个问题,无法升级Docker版本,我找到的解决方法是在容器中添加以下选项

--security-opt seccomp=unconfined

字符串

相关问题