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



为了比较和对比科学实验中三种不同算法的性能,我计划使用 Celery 调度程序。这些算法由三种不同的工具实现。他们可能会也可能不会实现并行性,我不想对此做出任何事先假设。数据集包含 10K 个数据点。所有这三个工具都应该在所有数据点上运行;这转化为调度程序计划的 30K 任务。我想要的只是在所有执行中为所有工具分配相同数量的资源。

假设我的物理 Ubuntu 18.04 服务器配备了 24 个内核和 96 GB 的 RAM。任务由 4 名 Celery 工作人员安排,每人处理一项任务。我想为每个任务设置 4 个 CPU 内核和 16 GB 内存的上限。此外,没有两个任务应该竞争相同的内核,即 4 个任务总共应该使用 16 个内核,每个内核都调度在自己的一组内核上。

有没有办法通过芹菜、cgroup 或任何其他机制来完成此设置?我想避免使用docker,kubernetes或任何基于VM的方法,除非绝对需要。

通过将并发性指定为 6,处理 CPU 内核应该相当容易。但是限制内存使用是要求的一部分,我相信您可以通过使工作进程由您指定内存限制的特定 cgroup 拥有来实现这一点。

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

我宁愿不这样做,因为可能存在分配少量 RAM 的任务(或具有特定参数的任务(,因此如果您在此类任务运行时无法使用 4G RAM,那将是浪费。

可惜芹菜自动缩放已被弃用(恕我直言,这是芹菜最酷的功能之一(。实现根据内存利用率纵向扩展/缩减的 Celery 自动缩放程序应该不是一项艰巨的任务。

最新更新