web-dev-qa-db-ja.com

基本パスの下にサービング<MODEL>のバージョンが見つかりません

私は this を使用してtensorflow serving私のオブジェクト検出モデルを使用。モデルの生成に tensorflow object detection を使用しています。 this exporter(生成された凍結モデルworksを使用して凍結モデルを作成しましたpython =スクリプト)。

凍結されたグラフディレクトリには次の内容があります(variablesディレクトリには何もありません)

変数/

saved_model.pb

次のコマンドを使用してモデルを提供しようとすると、

tensorflow_model_server --port=9000 --model_name=ssd --model_base_path=/serving/ssd_frozen/

それはいつも私を示しています

...

tensorflow_serving/model_servers/server_core.cc:421](再)モデルの追加:ssd 2017-08-07 10:22:43.892834:W tensorflow_serving/sources/storage_path/file_system_storage_path_source.cc:262] servable ssdのバージョンがベースの下に見つかりませんpath/serving/ssd_frozen/2017-08-07 10:22:44.892901:W tensorflow_serving/sources/storage_path/file_system_storage_path_source.cc:262]ベースパス/ serving/ssd_frozen /の下にサービングssdのバージョンが見つかりません

...

20
Ultraviolet

同じ問題がありました。理由は、検出モデルをエクスポートするときにオブジェクト検出APIがモデルのバージョンを割り当てないためです。ただし、テンソルフローを提供するには、検出モデルのバージョン番号を割り当てる必要があるため、提供するモデルの異なるバージョンを選択できます。この場合、検出モデル(.pbファイルと変数フォルダー)をフォルダー:/ serving/ssd_frozen/1 /の下に配置する必要があります。このようにして、モデルをバージョン1に割り当てます。バージョンが1つしかないため、tensorflowサービスはこのバージョンを自動的にロードします。デフォルトでは、テンソルフローの提供は自動的に最新バージョン(つまり、最大数のバージョン)を提供します。

1 /フォルダーを作成した後、model_base_pathを--model_base_path =/serving/ssd_frozen /に設定する必要があることに注意してください。

42
Xinyao Wang

ご存知のように、新しいバージョンのtfサービングでは、SessionBundleによってエクスポートされていたモデル形式はサポートされなくなりましたが、現在はSavedModelBuilderです。

古いモデル形式からセッションを復元し、SavedModelBuilderでエクスポートする方が良いと思います。それを使用してモデルのバージョンを示すことができます。

    def export_saved_model(version, path, sess=None):
        tf.app.flags.DEFINE_integer('version', version, 'version number of the model.')
        tf.app.flags.DEFINE_string('work_dir', path, 'your older model  directory.')
        tf.app.flags.DEFINE_string('model_dir', '/tmp/model_name', 'saved model directory')
        FLAGS = tf.app.flags.FLAGS

        # you can give the session and export your model immediately after training 
        if not sess: 
            saver = tf.train.import_meta_graph(os.path.join(path, 'xxx.ckpt.meta'))
            saver.restore(sess, tf.train.latest_checkpoint(path))

        export_path = os.path.join(
            tf.compat.as_bytes(FLAGS.model_dir),
            tf.compat.as_bytes(str(FLAGS.version)))
        builder = tf.saved_model.builder.SavedModelBuilder(export_path)

        # define the signature def map here
        # ...

        legacy_init_op = tf.group(tf.tables_initializer(), name='legacy_init_op')
        builder.add_meta_graph_and_variables(
            sess, [tf.saved_model.tag_constants.SERVING],
            signature_def_map={
                'predict_xxx':
                    prediction_signature
            },
            legacy_init_op=legacy_init_op
        )

        builder.save()
        print('Export SavedModel!')

上記のコードの主要部分はtfサービスの例にあります。最後に、提供可能な形式でSavedModelを生成します。

enter image description here

9
aforwardz

Like/serving/model_name/0000123/saved_model.pbの下にバージョンフォルダーを作成します。

上記の回答は、モデルフォルダー内にバージョン番号を保持することが重要である理由をすでに説明しています。以下のリンクをたどってください。ここには、異なるモデルの構築モデルがあり、参照として使用できます。

https://github.com/tensorflow/serving/tree/master/tensorflow_serving/servables/tensorflow/testdata

0
ashwini prakash