Как обработать сеанс Tensorflow в многопроцессорной среде с помощью fork ()? - PullRequest
0 голосов
/ 13 сентября 2018

Я работаю над приложением 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_*/

Большое спасибо заранее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...