Hi there,
Is there any CPP functions that initialize the tensorflow?
I am trying to write a graph rewriting pass outside tensorflow, so I use TFG’s provided
test like mlir::tfg::ImportGraphDefToMlir(&context, debug_info, graphdef);
. It throws the error that complains that no tensorflow Op
is registered, only my custom op is registered
It is expected that the tensorflow ops is registered as well.
$ TF_CPP_MAX_VLOG_LEVEL=4 ./test
2021-11-23 14:50:24.049527: I tensorflow/core/framework/op.cc:130] All registered Ops:
2021-11-23 14:50:24.049540: I tensorflow/core/framework/op.cc:132] Op<name=CustomOp1; signature=input:int32 -> output:int32>
2021-11-23 14:50:24.049548: I tensorflow/core/framework/op.cc:132] Op<name=CustomOp2; signature=input:T -> output:T; attr=T:type>
2021-11-23 14:50:24.049599: I tensorflow/core/framework/op.cc:80] NOT_FOUND: Op type not registered 'NoOp' in binary running on host-machine. Make sure the Op and Kernel are registered in the binary running in this process. Note that if you are loading a saved graph which used ops from tf.contrib, accessing (e.g.) `tf.contrib.resampler` should be done before importing the graph, as contrib ops are lazily registered when the module is first accessed.
2021-11-23 14:50:24.049655: I tensorflow/core/framework/op.cc:80] NOT_FOUND: Op type not registered 'NoOp' in binary running on host-machine. Make sure the Op and Kernel are registered in the binary running in this process. Note that if you are loading a saved graph which used ops from tf.contrib, accessing (e.g.) `tf.contrib.resampler` should be done before importing the graph, as contrib ops are lazily registered when the module is first accessed.
2021-11-23 14:50:24.049678: F tensorflow/core/graph/graph.cc:394] Non-OK-status: status status: NOT_FOUND: Op type not registered 'NoOp' in binary running on host-machine. Make sure the Op and Kernel are registered in the binary running in this process. Note that if you are loading a saved graph which used ops from tf.contrib, accessing (e.g.) `tf.contrib.resampler` should be done before importing the graph, as contrib ops are lazily registered when the module is first accessed.
I also tried using the following test case, its output is empty.
// importer.cc
int main(int argc, char **argv) {
::tensorflow::port::InitMain(argv[0], &argc, &argv);
std::vector<::tensorflow::OpDef> op_defs;
Status s = ::tensorflow::OpRegistry::Global()->ProcessRegistrations();
if (!s.ok()) { VLOG(2) << " Not processed"; }
::tensorflow::OpRegistry::Global()->GetRegisteredOps(&op_defs);
for (const tensorflow::OpDef &op : op_defs) {
VLOG(2) << " Op name " << op.name();
}
}
So, in that case, it seems that the tensorflow is not initialized , and the tensorflow ops is not registered. How could I call the initialize function?