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