Я пытаюсь использовать API cpp tflite для запроса модели на плате разработчика. Код был протестирован с помощью USB-флешки и работает нормально, однако на плате разработчика я получаю сообщение об ошибке:
model_interpreter_ = coral::BuildEdgeTpuInterpreter(*model_, this->edgetpu_context_.get());
это ошибка:
INFO: Initialized TensorFlow Lite runtime.
ERROR: Failed to retrieve TPU context.
ERROR: Node number 0 (edgetpu-custom-op) failed to prepare.
Та же модель работает нормально, используя python API.
Есть ли поддержка tflite cpp API на dev-board?
На dev-board у меня последняя версия (12-1) иэто то, что я сделал для сборки библиотеки tflite:
Локальная сборка tflite для arm64 (с использованием универсального сценария сборки, не так, как описано здесь ) Я использовал ветку v. 2,0. * причина в недостатке виртуальной памяти и дискового пространства для сборки на плате разработчика.
На плате разработчика установлен flatbuffer.
Редактировать: Мне удалось собрать tflite из ветки tenorflow v2.0 на dev-плате, обновленной для ссылки на локально собранную библиотеку, все еще получая ту же ошибку ...
РЕДАКТИРОВАТЬ 2: Мне удалось воспроизвести тот же beaviour с tflite скомпилированной формы tf-r1.15. Также я попытался добавить отпечаток num доступных tpus, как было предложено @Nam Vu. так вот фрагмент кода:
cout << "check num available tpus\n";
cout << available_tpus.size() << "\n";
cout << "get edge session\n";
this->edgetpu_context_ = edgetpu::EdgeTpuManager::GetSingleton()->OpenDevice();
cout << "check num available tpus again:\n";
cout << available_tpus.size() << "\n";
cout << "get model buffer\n";
this->model_ = tflite::FlatBufferModel::BuildFromFile(model_path.c_str());
cout << "build model interpeter\n";
this->model_interpreter_ = coral::BuildEdgeTpuInterpreter(*model_, this->edgetpu_context_.get());
, в результате чего:
Hello
check num available tpus
3689348814741910324
get edge session
check num available tpus again:
3689348814741910324
get model buffer
build model interpeter
Segmentation fault