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ライブラリを別の方法でビルドする必要がありますか?それとも、運が悪いのですか?