我想使用Celery在带有四张Tesla卡的GPU服务器上运行作业.我用一个由四名工人组成的工作人员来管理芹菜工人,这样每张卡片总能运行一份工作.
我的问题是如何指导工人每个声称一个GPU.目前,我依赖于工作进程应该都具有连续进程ID的假设:
device_id = os.getpid() % self.ndevices
Run Code Online (Sandbox Code Playgroud)
但是,我不能保证始终可以工作,即当工作进程随着时间的推移重新启动时.理想情况下,我想直接获得每个工人的ID.有人可以告诉我是否可以从任务中检查工作人员,或者可以建议不同的解决方案来跨GPU分配工作?
Nic*_*tot 11
如果您正在使用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
Run Code Online (Sandbox Code Playgroud)
它index是基于0的,如果一个工人正好重新启动它将保持其索引.
我找不到任何关于index价值的文件:/