Я работаю над приложением C ++ под управлением Tensorflow. Приложение должно хорошо работать с fork()
, как показано ниже. Однако я узнал, что время выполнения Tensorflow не является безопасным для вилки . Код зависает при достижении команды Session.run()
. Поскольку я новичок в C ++, я хотел бы спросить вас, как мне запустить Tensorflow в этом случае.
Редактировать: объект создается в главном потоке, и fork()
может вызываться много раз.
int main ()
{
Myapp myapp("path_to_model");
switch(fork()) {
case 0: {/* Child */
myapp.get_embedding(some_data);
break;
}
case -1:{ /* Error */
cerr << "Problem forking" << endl;
break;
}
default:
cout << "on the parent process";
break;
}
}
return 0;
}
MyApp:
//#ifndef _MYAPP_H_
//#define _MYAPP_H_
#ifndef MYAPP_H_
#define MYAPP_H_
#include <iostream>
#include <tensorflow/core/public/session.h>
using namespace std;
using namespace tensorflow;
class Myapp {
string protobuf_fn; // model filename
public:
Session *sess;
/*constructor with model file name*/
Myapp (string pb_fn){
//init the session and load the graph
TF_CHECK_OK(loadModelpb(pb_fn));
}
/*read trained model file into the session*/
tensorflow::Status loadModelpb(string pb_fn);
/* get an embedding by running Session.run()
* For now, it hangs when gets called on a child process.
*/
Tensor get_embedding(Data some_data) const;
};
#endif /*_MYAPP_H_*/
Большое спасибо заранее