2017-09-18 7 views
0

TensorFlowセッションで使用すると、tensorflow/user/ops /の例と同様のカスタムTensorFlow演算子をC++で作成しました。カスタムTensorFlow user_opsをTensorFlowサービングを通じて提供することができます

演算子を使用してSavedModelを保存すると、結果として得られたsaved_modelに演算子が含まれます(少なくとも、そのようなモデルのテキストプロトコルバッファの大まかな検査で示されます)。もちろん、tensorflow_model_serverでこれを提供しようとすると、操作者は不明であるため、最初は失敗します。

そこで、先に読み込むuser_opsライブラリを指定するオプションを使用してtensorflow_model_serverを拡張しました。 tensorflow_model_serverの「main.cc」に挿入され、関連するコードスニペットは、次のとおりです。

if (librarypath.size() > 0) { 
    // Load the library. 
    TF_Status* status = TF_NewStatus(); 
    TF_LoadLibrary(librarypath.c_str(), status); 
    if (!TF_GetCode(status) == TF_OK) { 
     string status_msg(TF_Message(status)); 
     std::cout << "Problem loading user_op library " << librarypath << ": " << TF_Message(status); 
    return -1; } 
    TF_DeleteStatus(status); 
} 

残念ながら、これはかなりの作業は予想通り、私は

Problem loading user_op library /usr/lib64/multipolygon_op.so: /usr/lib64 /multipolygon_op.so: undefined symbol: _ZTIN10tensorflow8OpKernelE 

を得るこれは何とかシンボルを_pywrap_tensorflow_internal.soを指していません。ユーザーopライブラリを別の方法でビルドする必要がありますか?それとも、運が悪いのですか?

答えて

0

[OK]を、その答えは比較的簡単であることが判明異なる会場の数を試した後:

tensorflow_model_serverがあるが、新たに共有ライブラリをロードするために、独自のシンボルを提供しないような方法でリンクされている

。したがって、リンカーオプションに "-rdynamic"を追加すると、それを変更することですべてが適切になります。

 bazel build --linkopt=-rdynamic //tensorflow_serving/model_servers:tensorflow_model_server 
関連する問題