我正在尝试在C ++ UWP应用程序中运行tensorflow-gpu,但不幸的是,它仅使用CPU。
我的设置如下:
操作系统平台:Windows 10
TensorFlow版本:1.12.0
CUDA / cuDNN版本:我有两种配置(CUDA 10.0为CUDA 10.0 / cuDNN 7.3)和CUDA 9.0为(CUDA 9.0.17和cuDNN 7.3)两种配置
GPU型号和内存:Nvidia GTX1060
环境:Visual Studio 2017 15.9
我从各种来源安装了tensorflow:
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
并且还使用anaconda下载了python的tensorflow-gpu(然后python脚本中的tensorflow使用了GPU)。
我将所有lib / dll文件复制到输出目录,设置了链接器配置(我还添加了所有可能的CUDA / cuDNN文件,并测试了这些文件的组合),但是没有任何效果。
我使用以下代码测试tensorflow是否看到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());
}
我没有任何想法,在这个话题上我还能做些什么。