Python并行计算-Scoop

时间:2019-02-08 13:39:04

标签: python machine-learning parallel-processing linear-regression python-scoop

我正在尝试熟悉Scoop库(在此处的文档:https://media.readthedocs.org/pdf/scoop/0.7/scoop.pdf),以学习如何并行使用统计信息,尤其是使用futures.map函数。

这样,首先,我想尝试运行一个简单的线性回归,并使用从法线中随机生成的10000000个数据点(4个特征,一个目标变量)来评估串行和并行计算之间的性能差异。分布。

这是我的代码:

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的标准map函数以串行方式生成的:错误:

  

回溯(最近通话最近):     _run_module_as_main中的第193行的文件“ C:\ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tensorenviron \ lib \ runpy.py”       “ 主要”,mod_spec)     文件“ C:\ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tensorenviron \ lib \ runpy.py”,第85行,在_run_code中       exec(代码,run_globals)     第302行的文件“ C:\ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tensorenviron \ lib \ site-packages \ scoop \ bootstrap__main __。py”       b.main()     主目录中的文件“ C:\ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tensorenviron \ lib \ site-packages \ scoop \ bootstrap__main __。py”       self.run()     正在运行的文件“ C:\ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tensorenviron \ lib \ site-packages \ scoop \ bootstrap__main __。py”,正在运行       futures_startup()     在futures_startup中,文件“ C:\ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tensorenviron \ lib \ site-packages \ scoop \ bootstrap__main __。py”       run_name =“ 主要”     _startup中的文件“ C:\ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tensorenviron \ lib \ site-packages \ scoop \ futures.py”,第64行       结果= _controller.switch(rootFuture,* args,** kargs)     在runController中的文件“ C:\ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tensorenviron \ lib \ site-packages \ scoop_control.py”,第253行       提高future.exceptionValue     在runFuture的第127行中,文件“ C:\ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tensorenviron \ lib \ site-packages \ scoop_control.py”       future.resultValue = future.callable(* future.args,** future.kargs)     文件“ C:\ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tensorenviron \ lib \ runpy.py”,行263,在run_path中       pkg_name = pkg_name,script_name = fname)     文件“ C:\ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tensorenviron \ lib \ runpy.py”,第96行,在_run_module_code中       mod_name,mod_spec,pkg_name,script_name)     文件“ C:\ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tensorenviron \ lib \ runpy.py”,第85行,在_run_code中       exec(代码,run_globals)     文件“ Scoop_map_linear_regression1.py”,第33行,在       model_vals_1 =列表(futures.map(linreg,[1,2,3]))     _mapGenerator中的第102行的文件“ C:\ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tensorenviron \ lib \ site-packages \ scoop \ futures.py”       将来在_waitAll(* futures)中:     _waitAll中的第358行的文件“ C:\ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tensorenviron \ lib \ site-packages \ scoop \ futures.py”       对于_waitAny中的f(未来):     文件“ C:\ Users \ niccolo.gentile \ AppData \ Local \ Continuum \ anaconda3 \ envs \ tensorenviron \ lib \ site-packages \ scoop \ futures.py”,行335,在_waitAny中       提高childFuture.exceptionValue   NameError:名称“ y_vals”未定义

随后产生。这意味着代码在model_vals_1 = list(futures.map(linreg, [1,2,3]))处停止。

我还尝试了两次使用map来运行它,实际上并没有出现错误。

我还指定脚本已通过以下方式正确启动:

python -m scoop Scoop_map_linear_regression1.py
从Anaconda提示符命令行输入

的确,如果不带-m scoop参数启动它,它将不会并行化并实际上会运行,而只是使用Python内置的map函数的两倍,就像在Warnings中得到的一样。也就是说,在启动时不指定-m scoop参数,会将futures.map替换为map。

我的目标是使用确切的futures.map并行运行它,并评估性能改进。

指定它以避免任何其他类似的答案,因此被搁置。

任何评论都将受到高度赞赏和欢迎。

0 个答案:

没有答案