GVKun编程网logo

使用 Dask 进行内存 Numpy 计算的工作线程与线程

3

本文的目的是介绍使用Dask进行内存Numpy计算的工作线程与线程的详细情况,我们将通过专业的研究、有关数据的分析等多种方式,同时也不会遗漏关于AnacondaNumpy错误“Importingthe

本文的目的是介绍使用 Dask 进行内存 Numpy 计算的工作线程与线程的详细情况,我们将通过专业的研究、有关数据的分析等多种方式,同时也不会遗漏关于Anaconda Numpy 错误“Importing the Numpy C Extension Failed”是否有另一种解决方案、cvxpy 和 numpy 之间的版本冲突:“针对 API 版本 0xe 编译的模块,但此版本的 numpy 是 0xd”、Dask Distributed:对未出现在任务图可视化工具 (Bokeh) 中的 Dask 对象的操作、Dask:read_sql_table 为 KeyError + Dask 连接提供复合索引可用性的知识。

本文目录一览:

使用 Dask 进行内存 Numpy 计算的工作线程与线程

使用 Dask 进行内存 Numpy 计算的工作线程与线程

如何解决使用 Dask 进行内存 Numpy 计算的工作线程与线程

以下脚本用于基准测试:

  1. from dask.distributed import Client
  2. import dask.array as da
  3. import numpy as np
  4. import numba as nb
  5. import time
  6. import sys
  7. N = 20000
  8. M = 20000
  9. def f_np():
  10. return np.random.random((N,M)).mean()
  11. @nb.jit
  12. def f_nb():
  13. return np.random.random((N,M)).mean()
  14. def f_da():
  15. return da.random.random((N,M),chunks=(5000,5000)).mean().compute()
  16. def loop(l,n,f):
  17. ts = []
  18. for i in range(n):
  19. t0 = time.time()
  20. f()
  21. t1 = time.time()
  22. ts.append(t1-t0)
  23. print(f"{l}: {round(sum(ts)/n,3)}: {'',''.join(str(round(t,3)) for t in ts)}")
  24. if __name__ == "__main__":
  25. t,w,m = tuple(int(a) for a in sys.argv[1:])
  26. client = Client(
  27. processes=True,threads_per_worker=t,n_workers=w,memory_limit=f''{m}GB''
  28. )
  29. loop("np",3,f_np)
  30. loop("nb",f_nb)
  31. loop("da",f_da)

性能对比:

  1. # python test_np.py [Threads per Worker] [Workers] [Memory Limit]
  2. # what: AVG: run1,run2,run3
  3. $ python test_np.py 1 1 12
  4. np: 4.546: 4.521,4.474,4.644
  5. nb: 4.125: 4.296,3.948,4.132
  6. da: 4.698: 4.911,4.611,4.573
  7. $ python test_np.py 4 1 12
  8. np: 4.426: 4.408,4.448,4.422
  9. nb: 3.938: 4.205,3.808,3.802
  10. da: 2.064: 2.032,2.104,2.055
  11. $ python test_np.py 1 4 3
  12. np: 4.496: 4.498,4.533,4.456
  13. nb: 3.996: 4.274,3.825,3.89
  14. da: 2.076: 2.109,2.056,2.064
  15. $ python test_np.py 4 4 3
  16. np: 4.577: 4.612,4.565,4.556
  17. nb: 4.029: 4.368,3.851,3.869
  18. da: 2.077: 2.097,2.067,2.068

我试图了解这些情况在工作人员和线程数量方面的区别。情况 1 符合预期。

我的理解是,worker 的数量决定了并行计算的数量,线程数(每个 worker)决定了读/写操作的有效利用(在其他空闲时间期间)。

这就是为什么我是 f.x.想知道为什么案例 2 与案例 3 和案例 4 一样快。或者换句话说 - 为什么案例 3 和案例 4 没有案例 2 快,因为 IO 应该几乎可以忽略,因为一切都可以轻松地放入内存中。

关于观察 htop 案例 2 中的 cpu 活动与案例 3 和案例 4 无法区分。我希望案例 2 看起来与案例 1 相同 - 即只有一个活动核心。


计算是在 e2-standard-4(4 个 vcpu,16 GB 内存)GCE 实例上完成的。

  1. $ uname -a
  2. Linux dask 4.19.0-16-cloud-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64 GNU/Linux
  3. $ python -V
  4. Python 3.8.10
  5. $ pip list | grep -E "dask|distributed|numpy|numba"
  6. dask 2021.4.1
  7. distributed 2021.4.1
  8. numba 0.53.1
  9. numpy 1.20.2

Anaconda Numpy 错误“Importing the Numpy C Extension Failed”是否有另一种解决方案

Anaconda Numpy 错误“Importing the Numpy C Extension Failed”是否有另一种解决方案

如何解决Anaconda Numpy 错误“Importing the Numpy C Extension Failed”是否有另一种解决方案?

希望有人能在这里提供帮助。我一直在绕圈子一段时间。我只是想设置一个 python 脚本,它将一些 json 数据从 REST API 加载到云数据库中。我在 Anaconda 上设置了一个虚拟环境(因为 GCP 库推荐这样做),安装了依赖项,现在我只是尝试导入库并向端点发送请求。 我使用 Conda(和 conda-forge)来设置环境并安装依赖项,所以希望一切都干净。我正在使用带有 Python 扩展的 VS 编辑器作为编辑器。 每当我尝试运行脚本时,我都会收到以下消息。我已经尝试了其他人在 Google/StackOverflow 上找到的所有解决方案,但没有一个有效。我通常使用 IDLE 或 Jupyter 进行脚本编写,没有任何问题,但我对 Anaconda、VS 或环境变量(似乎是相关的)没有太多经验。 在此先感谢您的帮助!

  \Traceback (most recent call last):
File "C:\Conda\envs\gcp\lib\site-packages\numpy\core\__init__.py",line 22,in <module>
from . import multiarray
File "C:\Conda\envs\gcp\lib\site-packages\numpy\core\multiarray.py",line 12,in <module>
from . import overrides
File "C:\Conda\envs\gcp\lib\site-packages\numpy\core\overrides.py",line 7,in <module>
from numpy.core._multiarray_umath import (
ImportError: DLL load Failed while importing _multiarray_umath: The specified module Could not be found.

During handling of the above exception,another exception occurred:

Traceback (most recent call last):
File "c:\API\citi-bike.py",line 4,in <module>
import numpy as np
File "C:\Conda\envs\gcp\lib\site-packages\numpy\__init__.py",line 150,in <module>
from . import core
File "C:\Conda\envs\gcp\lib\site-packages\numpy\core\__init__.py",line 48,in <module>
raise ImportError(msg)
ImportError:

IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!

Importing the numpy C-extensions Failed. This error can happen for
many reasons,often due to issues with your setup or how NumPy was
installed.

We have compiled some common reasons and troubleshooting tips at:

https://numpy.org/devdocs/user/troubleshooting-importerror.html

Please note and check the following:

* The Python version is: python3.9 from "C:\Conda\envs\gcp\python.exe"
* The NumPy version is: "1.21.1"

and make sure that they are the versions you expect.
Please carefully study the documentation linked above for further help.

Original error was: DLL load Failed while importing _multiarray_umath: The specified module Could not be found.

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

cvxpy 和 numpy 之间的版本冲突:“针对 API 版本 0xe 编译的模块,但此版本的 numpy 是 0xd”

cvxpy 和 numpy 之间的版本冲突:“针对 API 版本 0xe 编译的模块,但此版本的 numpy 是 0xd”

如何解决cvxpy 和 numpy 之间的版本冲突:“针对 API 版本 0xe 编译的模块,但此版本的 numpy 是 0xd”?

我正在尝试升级一些软件包并为现有的 Python 程序整合我的 requirements.txt,以便将其移至 docker 容器。

这个容器将基于 tensorflow docker 容器,这决定了我必须使用的一些包版本。我们在 windows 下工作,我们希望能够在我们的机器上本地运行该程序(至少在一段时间内)。所以我需要找到一个适用于 docker 和 Windows 10 的配置。

Tensorflow 2.4.1 需要 numpy~=1.19.2。使用 numpy 1.20 时,pip 会抱怨 numpy 1.20 是一个不兼容的版本。

但是在使用 numpy~=1.19.2 时,导入 cvxpy 时出现以下错误。 pip 安装所有软件包都很好:

RuntimeError: module compiled against API version 0xe but this version of numpy is 0xd
Traceback (most recent call last):
  File "test.py",line 1,in <module>
    import cvxpy
  File "c:\Projekte\algo5\venv\lib\site-packages\cvxpy\__init__.py",line 18,in <module>
    from cvxpy.atoms import *
  File "c:\Projekte\algo5\venv\lib\site-packages\cvxpy\atoms\__init__.py",line 20,in <module>
    from cvxpy.atoms.geo_mean import geo_mean
  File "c:\Projekte\algo5\venv\lib\site-packages\cvxpy\atoms\geo_mean.py",in <module>
    from cvxpy.utilities.power_tools import (fracify,decompose,approx_error,lower_bound,File "c:\Projekte\algo5\venv\lib\site-packages\cvxpy\utilities\power_tools.py",in <module>
    from cvxpy.atoms.affine.reshape import reshape
  File "c:\Projekte\algo5\venv\lib\site-packages\cvxpy\atoms\affine\reshape.py",in <module>
    from cvxpy.atoms.affine.hstack import hstack
  File "c:\Projekte\algo5\venv\lib\site-packages\cvxpy\atoms\affine\hstack.py",in <module>
    from cvxpy.atoms.affine.affine_atom import AffAtom
  File "c:\Projekte\algo5\venv\lib\site-packages\cvxpy\atoms\affine\affine_atom.py",line 22,in <module>
    from cvxpy.cvxcore.python import canonInterface
  File "c:\Projekte\algo5\venv\lib\site-packages\cvxpy\cvxcore\python\__init__.py",line 3,in <module>
    import _cvxcore
ImportError: numpy.core.multiarray Failed to import

重现步骤:

1.) 在 Windows 10 下创建一个新的 Python 3.8 venv 并激活它

2.) 通过 requirements.txt 安装以下 pip install -r requirements.txt

cvxpy 
numpy~=1.19.2 # tensorflow 2.4.1 requires this version

3.) 通过 test.py

执行以下 python test.py
import cvxpy

if __name__ == ''__main__'':
    pass

如果我想使用 tensorflow 2.3,也会发生同样的事情。在这种情况下需要 numpy~=1.18,错误完全相同。

搜索错误发现很少的命中,可悲的是没有帮助我。

我该怎么做才能解决这个问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

Dask Distributed:对未出现在任务图可视化工具 (Bokeh) 中的 Dask 对象的操作

Dask Distributed:对未出现在任务图可视化工具 (Bokeh) 中的 Dask 对象的操作

如何解决Dask Distributed:对未出现在任务图可视化工具 (Bokeh) 中的 Dask 对象的操作

本质上,我有一个标准 client=Client()。我有这样提交的文本解析操作:

futures = client.map(file_tokens_to_frequency_count,filenames)

我可以看到这些操作出现在网络可视化工具的任务图上。

但是,其他操作,即

  1. # create dask array as example
  2. x = da.random.random((10000,10000),chunks=(1000,1000))
  3. y = x + x.T
  4. z = y[::2,5000:].mean(axis=1)
  5. z.compute()

不会出现在任务图的 Web 可视化中。我可以看到为这些操作固定了一个线程,但没有证据表明它们在我的客户端上运行。我想确保与我的文本解析的交互不会受到责备。

一种理论是,任务没有像我期望的那样作为默认调度程序发送到我的客户端,但我明确地将客户端设置为默认调度程序 (set_as_default=True),请参阅 https://distributed.dask.org/en/latest/client.html ).

Dask:read_sql_table 为 KeyError + Dask 连接提供复合索引可用性

Dask:read_sql_table 为 KeyError + Dask 连接提供复合索引可用性

如何解决Dask:read_sql_table 为 KeyError + Dask 连接提供复合索引可用性

我正在尝试阅读一个简单的表格,但最终出现关键错误,不知道这里有什么交易

请看我的代码

  1. import numpy as np
  2. import pandas as pd
  3. import sqlalchemy as sa
  4. import dask.dataframe as ddf
  5. start_time = datetime.Now()
  6. sqluri = f''oracle+cx_oracle://test:test@PROD1:1522/?service_name=prddb''
  7. engine = sa.create_engine(sqluri)
  8. daskDF = ddf.read_sql_table(table=''test1'',uri=sqluri,index_col=''ID'',schema=''testusr'')

另外,我们是否可以通过以下方式使用 sql 连接

  1. sa_Meta = sa.MetaData()
  2. sa_table = sa.Table("test1",sa_Meta,autoload=True,autoload_with=engine)
  3. sa_query= sa.select("select /*+ ParaLLEL(8) */ a.*,a.id||a.period as d_idx from test1 a join test2 b on test1.id=test2.id where a.acct=''Client''")
  4. ddf = dd.read_sql_table(sa_query,sqluri,index_col="d_idx ")

关于使用 Dask 进行内存 Numpy 计算的工作线程与线程的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Anaconda Numpy 错误“Importing the Numpy C Extension Failed”是否有另一种解决方案、cvxpy 和 numpy 之间的版本冲突:“针对 API 版本 0xe 编译的模块,但此版本的 numpy 是 0xd”、Dask Distributed:对未出现在任务图可视化工具 (Bokeh) 中的 Dask 对象的操作、Dask:read_sql_table 为 KeyError + Dask 连接提供复合索引可用性等相关知识的信息别忘了在本站进行查找喔。

本文标签: