Dask Distributed:将 Dask 分布式 worker 限制为 1 个 CPU

问题描述 投票:0回答:3

我的系统有 4 个 CPU,16 GB 内存。我的目标是部署 dask 分布式工作人员,每个工作人员仅使用 1 个 CPU 来运行分配给他们的代码。

我正在使用 docker 部署调度程序容器和工作容器来运行使用 Dask 延迟和 dask 数据帧的代码。

以下是两者的 Docker 运行命令:

调度程序

docker run --name dask-scheduler --network host daskdev/dask:2023.1.1-py3.10 dask-scheduler

工人 (尝试了多个 docker run 命令,以下命令的所有不同组合)

docker run --name dask-worker --network host dask-worker --nworkers 1 --nthreads 1 --resources "process=1" --memory-limit 2 GiB --name dask-worker daskdev/dask:2023.1.1-py3.10 10.76.8.50:8786

创建客户端并与调度程序建立连接。

client = Client("tcp://10.76.8.50:8786")

现在我想要的是,当运行 dask.compute(scheduler="processes") 时,worker 将仅使用 1 个 cpu 来运行代码。但是,在 100% 容量下至少可以看到 3 个 CPU。

我错过了什么吗?
我如何限制分布式工作人员仅使用 1 个 CPU 来完成此计算工作?

python docker dask dask-distributed dask-delayed
3个回答
1
投票

通过指定

 --resources "process=1"
,这个数量的资源被分配给每个工人。但是,为确保每个任务都使用此资源,有必要指定任务使用的资源。例如,通过注释:

with dask.annotate(resources=dict(process=1)):
    ...

上面的代码片段将确保所有包装计算都使用 1 个单位的

process
资源每个任务。


0
投票

您正在指定 scheduler="processes",这将完全忽略您的分布式集群。相反,在运行代码

client = dask.distributed.Client(...)
的python会话中使用调度程序的TCP地址创建一个分布式客户端,计算将在您的工作人员上运行,每个线程一个,自动。


-1
投票

找到解决方案。
在使用

compute(scheduler="processes")
时, 在计算中使用另一个参数:

num_workers

例子:

result = calculated_res.compute(scheduler="processes", num_workers= 2)

无论工人如何,这总共只使用 2 个 CPU。

© www.soinside.com 2019 - 2024. All rights reserved.