zoukankan      html  css  js  c++  java
  • Python创建大量线程时遇上OpenBLAS blas_thread_init报错怎么办?

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

    具体看看着报错信息:

    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输入,最后的数字根据自己需要设定:

    export OPENBLAS_NUM_THREADS=2
    export GOTO_NUM_THREADS=2
    export OMP_NUM_THREADS=2
    

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

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

  • 相关阅读:
    3、取邮件
    9、将标准字符流写到文件中
    8、使用转换流处理标准输入
    6、数据流
    关闭子窗体时刷新父页面
    sql索引规则
    DataTable DataRow[] 排序 多列
    Oracle 自定义函数创建同义词、存储过程或表创建同义词
    C# DataTable 排序
    sql 分组后每组查询10个
  • 原文地址:https://www.cnblogs.com/shiyanhe/p/13604707.html
Copyright © 2011-2022 走看看