无法在 Celery 任务中将 Pytorch 与 CUDA 一起使用

Unable to use Pytorch with CUDA in Celery task

我有一个使用 torch 库的 celery 任务,它在内部使用 CUDA。当我 运行 任务时,它没有说 “无法在分叉子进程中重新初始化 CUDA。要将 CUDA 与多处理一起使用,您必须使用 'spawn' 启动方法”

当我稍微浏览一下时,我得到了这个 - https://github.com/celery/celery/issues/6036 这个issue说Celery只支持fork不支持spawn。

这个有什么workaround/alternative吗?

你应该加载 pytorch 模型并将其用作全局变量。模型和任务的实例将运行在同一个进程

from celery.signals import worker_process_init
# for more information about worker_process_init, read here:
# https://docs.celeryproject.org/en/stable/userguide/signals.html#worker-process-init

pytorch_model = None

@worker_process_init.connect()
def init_worker_process(**kwargs):
    """
    load model before running tasks
    :param kwargs:
    :return:
    """
    global pytorch_model
    pytorch_model = load_model()

@app.task
def predict_task(image: np.ndarray):
    return pytorch_model.predict(image)