Программа C ++ вылетела при запуске tensorflow 2.0.0 с cuda 10.0 - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь построить tensorflow2.0.0 на tx2. подробности ниже.

Информация о системе

  • Платформа и распространение ОС: jetpack 4.3
  • TensorFlow, установленный из (исходный или двоичный): источник
  • Версия TensorFlow (используйте команду ниже): 2.0.0
  • Python версия: 2.7
  • Версия Bazel (при компиляции из исходников): 0.26.1
  • Версия GCC / компилятора (при компиляции из исходников): 7.5
  • Версия CUDA / cuDNN: 10.0 / 7.6.3
  • Модель графического процессора и память: Tegra TX2

Опишите текущее поведение , когда я пытаюсь запустить пример приложения, оно дает сбой. С журналами ошибок как «Неявная инициализация среды выполнения CUDA на графическом процессоре: 0 сбой. Статус: неизвестная ошибка»

Опишите ожидаемое поведение он должен начать сеанс.

Автономный код для воспроизведения проблемы Пример кода

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

int main()
{
    Session* session;
    Status status = NewSession(SessionOptions(), &session);
    if (!status.ok()) {
        cout << status.ToString() << "\n";
    }
    session->Close();
    cout << "Session successfully created.\n";
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)

project(test_hello)

set(TENSORFLOW_LIBRARIES tensorflow_cc protobuf)
add_executable(example example.cpp)
set(CUDA_NVCC_FLAGS
        ${CUDA_NVCC_FLAGS};
        -O3 -gencode arch=compute_30,code=sm_30;
        --std=c++11
        )
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Link the Tensorflow library.
# TensorFlow headers
include_directories("/usr/local/include/")
include_directories("/usr/local/include/tensorflow/")
include_directories("/usr/local/include/third-party/")
target_link_libraries(example "/usr/local/lib/libtensorflow_cc.so")

# You may also link cuda if it is available.
find_package(CUDA)
if(CUDA_FOUND)
  target_link_libraries(example ${CUDA_LIBRARIES})
endif()

Другая информация / журналы

$ ./example 
2020-07-08 15:01:34.122381: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so.1
2020-07-08 15:01:34.127413: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:973] ARM64 does not support NUMA - returning NUMA node zero
2020-07-08 15:01:34.127566: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1618] Found device 0 with properties: 
name: NVIDIA Tegra X2 major: 6 minor: 2 memoryClockRate(GHz): 1.3
pciBusID: 0000:00:00.0
2020-07-08 15:01:34.127608: I tensorflow/stream_executor/platform/default/dlopen_checker_stub.cc:25] GPU libraries are statically linked, skip dlopen check.
2020-07-08 15:01:34.127693: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:973] ARM64 does not support NUMA - returning NUMA node zero
2020-07-08 15:01:34.127815: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:973] ARM64 does not support NUMA - returning NUMA node zero
2020-07-08 15:01:34.127879: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1746] Adding visible gpu devices: 0
Internal: CUDA runtime implicit initialization on GPU:0 failed. Status: unknown error
Segmentation fault (core dumped)

Я новичок в тензорном потоке ... не уверен, что происходит. Цените помощь.

ПРИМЕЧАНИЕ. Я даже попытался установить tenorflow-1.15.0 и запустить ту же программу. То же самое происходит sh.

             -- Little progress --

================================== ========================

Я пытался найти эту ошибку в Google. Я нашел в каком-то месте, чтобы установить переменную env CUDA_VISIBLE_DEVICES. Я попробовал программу следующим образом, и теперь у меня другая ошибка.

setenv ("CUDA_VISIBLE_DEVICES", "", 0);

Пример кода обновления

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

int main()
{
    setenv("CUDA_VISIBLE_DEVICES", "", 0);    // <--- Here the line added
    Session* session;
    Status status = NewSession(SessionOptions(), &session);
    if (!status.ok()) {
        cout << status.ToString() << "\n";
    }
    session->Close();
    cout << "Session successfully created.\n";
}

Журналы ошибок выглядят следующим образом:

$ ./example
2020-07-10 15:49:20.957008: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so
.1                                                                                        
2020-07-10 15:49:20.961536: E tensorflow/stream_executor/cuda/cuda_driver.cc:318] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-cap
able device is detected                                           
2020-07-10 15:49:20.961633: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:156] kernel driver does not appear to be running on this
 host (tx2-desktop): /proc/driver/nvidia/version does not exist
Session successfully created.                                  
...