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

标签 docker resources celery virtual-machine scheduler

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

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

是否有任何方法通过Celery或cgroup或任何其他机制来完成此设置?我想避免使用docker,kubernetes或任何基于VM的方法,除非绝对必要。

最佳答案

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

另一种选择是在指定限制的容器中运行 celery worker 。

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

不推荐使用Pity Celery自动缩放功能(这是Celery IMHO最酷的功能之一)。实现Celery自动缩放器可以根据内存利用率进行向上/向下缩放,这不是一个艰巨的任务。

关于docker - 如何为在Celery群集上部署的所有任务分配相同数量的资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62048054/

相关文章:

docker - .NET Core Docker-如何在dotnet发布后找到入门应用

docker - k8s如何知道Pod内部进程的目标端口?

python - 在 Celery - Python 中的进程(工作人员)之间共享数据的最佳解决方案是什么?

python - 必须在heroku上手动启动worker吗?

error-handling - 如果超过任务时间限制, celery 可以给我发电子邮件吗?

docker - 请等待....对于第一个基于 docker 的 Jenkins 引导

docker - Mongoose 查询/模式错误仅在 docker 容器中

java - 如何从子包访问主要资源/布局/文件?

java - 如何正确实现终结器以检测 Java 中的资源泄漏

java - Android 带有数字的字符串资源