在芹菜中获取工人ID



我想使用芹菜在带有四个Tesla卡的GPU服务器上运行作业。我运行带有四个worker池的Celery worker,这样每个卡总是运行一个作业。

我的问题是如何指示工人每个要求一个GPU。目前,我依赖于工作进程都应该具有连续进程id的假设:

device_id = os.getpid() % self.ndevices

然而,这并不能保证总是工作,即当工作进程随着时间的推移重新启动时。所以理想情况下,我想直接获得每个工人的ID。有人能告诉我是否有可能从任务内检查工人,或者可以建议一个不同的解决方案来分配跨gpu的工作?

如果您使用的是CELERYD_POOL = 'processes',则工作池由billiard处理,这确实会暴露其基于0的进程索引:

from billiard import current_process
from celery import task
@task
def print_info():
    # This will print an int in [0..concurrency[
    print current_process().index

index是基于0的,如果一个worker碰巧被重新启动,它将保持它的索引。

我找不到任何关于index值的文档:/

相关内容

  • 没有找到相关文章

最新更新