Python Parallel Computing - Scoop - PullRequest
       44

Python Parallel Computing - Scoop

0 голосов
/ 08 февраля 2019

Я пытаюсь ознакомиться с библиотекой Scoop (документация здесь: https://media.readthedocs.org/pdf/scoop/0.7/scoop.pdf), чтобы узнать, как выполнять статистические вычисления параллельно, используя, в частности, функцию futures.map.

Как таковаяВо-первых, я хотел бы попытаться запустить простую линейную регрессию и оценить разницу в производительности между последовательными и параллельными вычислениями, используя 10000000 точек данных (4 функции, 1 целевая переменная), случайно сгенерированных из нормального распределения.

Это мой код:

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 (код, 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: ​​\ Users \ niccolo.gentile \ AppData \Локальный \ 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: \Пользователи \ 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_pathpkg_name = pkg_name, script_name = fname) Файл "C: \ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tenorenviron \ lib \ runpy.py", строка 96, в _run_module_code имя_модуля, mod_spec, pkg_name, имя_скрипта) Файл "C: \ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tenorenviron \ 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 (future): Файл "C: \ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tenorenviron \ lib \ site-packages \ scoop \ futures.py", строка 335, в _waitAny поднять childFuture.exceptionValueNameError: имя 'y_vals' не определено

создается впоследствии.Это означает, что код останавливается на model_vals_1 = list(futures.map(linreg, [1,2,3])).

Я также пытался запустить его с картой оба раза, и действительно ошибка не появляется.

Я также указываю, что скрипт был корректнозапускается с:

python -m scoop Scoop_map_linear_regression1.py

из командной строки Anaconda Prompt.

Действительно, если он будет запущен без параметра -m scoop, он не будет распараллелен и будет фактически выполняться, а просто использует в два раза встроенную в Python функцию map, как вы будете получать отчеты в Предупреждениях.То есть, без указания параметра -m scoop при его запуске, futures.map будет заменен на map.

Моя цель - вместо этого запустить его параллельно, используя точно futures.map, и оценить улучшение производительности.,

Указание этого во избежание любого другого аналогичного ответа и последующего приостановления.

Любой комментарий высоко ценится и приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...