2017-09-27 13 views
0

私はKerasでモデルを訓練しました。今私はTensorflowを使ってそれを配備したいと思っています。したがって、私はそのようにSavedModel形式に変換:サービングのTensorflowモデルを最適化する方法

K.set_learning_phase(0) 
    K._LEARNING_PHASE = tf.constant(0) 
    # sess = K.get_session() 
    if not os.path.exists(path): 
     os.mkdir(path) 
    export_path = os.path.join(
     tf.compat.as_bytes(path), 
     tf.compat.as_bytes(str(get_new_version(path=path, current_version=int(version))))) 
    print('Learning phase', K.learning_phase()) 
    print('Exporting trained model to', export_path) 
    builder = tf.saved_model.builder.SavedModelBuilder(export_path) 

    model_input = tf.saved_model.utils.build_tensor_info(model.input) 
    model_output = tf.saved_model.utils.build_tensor_info(model.output) 

    prediction_signature = (
     tf.saved_model.signature_def_utils.build_signature_def(
      inputs={'inputs': model_input}, 
      outputs={'output': model_output}, 
      method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME)) 

    with K.get_session() as sess: 

     builder.add_meta_graph_and_variables(
      sess=sess, tags=[tf.saved_model.tag_constants.SERVING], 
      signature_def_map={ 
       'predict': 
        prediction_signature, 
      }) 

     builder.save() 

を私は(apt-getをインストール経由でインストールTensorflowモデル・サーバー)を提供するTensorflowで使い始めました。しかし私のモデルは376 MBのサイズ(saved_model.pbとvariablesフォルダの両方)であり、予測時間は非常に長く(要求あたり約0.3秒)、rpsが増加するとレイテンシが減少します。

私はモデルを最適化したいのですが、誰かがそれをやるためのトリックを知っていますか?

P.S. Kerasの私のモデルはsave_model(model)で保存されています。

答えて

1

いくつかの考え:

  1. はあなたのサービングモデル内の任意のキュー(例えばFIFOQueue)を残していなかったことを確認してください。 I/O待ち時間を隠すためにトレーニングで頻繁に使用されますが、パフォーマンスを損なう可能性があります。

  2. 複数の推論要求を一括してTFモデル/グラフへの1回の呼び出しにまとめて有効にすることを検討してください。 --batching_parameters_fileを使ってチューニングする--enable_batchingを参照してください。

  3. これらのヒント以外に、モデル自体の構造を調べる必要があります。おそらく他の人はそれについての洞察を持っています。

-Chris(TF-サービングチーム)

+0

が答えてくれてありがとう、クリスは、あなたがモデルにFIFIQueueについて言うことができますか? – streamride

+0

そして私はモデルを保存するとグラフがフリーズするのは正しいのですか? – streamride

関連する問題