如何为部署在Celery集群上的所有任务分配相同数量的资源?

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

为了在科学实验中比较三种不同算法的性能,我打算使用Celery调度器。这些算法是由三个不同的工具实现的。它们可能有也可能没有实现并行性,我不想事先做任何假设。数据集包含10K个数据点。所有的三个工具都应该在所有的数据点上运行;这相当于由调度器调度了30K个任务。我所希望的是,在所有的执行过程中,为所有的工具分配相同数量的资源。

假设,我的物理Ubuntu 18.04服务器配备了24个内核和96 GB的内存。任务由4个Celery worker调度,每个人处理一个任务。我想把每个任务的CPU核数上限定为4个,内存为16GB。而且,不能让两个任务争夺同一个核心,也就是说,4个任务总共要使用16个核心,每个任务都安排在自己的一组核心上。

有没有什么方法可以实现这样的设置,可以通过Celery,或者cgroup,或者通过其他机制?我想避免使用docker,kubernetes,或者任何基于虚拟机的方法,除非绝对需要。

docker resources celery virtual-machine scheduler
1个回答
0
投票

通过将并发量指定为6,处理CPU核应该是相当容易的。但是限制内存使用是很难的部分,我相信你可以通过让worker进程由你指定内存限制的特定cgroup拥有来实现。

另一种方法是在有指定限制的容器中运行Celery Worker。

我不喜欢这样做,因为可能有一些任务(或有特定参数的任务)需要分配极少的内存,所以如果你不能在这样的任务运行时使用4G的内存,那就太浪费了。

遗憾的是Celery的自动缩放功能被废弃了(这是Celery最酷的功能之一,我认为)。要实现Celery自动缩放器,根据内存利用率来进行升级,应该不是一件难事。

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