Jump to content
Compvision.ru
Pechkin80

Не могу залинковать tensorflow на убунте.

Recommended Posts

Добрый день, 5й день пытаюсь подружиться с плюсовой версией tensorflow 1.14.( gcc 7.3.0)

Пробовал линковать как готовую либу, которая идёт вместе с pip пакетом tensorflow-gpu, так и собирать из исходников.

При компиляции вот такого кода:

#include <iostream>
#include <unistd.h>
#include "tensorflow/core/public/session.h"
using namespace std;

int main()
{
    using namespace tensorflow;
    GraphDef graph_def;
    Session* session;
    sleep(3);
    Status status = NewSession(SessionOptions(), &session);
        if (!status.ok()) {
            //std::cerr << "tf error: " << status.ToString() << "\n";
        }
    cout << "Hello World!" << endl;
    return 0;
}

Результат выполнения программы в большинстве случаев вот такой:

Цитата

2019-09-03 17:42:14.234360: E tensorflow/core/common_runtime/session.cc:81] Not found: No session factory registered for the given session options: {target: "" config: } Registered factories are {}.
tf error: Not found: No session factory registered for the given session options: {target: "" config: } Registered factories are {}.

По рекомендации  отсюда пытался линковать с флагами: -Wl,--allow-multiple-definition -Wl,--whole-archive

Потом на оснве информации отсюда сделал downgrade gcc/g++ с 7й до 6й версии, но тоже результатов не дало.

Вообщем я перепробовал ВСЁ!!!. 

 

 

Share this post


Link to post
Share on other sites

Там все на базель завязано, проекты тоже в нем собираются. Дело вкуса, но мне эта штука не нравится, и как решение, можно попробовать напрямую грузить замороженные модели прямо OpenCV-шным dnn модулем, либо преобразовать через ONNX в любой другой формат и опять же, либо через OpenCV, либо CAFFE, ncnn, .... или другой понравившийся фреймворк. 

TF -> ONNX:  https://github.com/onnx/tensorflow-onnx

Кстати, классная штука: https://github.com/lutzroeder/netron

И эта тулза может пригодиться: https://github.com/daquexian/onnx-simplifier

Share this post


Link to post
Share on other sites
36 минут назад, Smorodov сказал:

Там все на базель завязано, проекты тоже в нем собираются. Дело вкуса, но мне эта штука не нравится, и как решение, можно попробовать напрямую грузить замороженные модели прямо OpenCV-шным dnn модулем, либо преобразовать через ONNX в любой другой формат и опять же, либо через OpenCV, либо CAFFE, ncnn, .... или другой понравившийся фреймворк. 

TF -> ONNX:  https://github.com/onnx/tensorflow-onnx

Кстати, классная штука: https://github.com/lutzroeder/netron

И эта тулза может пригодиться: https://github.com/daquexian/onnx-simplifier

Я не хочу себя ставить в рамки узких возможностей, которые дают сурогаты. Базель имеет значения когда я сам компилирую tensorflow.

Для меня задача минимум залинковать, извлечённую из pip пакета, поэтому базель меня щас не беспокоит.

Почему у меня одного не работает ?

Share this post


Link to post
Share on other sites

Я не использовал питоновскую либу, но помнится намучился строить TF на MSVS, проект сейчас не нашел, было давно. 
Но помнится, что там еще много чего надо было кроме DLL-ины.  
Вот здесь посмотрите,  может поможет: https://joe-antognini.github.io/machine-learning/windows-tf-project 

 

Share this post


Link to post
Share on other sites

Возможно, что в pip-пакете что-то не так. Ты смотрел таблицу экспорта? Есть там все функции или нет?

Я  помню, что после сборки запускал стандартные примеры и они работали. Далее для удобства использовал cmake обвязку: то ли эту, то ли ту.

Share this post


Link to post
Share on other sites
3 часа назад, Nuzhny сказал:

Возможно, что в pip-пакете что-то не так. Ты смотрел таблицу экспорта? Есть там все функции или нет?

Я  помню, что после сборки запускал стандартные примеры и они работали. Далее для удобства использовал cmake обвязку: то ли эту, то ли ту.

Какие все функции ? Сообщение вываливается на этапе выполнения кода. Функции все есть конечно. Вопрос инициаллизации глобальных объектов в либе.

А этот код вообще валидный сам по себе. Может он и должен такое выдавать ?
Я брал пример отсюда: https://habr.com/ru/post/308002/

 

Share this post


Link to post
Share on other sites

А точно, просто увидел твой текст про опции линковки и пропустил про рантайм.

Статья трёхлетней давности, кто его знает, правильно там или нет. Почему ты не собираешь стандартые примеры из репозитория TF? Зачем начинать с левой статьи?

Share this post


Link to post
Share on other sites
10 минут назад, Nuzhny сказал:

А точно, просто увидел твой текст про опции линковки и пропустил про рантайм.

Статья трёхлетней давности, кто его знает, правильно там или нет. Почему ты не собираешь стандартые примеры из репозитория TF? Зачем начинать с левой статьи?

Например ?

Share this post


Link to post
Share on other sites

Кажеться Победа, но я ещё пока не уверен.

 

Цитата

 

2019-09-04 21:51:58.942504: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA

2019-09-04 21:51:58.953128: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcuda.so.1

2019-09-04 21:51:58.975675: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

2019-09-04 21:51:58.976390: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1640] Found device 0 with properties:

name: GeForce 940MX major: 5 minor: 0 memoryClockRate(GHz): 1.189

pciBusID: 0000:01:00.0

2019-09-04 21:51:58.976409: I tensorflow/stream_executor/platform/default/dlopen_checker_stub.cc:25] GPU libraries are statically linked, skip dlopen check.

2019-09-04 21:51:58.976473: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

2019-09-04 21:51:58.977287: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

2019-09-04 21:51:58.977953: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1763] Adding visible gpu devices: 0

2019-09-04 21:51:59.437425: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1181] Device interconnect StreamExecutor with strength 1 edge matrix:

2019-09-04 21:51:59.437455: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1187] 0

2019-09-04 21:51:59.437461: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1200] 0: N

2019-09-04 21:51:59.437663: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

2019-09-04 21:51:59.438447: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

2019-09-04 21:51:59.439192: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

2019-09-04 21:51:59.439826: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1326] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 1286 MB memory) -> physical GPU (device: 0, name: GeForce 940MX, pci bus id: 0000:01:00.0, compute capability: 5.0)

 

 

Share this post


Link to post
Share on other sites
17 часов назад, Nuzhny сказал:

Возможно, что в pip-пакете что-то не так. Ты смотрел таблицу экспорта? Есть там все функции или нет?

Я  помню, что после сборки запускал стандартные примеры и они работали. Далее для удобства использовал cmake обвязку: то ли эту, то ли ту.

Я наверно упоротый параноик и из-за своей паранои проковырялся неделю. Я ж тоже когда сёрфил по инету наткнулся на эту репу https://github.com/FloopCZ/tensorflow_cc как и Вы Но тараканы в голове сказали что нельзя доверять неофициальной репе. Зато теперь я вооружён знаниями как собирать самому из первоисточника и не зависитеть от "добрых" людей.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Recently Browsing   0 members

    No registered users viewing this page.

×