2
セロリの作業員にテンソルフローを使用しようとしています。私は労働者からの応答を受け取るのではなく、タイムアウトに遭遇しました。セロリの労働者からTensorFlowの応答がありません
私は、次のコードを使用:私は、このコマンドを使用して、労働者を実行
tasks.py
from celery import Celery
from celery.signals import worker_init
import tensorflow as tf
app = Celery('tasks', backend='redis://localhost:6379/0', broker='redis://localhost:6379/0')
class TFModel():
def __init__(self):
self.sess = tf.Session()
def run(self):
return self.sess.run(tf.constant('hello'))
tf_model = None
@worker_init.connect
def on_worker_init(**_):
global tf_model
tf_model = TFModel()
print(tf_model.run())
return
@app.task(time_limit=10)
def run():
return tf_model.run()
test.py
import time
from tasks import run
r=run.delay()
while not r.ready():
time.sleep(2)
print(r.get())
を。
$ celery -A tasks worker -l info -c 1
私は労働者を実行するとon_worker_init()
がprint(tf_model.run())
を持っていたことから、hello
は、プリントアウトしました。 これは、テンソルの流れが適切に機能することを意味します。
はその後、私は走った:
$ python test.py
を次に、私が得た:
celery.backends.base.TimeLimitExceeded: TimeLimitExceeded(10,)
を間違っていましたか? 何が起こったのかを調査するにはどうすればよいですか?
私の環境は次のとおりです。
python 3.5.1
tensorflow 0.11.0
celery 4.0.2
感謝。
は、あなたの答えをありがとう!あなたはケラを使っていますか? sess.run()がセロリで動作しないのはなぜかと思います。 – Kumon
私はテンソルフローを直接使用していますので、ケラスを使わず、コンストラクタでネットワークの初期化を行います。 tf_model.process_singleでsession.runを問題なく使用する。 – Cospel
@ worker_process_init.connect()を使用していて、@worker_initを使用していないことに注意してください。また、モデルが正しくロードされているかどうかを確認できるように、印刷/ロギングを試してみてください。 – Cospel