Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么numpy在多处理方面很慢?_Python_Numpy_Python Multiprocessing_Joblib - Fatal编程技术网

Python 为什么numpy在多处理方面很慢?

Python 为什么numpy在多处理方面很慢?,python,numpy,python-multiprocessing,joblib,Python,Numpy,Python Multiprocessing,Joblib,我正试图从头开始编写神经网络,由于数据集庞大,我希望我的4个内核能够并行处理批处理。但与逐个处理所有批相比,多处理的最终执行时间较慢 我试过很多方法,但都没能解决问题。如果我为一个批处理的所有参数和变量分配单独的内存,然后对该函数进行多处理,它不应该在与单独计算一个批处理相同(或至少相似)的时间内给出4个结果吗?我知道并行处理会有一些开销,但是单次执行的时间怎么可能超过4倍呢? 我哪里错了 我将整个问题归结为一个简单的代码片段: import numpy as np import time fr

我正试图从头开始编写神经网络,由于数据集庞大,我希望我的4个内核能够并行处理批处理。但与逐个处理所有批相比,多处理的最终执行时间较慢

我试过很多方法,但都没能解决问题。如果我为一个批处理的所有参数和变量分配单独的内存,然后对该函数进行多处理,它不应该在与单独计算一个批处理相同(或至少相似)的时间内给出4个结果吗?我知道并行处理会有一些开销,但是单次执行的时间怎么可能超过4倍呢? 我哪里错了

我将整个问题归结为一个简单的代码片段:

import numpy as np
import time
from joblib import Parallel, delayed, parallel_backend

def compute(message, data):
    start = time.time()
    iters = 10
    for i in range(iters):
        c_sum = np.sum(data, axis=(2, 3, 4))
    end = time.time()
    print(f"{message}: {end-start:.4f}")

def main():
    data = np.random.randn(16, 32, 48, 48, 32)
    compute("Single Batch", data)
    n_jobs = 4
    with parallel_backend('loky', n_jobs=n_jobs):
        Parallel(n_jobs, prefer='processes')(delayed(compute)("parallel", data) for i in range(n_jobs))

if __name__ == "__main__":
    main()
此代码段在我的计算机上给出了以下结果:

Single Batch: 0.1893
parallel: 0.7264
parallel: 0.7714
parallel: 0.7368
parallel: 0.7751
如您所见,处理单个批处理比每次并行执行都要快。当我们增加“for”循环中的迭代次数时,这个问题就会增加。我能做点什么吗

PS:我也尝试过numexpr,但在这方面它甚至比numpy慢