我的系统有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来完成这项计算工作?
2条答案
按热度按时间iszxjhcz1#
您指定scheduler=“processes”,这将完全忽略您的分布式集群,而是在运行代码
client = dask.distributed.Client(...)
的python会话中使用调度程序的TCP地址创建一个分布式客户端,计算将在您的工作线程上自动运行,每个线程一个。ss2ws0br2#
通过指定
--resources "process=1"
,将为每个工作进程分配此数量的资源。但是,要确保每个任务都使用此资源,必须指定任务使用的资源。例如,通过注解:上面的代码片段将确保所有 Package 的计算每个任务使用1个
process
资源单元。