前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python创建大量线程时遇上OpenBLAS blas_thread_init报错怎么办?

Python创建大量线程时遇上OpenBLAS blas_thread_init报错怎么办?

作者头像
实验盒
发布2021-09-22 12:19:12
2.4K0
发布2021-09-22 12:19:12
举报
文章被收录于专栏:实验盒实验盒

计算机明明还有空闲资源,但 Python 创建大量线程时,遇上OpenBLAS blas_thread_init 报错怎么办?

具体看看着报错信息:

代码语言:javascript
复制
OpenBLAS blas_thread_init: RLIMIT_NPROC 4096 current, 8251551 max
OpenBLAS blas_thread_init: pthread_create failed for thread 122 of 128: Resource temporarily unavailable

里面说到,OpenBLAS 无法创建线程。

cat /proc/cpuinfo| grep "processor"| wc -l 查看CPU的逻辑核数,总共有160个:

再用 top 看一下系统资源情况:

还有近 1.8T 的闲置内存,一小半的核数。但用 Python 的 multiprocessing 创建的线程数也小于空闲核数,为什么还会失败?

再来看看报错信息,里面提到的 RLIMIT_NPROC 变量控制了用户可以使用的 CPU 核数。OpenBLAS 创建线程时超过了核它,从而导致失败。虽然操作时设置的线程数没有超,但OpenBLAS可能尝试同时启动多个线程来加速线性代数,导致总的线程数超过可利用的线程数。

简单来说,可以在 bash 用以下三种方法其中一个控制 OpenBlas 线程数,直接在 bash 输入,最后的数字根据自己需要设定:

代码语言:javascript
复制
export OPENBLAS_NUM_THREADS=2
export GOTO_NUM_THREADS=2
export OMP_NUM_THREADS=2

或者在 Python 程序的开头加入:

代码语言:javascript
复制
import os
os.environ['OPENBLAS_NUM_THREADS'] = '1`
本文参与?腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-02,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 实验盒 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com