为什么在Python中会显示“NumExpr默认为8个线程”的警告信息?

8

我正尝试使用python中的lux库来获取可视化建议。它会显示警告信息,例如NumExpr默认使用8个线程。

import pandas as pd
import numpy as np
import opendatasets as od
pip install lux-api
import lux
import matplotlib

接下来:

link = "https://www.kaggle.com/noordeen/insurance-premium-prediction"
od.download(link) 
df = pd.read_csv("./insurance-premium-prediction/insurance.csv")

但是,一切都运行良好。有什么问题吗?还是我可以忽略它? 警告显示如下: 在此输入图片描述

也许您的计算机上没有8个可用线程?只要NumExpr不需要8个线程,我想就没有必要担心,但是如果线程池配置需要比可用线程更多的线程,则可能会出现问题,甚至可能崩溃(尽管我会感到惊讶)。因此,如果您没有8个线程或者不想将所有CPU内核都分配给NumExpr,那么您应该显式重新配置NumExpr线程池。无论如何,您都应该查看此链接 https://numexpr.readthedocs.io/projects/NumExpr3/en/latest/user_guide.html#threadpool-configuration - Peterrabbit
1个回答

6

在大多数情况下,这并不是什么需要担心的事情。警告来自此函数,以下是最重要的部分:

...
    env_configured = False
    n_cores = detect_number_of_cores()
    if 'NUMEXPR_MAX_THREADS' in os.environ:
        # The user has configured NumExpr in the expected way, so suppress logs.
        env_configured = True
        n_cores = MAX_THREADS
...
    if 'NUMEXPR_NUM_THREADS' in os.environ:
        requested_threads = int(os.environ['NUMEXPR_NUM_THREADS'])
    elif 'OMP_NUM_THREADS' in os.environ:
        requested_threads = int(os.environ['OMP_NUM_THREADS'])
    else:
        requested_threads = n_cores
        if not env_configured:
            log.info('NumExpr defaulting to %d threads.'%n_cores)

因此,如果没有设置NUMEXPR_MAX_THREADSNUMEXPR_NUM_THREADSOMP_NUM_THREADS中的任何一个,NumExpr将使用与核心数相同数量的线程(即使文档中说最多为8个,但这不是我在代码中看到的)。
您可能希望在计算真正巨大的矩阵时使用其他线程数,以获得更好的效果,或者减少使用线程的数量,因为并没有提高效率。可以在shell中或在导入numexpr之前设置环境变量,例如:
import os
os.environ['NUMEXPR_MAX_THREADS'] = '4'
os.environ['NUMEXPR_NUM_THREADS'] = '2'
import numexpr as ne 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接