gpt4 book ai didi

python - 本地使用 dask : to Client() or not to Client()?

转载 作者:太空宇宙 更新时间:2023-11-03 15:44:50 29 4
gpt4 key购买 nike

我想了解 Dask 在本地机器上的使用模式。

具体而言,

  • 我有一个适合内存的数据集
  • 我想做一些 pandas 操作
    • 分组依据...
    • 日期解析
    • 等等

Pandas 通过单核执行这些操作,这些操作对我来说要花费数小时。我的机器上有 8 个内核,因此,我想使用 Dask 尽可能地并行化这些操作。

我的问题如下:在 Dask 中执行此操作的两种方式有什么区别:

import pandas as pd
from sklearn.datasets import load_iris

iris = load_iris()

(1)

import dask.dataframe as dd

df = dd.from_pandas(
pd.DataFrame(iris.data, columns=iris.feature_names),
npartitions=2
)

df.mean().compute()

(2)

import dask.dataframe as dd
from distributed import Client

client = Client()

df = client.persist(
dd.from_pandas(
pd.DataFrame(iris.data, columns=iris.feature_names),
npartitions=2
)
)

df.mean().compute()

一种使用模式相对于另一种使用模式有何优势?为什么我应该使用一个而不是另一个?

最佳答案

版本 (2) 与版本 (1) 相比有两个不同之处:选择使用分布式调度程序,以及 persist。这些是不同的因素。有很多关于两者的文档:https://distributed.readthedocs.io/en/latest/quickstart.html , http://dask.pydata.org/en/latest/dataframe-performance.html#persist-intelligently ,所以这个答案可以保持简短。

1) 分布式调度器比以前的线程和多进程调度器更新、更智能。顾名思义,它既可以使用集群,也可以在单机上工作。虽然调用 .compute() 时的延迟通常较高,但在许多方面它更高效,具有更高级的功能(例如实时动态编程)和更多诊断功能(例如仪表板)。使用Client()创建时,默认获得与核心数相等的进程数,但您可以选择进程数和线程数,接近原始的只有线程的情况使用 Client(processes=False)

2) 持久化意味着评估计算并将其存储在内存中,以便进一步的计算更快。您也可以在没有分布式客户端 (dask.persist) 的情况下进行持久化。它有效地提供了以内存换取性能的交易,因为您不需要每次将它用于任何依赖于它的计算时都重新评估计算。如果您继续在中间体上仅执行一次计算,如示例中所示,它应该不会对性能产生影响。

关于python - 本地使用 dask : to Client() or not to Client()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50614761/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com