带广播的 Dask 分散 = True 非常慢
Dask scatter with broadcast=True extremely slow
我在同一网络的不同机器上创建了一个(远程)调度程序和十个工作人员,并尝试从客户端分发数据帧。
我的问题是分散需要 30 分钟。
from dask.distributed import Client
df = pd.DataFrame({ i : range(10) for i in range(10)})
client = Client(scheduler_addr)
future = client.scatter(df, broadcast=True)
此代码有效,但速度太慢而无法使用 - 使用 broadcast=False 时,它的运行速度相当快。
我已经使用默认参数创建了 Scheduler 和 Worker。应该怎么做呢?
我的dask.distributed版本是2022.01.0
广播散布对于小对象应该非常快,但对于大对象会更慢。
避免通过网络发送大对象的一种方法是将它们存储在一个公共位置并指示工作人员直接加载这些对象:
df = pd.DataFrame({ i : range(10) for i in range(10)})
df.to_parquet('my_file.parquet')
def run_batch(n):
df = pd.read_parquet('my_file.parquet')
...
client = Client()
futures = client.map(run_something, range(10))
这个 use-case、once_per_worker
, see this blog post、
也有破解方法
我在同一网络的不同机器上创建了一个(远程)调度程序和十个工作人员,并尝试从客户端分发数据帧。 我的问题是分散需要 30 分钟。
from dask.distributed import Client
df = pd.DataFrame({ i : range(10) for i in range(10)})
client = Client(scheduler_addr)
future = client.scatter(df, broadcast=True)
此代码有效,但速度太慢而无法使用 - 使用 broadcast=False 时,它的运行速度相当快。 我已经使用默认参数创建了 Scheduler 和 Worker。应该怎么做呢?
我的dask.distributed版本是2022.01.0
广播散布对于小对象应该非常快,但对于大对象会更慢。
避免通过网络发送大对象的一种方法是将它们存储在一个公共位置并指示工作人员直接加载这些对象:
df = pd.DataFrame({ i : range(10) for i in range(10)})
df.to_parquet('my_file.parquet')
def run_batch(n):
df = pd.read_parquet('my_file.parquet')
...
client = Client()
futures = client.map(run_something, range(10))
这个 use-case、once_per_worker
, see this blog post、