Я пытаюсь запустить tenorflow-gpu в моем приложении C ++ UWP, но, к сожалению, оно использует только процессор.
Моя настройка следующая:
Платформа ОС: Windows 10
Версия TensorFlow: 1.12.0
Версия CUDA / cuDNN: у меня есть две конфигурации (CUDA 10.0 / cuDNN 7.3 для CUDA 10.0) и (CUDA 9.0.17 и cuDNN 7.3 для CUDA 9.0)
Модель и память графического процессора: Nvidia GTX1060
Среда: Visual Studio 2017 15,9
Я установил тензор потока из разных источников:
https://github.com/Neargye/tensorflow/releases
https://github.com/fo40225/tensorflow-windows-wheel
https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-windows-x86_64-1.12.0.zip
а также скачал tenorflow-gpu для python с использованием anaconda (затем тензор потока в скрипте python использует GPU).
Я скопировал все файлы lib / dll в выходной каталог, установил конфигурацию компоновщика (я также добавил все возможные файлы CUDA / cuDNN и протестировал их комбинации), но ничего не работает.
Я проверяю, видит ли тензорный поток GPU, используя следующий код:
std::string getGPUDeviceName(TF_Session* session)
{
std::unique_ptr<TF_Status, decltype(&TF_DeleteStatus)> status(
TF_NewStatus(), TF_DeleteStatus);
std::unique_ptr<TF_DeviceList, decltype(&TF_DeleteDeviceList)> list(
TF_SessionListDevices(session, status.get()), TF_DeleteDeviceList);
auto device_list = list.get();
auto num_devices = TF_DeviceListCount(device_list);
for (auto i = 0; i < num_devices; ++i) {
auto device_name = TF_DeviceListName(device_list, i, status.get());
auto device_type = TF_DeviceListType(device_list, i, status.get());
if (device_type == DEVICE_GPU)
{
return device_name;
}
}
// No GPU device found.
return "";
}
std::string getGPUDeviceName()
{
std::unique_ptr<TF_Status, decltype(&TF_DeleteStatus)> status(TF_NewStatus(), TF_DeleteStatus);
std::unique_ptr<TF_Graph, decltype(&TF_DeleteGraph)> graph(TF_NewGraph(),
TF_DeleteGraph);
std::unique_ptr<TF_SessionOptions, decltype(&TF_DeleteSessionOptions)> opts (TF_NewSessionOptions(),
TF_DeleteSessionOptions);
std::unique_ptr < TF_Session, std::function<void(TF_Session*)>> sess(
TF_NewSession(graph.get(), opts.get(), status.get()),
[statusPtr = status.get()](auto sess) {TF_DeleteSession(sess, statusPtr); });
return getGPUDeviceName(sess.get());
}
Понятия не имею, что я могу сделать больше в этой теме.