使用 GPU 而不是 CPU 与 Keras 和 Linux 的 Tensorflow 后端

Posted

技术标签:

【中文标题】使用 GPU 而不是 CPU 与 Keras 和 Linux 的 Tensorflow 后端【英文标题】:Using GPU instead of CPU with Keras with Tensorflow Backend for Linux 【发布时间】:2017-10-11 04:17:08 【问题描述】:

我无法让 Keras 使用 GPU 版本的 Tensorflow 而不是 CPU。每次我导入 keras 时,它都会说:

>>> import keras
Using TensorFlow backend

...这意味着它正在工作,但在 CPU 上,而不是 GPU 上。 我安装了 Cuda 和 cuDNN 并使用了这个环境:

conda create -n tensorflow python=3.5 anaconda 

我想我首先安装了 tensorflow 的 CPU 版本 - 我不记得了,因为我整天都在让 cuda 和 cudnn 工作。 反正我也装了GPU版:

pip install --ignore-installed --upgrade \ https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.1.0-cp35-cp35m-linux_x86_64.whl

它仍然给出相同的信息。我试图检查以下代码正在使用哪个设备:

sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

但我得到了这个输出,表明我正在使用设备 0,我的 GPU:

2017-05-12 02:14:10.746679: W 
tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow 
library wasn't compiled to use SSE4.1 instructions, but these are 
available on your machine and could speed up CPU computations.
2017-05-12 02:14:10.746735: W         
tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow 
library wasn't compiled to use SSE4.2 instructions, but these are 
available on your machine and could speed up CPU computations.
2017-05-12 02:14:10.746751: W 
tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow 
library wasn't compiled to use AVX instructions, but these are 
available on your machine and could speed up CPU computations.
2017-05-12 02:14:10.746764: W 
tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow 
library wasn't compiled to use AVX2 instructions, but these are 
available on your machine and could speed up CPU computations.
2017-05-12 02:14:10.746777: W 
tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow 
library wasn't compiled to use FMA instructions, but these are 
available on your machine and could speed up CPU computations.
2017-05-12 02:14:10.926330: I 
tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:901] successful 
NUMA node read from SysFS had negative value (-1), but there must be 
at least one NUMA node, so returning NUMA node zero
2017-05-12 02:14:10.926614: I 
tensorflow/core/common_runtime/gpu/gpu_device.cc:887] Found device 0 
with properties: 
name: GeForce GTX 1060 6GB
major: 6 minor: 1 memoryClockRate (GHz) 1.7845
pciBusID 0000:01:00.0
Total memory: 5.93GiB
Free memory: 5.51GiB
2017-05-12 02:14:10.926626: I 
tensorflow/core/common_runtime/gpu/gpu_device.cc:908] DMA: 0 
2017-05-12 02:14:10.926629: I 
tensorflow/core/common_runtime/gpu/gpu_device.cc:918] 0:   Y 
2017-05-12 02:14:10.926637: I 
tensorflow/core/common_runtime/gpu/gpu_device.cc:977] Creating 
TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1060 6GB, 
pci bus id: 0000:01:00.0)
Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: GeForce GTX 
1060 6GB, pci bus id: 0000:01:00.0
2017-05-12 02:14:10.949871: I 
tensorflow/core/common_runtime/direct_session.cc:257] Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: GeForce GTX 
1060 6GB, pci bus id: 0000:01:00.0

我真的无事可做。我唯一剩下的就是卸载 anaconda 并重新安装所有东西,我真的不想这样做,因为我花了一整天的时间让它与 keras 和所有东西一起工作(只是还没有与 GPU 一起工作)

【问题讨论】:

你能解决这个问题吗?我也面临同样的问题? 【参考方案1】:

有可能是使用默认选项安装 keras 将安装 tensorflow 的 CPU 版本。你可以卸载那个版本,然后运行...

pip install --upgrade --no-deps keras

https://github.com/fchollet/keras/issues/5766

【讨论】:

要求已经更新:./anaconda3/envs/tensorflow/lib/python3.5/site-packages 中的 keras - 如何卸载 keras?对不起,我是 linux 新手 好的,我卸载它并使用您的链接重新安装它,但仍然没有任何改变 是的,我不知道该怎么做...输入 pip uninstall tensorflow 只会给我这个消息:无法卸载要求 tensorflow,未安装【参考方案2】:

首先,您必须确保 tensorflow 实际检测到您的 CPU 和 GPU。您可以使用以下代码进行检查。

from tensorflow.python.client import device_lib
device_lib.list_local_devices()

如果它只列出了 CPU 而不是 GPU,可能是因为你没有相同的 tensorflow 和 tensorflow-gpu 版本(因为升级)。您可以使用检查版本(如果您使用 pip)

pip list

如果不相同,则必须先卸载不兼容的 tensorflow 或 tensorflow-gpu 版本,然后再安装与您的 CUDA 和 CUDNN 版本兼容的 tensorflow 和 tensorflow-gpu 版本。

比如我用的是CUDA 8.0和CUDNN 5.1.10,所以兼容的tensorflow和tensorflow-gpu版本是1.2版本。

使用 pip 卸载:

pip uninstall tensorflow
pip uninstall tensorflow-gpu

使用 pip 安装:

pip install tensorflow==1.2 
pip install tensorflow-gpu==1.2

然后您只需检查 tensorflow 是否再次检测到您的 CPU 和 GPU。如果是这样,那么您只需要运行代码,如果您使用的是 keras,它将自动选择在 GPU 中运行计算。

这是 tensorflow.org 发布的经过测试的兼容组合的 link,这是与此相关的另一个问题的 link。

【讨论】:

【参考方案3】:

您是否已经尝试过 pip install tensorflow ?这将安装 cpu 版本,而 pip install tensorflow-gpu 将安装 gpu 版本。 https://www.tensorflow.org/install/

【讨论】:

以上是关于使用 GPU 而不是 CPU 与 Keras 和 Linux 的 Tensorflow 后端的主要内容,如果未能解决你的问题,请参考以下文章

如何确保 Keras 使用 GPU 和 tensorflow 后端?

具有Tensorflow后端的Keras - 运行在CPU上预测但适合GPU

Keras强制使用CPU

是否有 R 命令使 Keras Tensorflow-GPU 在 CPU 上运行?

Keras Gpu:配置

在 colab 中使用 keras_to_tpu_model 时,TPU 运行速度与 CPU 一样慢