Я пытаюсь запустить параллельную линейную регрессию для 10000000 точек данных (4 функции, 1 целевая переменная), случайно сгенерированных из нормального распределения с использованием библиотеки Scoop Python.Вот код:
import pandas as pd
import numpy as np
import random
from scoop import futures
import statsmodels.api as sm
from time import time
def linreg(vals):
global model
model = sm.OLS(y_vals,X_vals).fit()
return model
print(model.summary())
if __name__ == '__main__':
random.seed(42)
vals = pd.DataFrame(np.random.normal(loc = 3, scale = 100, size =(10000000,5)))
vals.columns = ['dep', 'ind1', 'ind2', 'ind3', 'ind4']
y_vals = vals['dep']
X_vals = vals[['ind1', 'ind2', 'ind3', 'ind4']]
bt = time()
model_vals = list(map(linreg, [1,2,3]))
mval = model_vals[0]
print(mval.summary())
serial_time = time() - bt
bt1 = time()
model_vals_1 = list(futures.map(linreg, [1,2,3]))
mval_1 = model_vals_1[0]
print(mval_1.summary())
parallel_time = time() - bt1
print(serial_time, parallel_time)`
Однако после этого сводная регрессия действительно создается в последовательном порядке - с помощью стандартной функции отображения Python - ошибка:
Traceback (самая последняявызовите последний): файл "C: \ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tenorenviron \ lib \ runpy.py", строка 193, в _run_module_as_main "main", mod_spec), файл "C: \Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tenorenviron \ lib \ runpy.py ", строка 85, в файле _run_code exec (code, run_globals)" C: \ Users \ niccolo.gentile \ AppData \ Local\ Continuum \ anaconda3 \ envs \ tenorenviron \ lib \ site-packages \ scoop \ bootstrap__main __. Py ", строка 302, в файле b.main ()" C: \ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ "envs \ tenorenviron \ lib \ site-packages \ scoop \ bootstrap__main __. py ", строка 92, в основном файле self.run () Файл" C: \ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tenorenviron \ "lib \ site-packages \ scoop \ bootstrap__main __. py ", строка 290, в файле futures_startup () запускается" C: \ U "sers \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tenorenviron \ lib \ site-packages \ scoop \ bootstrap__main __. py ", строка 271, в файле futures_startup run_name =" main ", файл C: \ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tenorenviron \ lib \ site-packages \ scoop \ futures.py ", строка 64, в _startup result = _controller.switch (rootFuture, * args, ** kargs) Файл" C: \ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tenorenviron \ lib \ site-packages \ scoop_control.py ", строка 253, в runController поднять файл future.exceptionValue файла C: \ Users \ niccolo.gentile\ AppData \ Local \ Continuum \ anaconda3 \ envs \ tenorenviron \ lib \ site-packages \ scoop_control.py ", строка 127, в файле runFuture future.resultValue = future.callable (* файл future.args, ** future.kargs)"C: \ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tenorenviron \ lib \ runpy.py ", строка 263, в run_path pkg_name = pkg_name, script_name = fname) Файл" C: \ Users \ niccolo.нееврей \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tensorenviron \ Lib \ RUnpy.py ", строка 96, в _run_module_code имя_модуля, mod_spec, pkg_name, имя_скрипта) Файл" C: \ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ тензорная среда \ lib \ runpy.py ", строка 85, в файле _run_code exec (code, run_globals) "Scoop_map_linear_regression1.py", строка 33, в файле model_vals_1 = list (futures.map (linreg, [1,2,3]))) файл "C: \ Users \ niccolo.gentile \AppData \ Local \ Continuum \ anaconda3 \ envs \ tenorenviron \ lib \ site-packages \ scoop \ futures.py ", строка 102, в _mapGenerator для будущего в _waitAll (* futures): файл" C: \ Users \ niccolo.gentile \AppData \ Local \ Continuum \ anaconda3 \ envs \ tenorenviron \ lib \ site-packages \ scoop \ futures.py ", строка 358, в _waitAll для f в _waitAny (в будущем): файл" C: \ Users \ niccolo.gentile \ AppData\ Local \ Continuum \ anaconda3 \ envs \ tenorenviron \ lib \ site-packages \ scoop \ futures.py ", строка 335, в _waitAny повышение childFuture.exceptionValue NameError: имя 'y_vals' не определено
производится впоследствии.Это означает, что код останавливается на model_vals_1 = list(futures.map(linreg, [1,2,3]))
Пожалуйста, обратите внимание, что для того, чтобы иметь возможность запускать код параллельно, его нужно запустить из командной строки, указав параметр -m scoop, например, так::
python -m scoop Scoop_map_linear_regression1.py
Действительно, если он будет запущен без параметра -m scoop, он не будет распараллелен и действительно будет работать, а просто использует два раза встроенную в Python функцию map (следовательно, запускает двараз в сериале), как, как вы будете сообщены в предупреждениях.То есть, без указания параметра -m scoop при его запуске, futures.map будет заменен на map, тогда как цель - запустить его параллельно с использованием futures.map.
Это пояснение сделано для того, чтобы люди не отвечали, что они решили проблему, просто запустив код без параметра -m scoop, как уже произошло здесь:
Python Parallel Computing - Scoop
, где, как следствие этого, вопрос был ошибочно отложен как не по теме, потому что больше не воспроизводится.
Большое спасибо заранее, и любые комментарии высоко ценятся и приветствуются.