Django + Celery + CPU/GPU + Tensorflow、Keras + Docker


GPU マシンを使用して tensorflow モデルを構築し、同じマシンでモデルを呼び出すと、期待どおりに正常に動作するという状況が発生しました.

セロリ タスクの助けを借りて Django フレームワークで実行されるアプリケーションでこのモデルを使用したかったのですが、セロリ ワーカー内のアプリケーション フローでモデルを呼び出しているときに、動作しないかハングアップしました.

考えられる解決策に従ってみましたが、何も機能しませんでした.
  • CPU マシンのコア数と RAM サイズを増やしました.
  • GPU を有効にして AWS インスタンスを作成し、モデルを使用しようとしました. Tensorflow は GPU を自動的に検出し、モデル予測に使用するため、GPU を使用するための構成は追加していません.
  • Django アプリケーションと celery が docker コンテナーで実行されているため、docker は自動的に GPU を使用できないと考えたため、基本イメージを tensorflow CPU/GPU に変更して基本 docker イメージとしてモデルを使用しようとしましたが、失敗しました :( .
  • モデルを使用する新しい API を作成しましたが、再度出力を取得できませんでした.
  • 最初から、アプリケーション フローなしでモデル呼び出しが正常に機能していることに気付きましたが、アプリケーション経由では機能しません.そのため、マルチプロセッシングを使用してPythonスクリプトを介してモデルを呼び出そうとしましたが、マルチプロセッシングでは(セロリがそれを行うため)機能しないことがわかりました.

  • ソリューション:

    マルチプロセッシング tensorflow モデルの予測が機能しないことがわかった後、内部で何が起こっているかを明確に示す次の投稿にたどり着きました.

    why tensorflow model predict not running under multiprocessing

    requirements.txt にフローを追加しました
    eventlet
    また、docker のビルド中に celery コマンドで --pool を以下のように追加しました.
    celery -A Proj worker -l info -Q Q1,Q2 --pool=eventlet -c 5
    この変更により、モデルを呼び出して、GPU 対応マシンなしでアプリケーション フローで予測を取得できるようになりました!!!

    To get the prediction alone from a tensorflow model we don't need a GPU machine.



    上で述べたこととは別に、多くの変更を行うことでかなりの日数を費やしました.誰かの一日が救われるように、これを共有しようと思った..

    Happy Coding!!!