Python 并行计算 - Scoop

2024-01-10

我正在尝试熟悉 Scoop 库(此处的文档:https://media.readthedocs.org/pdf/scoop/0.7/scoop.pdf 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 的标准映射函数串行生成的,出现错误:

回溯(最近一次调用最后一次): 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\runpy.py”,第 193 行,在 _run_module_as_main 中 ”main“,mod_spec) 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\runpy.py”,第 85 行,在 _run_code 中 执行(代码,run_globals) 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\site-packages\scoop\bootstrap__main__.py”,第 302 行,位于 b.main() 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\site-packages\scoop\bootstrap__main__.py”,第 92 行,在 main 中 自我运行() 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\site-packages\scoop\bootstrap__main__.py”,第 290 行,运行中 futures_startup() 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\site-packages\scoop\bootstrap__main__.py”,第 271 行,在 futures_startup 中 运行名称=“main” 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\site-packages\scoop\futures.py”,第 64 行,在 _startup 中 结果 = _controller.switch(rootFuture, *args, **kargs) 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\site-packages\scoop_control.py”,第 253 行,在 runController 中 引发 future.ExceptionValue 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\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\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 中 执行(代码,run_globals) 文件“Scoop_map_线性_regression1.py”,第 33 行,位于 model_vals_1 = list(futures.map(linreg, [1,2,3])) 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\site-packages\scoop\futures.py”,第 102 行,在 _mapGenerator 中 对于 _waitAll(*futures) 中的未来: 文件“C:\Users\niccolo.gentile\AppData\Local\Continuum\anaconda3\envs\tensorenviron\lib\site-packages\scoop\futures.py”,第 358 行,在 _waitAll 中 对于 _waitAny(future) 中的 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])).

我也尝试使用地图运行它两次,并且确实没有出现错误。

我还指定该脚本已正确启动:

python -m scoop Scoop_map_linear_regression1.py

从 Anaconda Prompt 命令行。

事实上,如果在没有 -m scoop 参数的情况下启动它,它不会并行化并且实际上会运行,而只是使用 Python 内置映射函数的两倍,就像在警告中报告的那样。也就是说,如果启动时不指定 -m scoop 参数,futures.map 将被 map 替换。

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

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

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


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 并行计算 - Scoop 的相关文章

  • 从父类返回子类

    我有一个构建器类 它从大多数方法返回自身以允许菊花链 为了使此功能适用于子类 我希望父方法返回子类的实例 以便子方法可以链接到末尾 public class BaseBuilder
  • Firestore 未检索完整的数据值

    图 1 显示了我的数据库的层次结构 我正在尝试检索课程名称 Android 品牌 斜体数据 品牌 其他 由后端 post 命令添加 其他数据通过打字添加 当只检索非斜体数据时 如屏幕截图 2 所示 我无法弄清楚为什么会发生这种情况 屏幕截图
  • 在实体框架中对连接字符串进行硬编码

    我知道很多人认为对连接信息进行硬编码是一个坏主意 但我有一个特定的情况需要这样做 请不要贬低我 因为你认为这是一个坏主意 再次 非常具体的情况 使用下面的代码 我在 LINQ 语句上收到以下错误 底层提供程序在打开时失败 我已经独立测试了连
  • 如何从 typescript 使用 npm 模块?

    我正在尝试打字稿 它在 hello world 阶段运行良好 我现在尝试使用 npm 模块 index ts import require lodash console log toUpper Hello world 这不起作用 tsc i
  • 在 C# 中将字符串转换为等效的字节十六进制

    我有一个传入的字符串68016101061B4A60193390662046804020422044204000420040402060226024676DB16我想转换成0x68 0x01 0x61 0x01 0x06 0x1B 0x4A
  • Xamarin.Forms:如何访问 ListView.GroupHeaderTemplate 中 ListView.ItemTemplate 中使用的集合?

    我需要访问 ListView GroupHeaderTemplate 中 Switch 中的 OnOff 属性 该属性位于 ListView ItemTemplate 使用的集合中 我尝试了很多方法但没有成功 有人遇到过这个问题吗 gt
  • 在 Qt 服务器上验证用户身份

    我正在尝试使用 C QtTcpSocket 为个人项目 多人国际象棋游戏 实现身份验证系统 我的朋友建议了一种验证用户的方法 但我想问是否有更简单或更好的方法 来自 Python 背景 做这个项目主要是为了加深对 C 的理解 我将发布我朋友
  • “多对二”关系

    我想知道 多对二 关系 孩子可以与两个父母中的任何一个有联系 但不能与两个父母都有联系 有什么办法可以加强这一点吗 另外我想防止孩子重复输入 现实世界的例子是电话号码 用户和公司 一个公司可以有很多电话号码 一个用户可以有很多电话号码 但理
  • List 中的 TextView 被截断

    我有一个自定义 ListView 其中有一个图像视图和两个位于图像视图旁边的 TextView 底部的文本视图包含标题的描述 但它被列表切断了 http tinypic com r 28tawrc 7 http tinypic com r
  • 如何将 JavaScript 库包含到 Spring MVC 项目中(例如 jQuery 或 Dojo)

    我在这里阅读了超过 5 个相关主题 但无法找到答案 分步说明 到目前为止 我已经有了 STS Spring MVC 模板结构并尝试将jquery js在我的项目中的某个地方 不幸的是 没有人说它应该在哪里 那么 请说 将 jquery js
  • 应用程序操作通过应用程序操作工具插件工作,但不能在 Google Assistant 屏幕中使用语音命令

    使用相同的凭据 Android Studio Google Console 真实设备 Samsung s10 登录 并将设备语言设置为 EN US 从工具菜单中选择应用程序操作工具插件 将调用名称 todo 应用程序 和区域设置提供给 En
  • 反应式表单中使用的自定义组件 MdDatePicker

    我正在尝试创建一个要在角度 formGroup 中使用的自定义组件 以下是我想要使用此自定义组件的方式
  • String.将 CRLF 替换为 '\n'

    我想知道是否有一种方法可以用 n 替换所有 CRLF 实例 有办法实现吗 你尝试过哪些方法不起作用 回车换行的意思回车 http en wikipedia org wiki Carriage return 换行 http en wikipe
  • 如何验证无锁算法?

    从理论上讲 至少应该可以对无锁算法进行暴力验证 只有这么多的函数调用组合 是否有任何工具或正式推理过程可以实际证明无锁算法是正确的 理想情况下它还应该能够检查竞争条件和 ABA 问题 注意 如果你知道一种方法来证明一点 例如 只证明它不受
  • SQL 注入:replace("'", "''") 还不够好吗?

    虽然我当然可以看到使用参数进行 SQL 查询的优点 特别是在处理日期时间和类似的事情时 但我仍然不确定参数作为only防止SQL注入的方法 事实是 我继承了一个应用程序 它有类似的东西 SELECT Field FROM Table WHE
  • JBoss Weld + java.lang.OutOfMemoryError:永久代空间

    我刚刚切换到 Weld 以利用 CDI JSF 2 Beans 对话范围 这是我的 Maven 依赖项
  • 向前声明类模板显式/部分专业化有什么意义?

    C 98 标准规定 temp class spec 部分专业化声明本身不能通过名称查找找到 如果显式专业化也是如此 则这会使类模板显式 部分专业化的前向声明不可见 temp class spec match 当在需要实例化该类的上下文中使用
  • flutter SDK是否提供了为Windows Phone开发应用程序的框架?

    我想知道google是否计划支持除iOS和Android以外的任何其他平台使用Flutter进行跨平台开发 像React Native Windows for React Native一样 Flutter是否有支持Windows Phone
  • Android 中的错误消息“HTTP 413 请求实体太大”

    当我使用 POST 方法使用 Multipart Part 发送图像文件时 它抛出此错误 retrofit2 adapter rxjava HttpException HTTP 413 请求实体太大 通过该错误 很明显您在请求中发送的文件大
  • 如何在 JPA 2 / Hibernate 中进行可移植和本机 ID 生成?

    我希望在当前运行 Hibernate 和 MySQL 的 JPA 2 实体上生成本机和可移植的 ID 当使用 GenerateValue strategy AUTO 时 hibernate 默认为 MySQL 上的 hibernate se

随机推荐