gpt4 book ai didi

Python Redis 队列 (rq) - 如何避免为每个作业预加载 ML 模型?

转载 作者:IT王子 更新时间:2023-10-29 05:55:24 24 4
gpt4 key购买 nike

我想使用 rq 对我的 ml 预测进行排队。示例代码(伪类):

预测.py:

import tensorflow as tf

def predict_stuff(foo):
model = tf.load_model()
result = model.predict(foo)
return result

app.py:

from rq import Queue
from redis import Redis
from predict import predict_stuff

q = Queue(connection=Redis())
for foo in baz:
job = q.enqueue(predict_stuff, foo)

worker.py:

import sys
from rq import Connection, Worker

# Preload libraries
import tensorflow as tf

with Connection():
qs = sys.argv[1:] or ['default']

w = Worker(qs)
w.work()

我读过 rq 文档,解释说您可以预加载库以避免每次运行作业时都导入它们(因此在示例代码中,我在工作代码中导入了 tensorflow)。但是,我还想从 predict_stuff 移动模型加载,以避免每次工作人员运行作业时都加载模型。我该怎么做?

最佳答案

我不确定这是否有帮助,但是请按照此处的示例:

https://github.com/rq/rq/issues/720

您可以共享模型而不是共享连接池。

伪代码:

import tensorflow as tf

from rq import Worker as _Worker
from rq.local import LocalStack

_model_stack = LocalStack()

def get_model():
"""Get Model."""
m = _model_stack.top
try:
assert m
except AssertionError:
raise('Run outside of worker context')
return m

class Worker(_Worker):
"""Worker Class."""

def work(self, burst=False, logging_level='WARN'):
"""Work."""
_model_stack.push(tf.load_model())
return super().work(burst, logging_level)

def predict_stuff_job(foo):
model = get_model()
result = model.predict(foo)
return result

我将类似的东西用于我编写的“全局”文件阅读器。将实例加载到 LocalStack 并让工作人员从堆栈中读取。

关于Python Redis 队列 (rq) - 如何避免为每个作业预加载 ML 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52098967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com