2

RESTサービスまたはクラウドに対して外部呼び出しを行う必要がないように、Tensorflowの画像処理モデルをインラインで提供しようとしています速度目的のために-ML/ML-エンジンモデル。Python Beamは大きなTensorflowモデルをピクル/ディル化できません

すべての推論でモデルをロードしようとするのではなく、beam.DoFnオブジェクトのインスタンスごとにモデルをメモリにロードできるかどうかをテストしたかったので、ロードとサービモデルの時間。

from __future__ import absolute_import 
    from __future__ import division 
    from __future__ import print_function 

    import tensorflow as tf 
    import numpy as np 


    class InferenceFn(object): 

     def __init__(self, model_full_path,): 
     super(InferenceFn, self).__init__() 
     self.model_full_path = model_full_path 
     self.graph = None 
     self.create_graph() 


     def create_graph(self): 
     if not tf.gfile.FastGFile(self.model_full_path): 
      self.download_model_file() 
     with tf.Graph().as_default() as graph: 
      with tf.gfile.FastGFile(self.model_full_path, 'rb') as f: 
      graph_def = tf.GraphDef() 
      graph_def.ParseFromString(f.read()) 
      _ = tf.import_graph_def(graph_def, name='') 
     self.graph = graph 

そのないbeam.DoFnと普通のクラスが、そのはDoFnにオーバー変換され、私はクラウドのデータフローを使用してリモートそれを実行しようとすると、ジョブが失敗したので、これはローカルだけで結構ことで実行されますシリアル化/酸洗いの間に、私はモデル全体をシリアライズしようとしていると信じたい。

Example of Error

これを回避したり、python/dataflowがモデルをシリアル化しようとするのを防ぐ手段はありますか?

答えて

1

はい - DoFnにフィールドとしてモデルを格納するには、そのコードを各作業者に割り当てるためにモデルをシリアル化する必要があります。以下を参照してください。

  1. 各作業者にモデルファイルを用意してください。これは、Python dependencies documentのデータフローで説明されています。
  2. DoFnでstart_bundleメソッドを実装し、ファイルを読み込んでローカルのスレッドに格納させます。

これは、ローカルマシンと漬けに読まれていないファイルの内容を保証しますが、代わりにファイルには、各労働者が利用できるようにし、その後にお読みください。start_bundle機能が働い

+0

されます。問題は、私たちが提供しようとしていたモデルファイルの深さにありました。 – bR3nD4n

関連する問題