OpenBLAS blas_thread_init: pthread_create: 资源暂时不可用
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable
我现在遇到一个问题,无法运行集群中的任何程序。它给出了错误。
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
这个问题,我估计和这个一样
于是按照我设置时的解法
export OPENBLAS_NUM_THREADS=1
然后我得到以下错误:
terminate called after throwing an instance of 'std::system_error'
what(): Resource temporarily unavailable
Aborted
有没有其他人面临同样的问题或知道如何解决这个问题?谢谢。
编辑:
好的,这似乎是因为管理员试图实施的一些配置限制而发生的。现在又可以用了。
这是为以后遇到此错误的其他人准备的。集群设置很可能会限制交互节点上用户可以 运行 的进程数。线索在错误的第二行:
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable
OpenBLAS blas_thread_init: RLIMIT_NPROC 64 current, 64 max
此处限制设置为 64。虽然这对于正常的 CLI 使用来说已经足够了,但对于交互式 运行ning Keras 作业(如 OP)可能还不够;或者就我而言,尝试 运行 交互式 Dask 集群。
也许可以使用 ulimit -u 10000
来增加 shell 的限制,但这不能保证一定有效。最好像OP一样通知管理员
我在 ubuntu 服务器上遇到了这个问题 运行 numpy。我收到以下所有错误,具体取决于我是否尝试在 shell 或 运行 我的 django 应用程序中导入 numpy:
- 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
我猜服务器对其允许的线程数量有一些限制(?)。希望对大家有帮助!
通常此问题与通过 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
如果您是经理,您可以:
使用命令ulimit -u [number]
临时更改进程数限制
永久更改进程数限制,即/etc/security/limit.conf
中的参数nproc
如果您是用户,您可以:
- 在bash
$ export OPENBLAS_NUM_THREADS=2
$ export GOTO_NUM_THREADS=2
$ export OMP_NUM_THREADS=2
- 在Python
>>> import os
>>> os.environ['OPENBLAS_NUM_THREADS'] = '1`
那么Python中多线程的问题应该解决了。关键是设置线程数要小于你在集群中的限制。
基于 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`
这将最大化您的代码使用线程的能力,同时仍保持在当前系统限制内(如果无法更改)。
我现在遇到一个问题,无法运行集群中的任何程序。它给出了错误。
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
这个问题,我估计和这个一样
于是按照我设置时的解法
export OPENBLAS_NUM_THREADS=1
然后我得到以下错误:
terminate called after throwing an instance of 'std::system_error'
what(): Resource temporarily unavailable
Aborted
有没有其他人面临同样的问题或知道如何解决这个问题?谢谢。
编辑: 好的,这似乎是因为管理员试图实施的一些配置限制而发生的。现在又可以用了。
这是为以后遇到此错误的其他人准备的。集群设置很可能会限制交互节点上用户可以 运行 的进程数。线索在错误的第二行:
OpenBLAS blas_thread_init: pthread_create: Resource temporarily unavailable
OpenBLAS blas_thread_init: RLIMIT_NPROC 64 current, 64 max
此处限制设置为 64。虽然这对于正常的 CLI 使用来说已经足够了,但对于交互式 运行ning Keras 作业(如 OP)可能还不够;或者就我而言,尝试 运行 交互式 Dask 集群。
也许可以使用 ulimit -u 10000
来增加 shell 的限制,但这不能保证一定有效。最好像OP一样通知管理员
我在 ubuntu 服务器上遇到了这个问题 运行 numpy。我收到以下所有错误,具体取决于我是否尝试在 shell 或 运行 我的 django 应用程序中导入 numpy:
- 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
我猜服务器对其允许的线程数量有一些限制(?)。希望对大家有帮助!
通常此问题与通过 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
如果您是经理,您可以:
使用命令
临时更改进程数限制ulimit -u [number]
永久更改进程数限制,即
中的参数/etc/security/limit.conf
nproc
如果您是用户,您可以:
- 在bash
$ export OPENBLAS_NUM_THREADS=2
$ export GOTO_NUM_THREADS=2
$ export OMP_NUM_THREADS=2
- 在Python
>>> import os
>>> os.environ['OPENBLAS_NUM_THREADS'] = '1`
那么Python中多线程的问题应该解决了。关键是设置线程数要小于你在集群中的限制。
基于 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`
这将最大化您的代码使用线程的能力,同时仍保持在当前系统限制内(如果无法更改)。