docker Dask分销:将Dask分布式工作进程限制为1个CPU

rsl1atfo  于 2023-03-17  发布在  Docker
关注(0)|答案(2)|浏览(131)

我的系统有4个CPU,16GB内存。我的目标是部署dask分布式工人,每个工人只使用1个CPU来运行分配给他们的代码。
我正在使用Docker部署一个调度器容器和工作容器,以运行使用Dask延迟和Dask Dataframe 的代码。
以下是两者的Docker运行命令:
排程器

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

worker(尝试了多个docker运行命令,以下命令的所有不同组合)

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”)运行时,工作者只使用1个CPU来运行代码,但是在100%的容量下,至少可以看到3个CPU。

我是不是错过了什么?
我如何限制一个分布式工作者只使用一个CPU来完成这项计算工作?

iszxjhcz

iszxjhcz1#

您指定scheduler=“processes”,这将完全忽略您的分布式集群,而是在运行代码client = dask.distributed.Client(...)的python会话中使用调度程序的TCP地址创建一个分布式客户端,计算将在您的工作线程上自动运行,每个线程一个。

ss2ws0br

ss2ws0br2#

通过指定--resources "process=1",将为每个工作进程分配此数量的资源。但是,要确保每个任务都使用此资源,必须指定任务使用的资源。例如,通过注解:

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

上面的代码片段将确保所有 Package 的计算每个任务使用1个process资源单元。

相关问题