joblib的一个最小示例在所有4个核心上运行,另一个仅在一个核心上运行。固定?

问题描述 投票:0回答:1

我试图在我的机器学习算法的实现中使用一些并行计算,使用joblib,尤其是this page上使用的技术。下面的例子让我理解并行性,我和ML算法中的第二个例子有同样的问题。

此示例按预期在所有4个核心上运行:

from joblib import Parallel, delayed

N_PARAM = 10000
N_TEST_FUN = 10000000

def testfunc(data):
    for _ in range(N_TEST_FUN):
        for i in data:
                i*i

def run(niter=10):
    data = [list(range(N_PARAM)) for _ in range(niter)]
    pool = Parallel(n_jobs=-1, verbose=1, pre_dispatch='all')
    results = pool(delayed(testfunc)(dd) for dd in data)

if __name__ == '__main__':
    run()

虽然此示例仅在1上运行:

from joblib import Parallel, delayed

N_PARAM = 10000
N_TEST_FUN = 10000000

def testfunc():
    for _ in range(N_TEST_FUN):
        for i in range(N_PARAM):
            i**2

def run(niter=10):
    pool = Parallel(n_jobs=-1, verbose=1, pre_dispatch="all")
    pool(testfunc() for _ in range(niter))

if __name__ == "__main__":
    run()

我根本不明白。这是为什么 ?

我是Ubuntu 18.10,我使用了来自Anaconda发行版的joblib 0.13.2和python 3.6.8。

python parallel-processing multiprocessing joblib
1个回答
0
投票

你可以在那里找到答案: what-does-the-delayed-function-do-when-used-with-joblib-in-python 接受的答案得到了很好的解释。

根据我的理解,你的第二个例子是pool(testfunc() for _ in range(niter))在函数传递给多进程之前返回结果。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.