无法在Celery任务中将Pytorch与CUDA配合使用

tcomlyy6  于 2023-03-18  发布在  其他
关注(0)|答案(2)|浏览(344)

我有一个使用torch库的celery 任务,torch库内部使用CUDA。当我运行任务时,它失败,并显示“无法在分叉子进程中重新初始化CUDA。要在多处理中使用CUDA,必须使用'spawn'启动方法”
当我稍微浏览一下这个的时候,我得到了这个-https://github.com/celery/celery/issues/6036这个问题说celery 只支持fork而不支持spawn。
是否有任何变通方案/替代方案?

gdx19jrr

gdx19jrr1#

你应该加载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)
bq3bfh9z

bq3bfh9z2#

你可以开始celery 工人与“独奏”池类型
celery -A tasks worker --pool=solo --loglevel=info
Solo只创建一个线程并使用该线程运行celepie任务。此处不能提供并发数。

相关问题