Я пытаюсь использовать некоторые параллельные вычисления в моей реализации алгоритмов машинного обучения, используя joblib
, особенно технику, используемую на этой странице .Следующие примеры предназначены для понимания параллелизма. У меня та же проблема, что и во втором примере в моих алгоритмах 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, я использую joblib 0.13.2 и python 3.6.8 из дистрибутива Anaconda.