我可以在 gpu 上运行 Kera 模型吗?

我正在运行一个 Kera 模型,提交截止时间是36小时,如果我在 CPU 上训练我的模型大约需要50小时,有没有办法在 Gpu 上运行 Kera?

我正在使用 Tensorflow 后端并在我的 Jupiter 笔记本上运行它,没有安装水蟒。

315504 次浏览

是的,你可以在 GPU 上运行 keras 模型。有些事情你必须首先检查。

  1. 你的系统有 GPU (Nvidia。因为 AMD 还不能工作)
  2. 您已经安装了张量流的 GPU 版本
  3. 你已经安装了 CUDA 安装说明书
  4. 验证张量流是否与 GPU 检查 GPU 是否工作一起运行

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

对于 TF > v2.0

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

(感谢@nbro 和@Ferro 在评论中指出这一点)

或者

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

输出将是这样的:

[
name: "/cpu:0"device_type: "CPU",
name: "/gpu:0"device_type: "GPU"
]

一旦所有这些都完成了,你的模型将在 GPU 上运行:

检查 keras (> = 2.1.1)是否使用 GPU:

from keras import backend as K
K.tensorflow_backend._get_available_gpus()

一切顺利。

当然。我想您已经为 GPU 安装了 TensorFlow。

在导入角函数之后,您需要添加以下代码块。我正在开发一台机器,它有56个核心 CPU 和一个 gpu。

import keras
import tensorflow as tf




config = tf.ConfigProto( device_count = {'GPU': 1 , 'CPU': 56} )
sess = tf.Session(config=config)
keras.backend.set_session(sess)

当然,这种使用强制了我的机器的最大限度。您可以减少 CPU 和 gpu 的消耗值。

当然。如果您运行在 Tensorflow 或 CNTk 后端,您的代码将默认运行在 GPU 设备上。但是如果 Theano 后台,你可以使用 follow

西亚诺旗帜:

“ TheANO _ FLAGS = device = gpu,floatX = float32 python my _ keras _ script.py”

2.0兼容答案 : 上面提到的答案详细解释了如何在 Kera 模型上使用 GPU,我想解释一下如何在 Tensorflow Version 2.0上使用 GPU。

要知道有多少 GPU 可用,我们可以使用以下代码:

print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))

为了找出操作和张量分配给哪些设备, 把 tf.debugging.set_log_device_placement(True)作为程序的第一个语句。

启用设备放置日志会打印任何张量分配或操作。例如,运行以下代码:

tf.debugging.set_log_device_placement(True)


# Create some tensors
a = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
b = tf.constant([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
c = tf.matmul(a, b)


print(c)

输出如下:

在设备中执行 MatMul 操作 /job: localhost/copy: 0/task: 0/device: GPU: 0 tf. Tensor ([22.28. ] [49.64. ]] ,形状 = (2,2) ,dtype = float32)

有关详细信息,请参阅 这个链接

查看您的脚本是否在任务管理器中运行 GPU。如果没有,怀疑你的 CUDA 版本是正确的张量流版本,你正在使用,因为其他答案已经建议。

另外,CUDA 版本需要一个适当的 CUDA DNN 库来运行带张量流的 GPU。从 给你下载/解压缩,并将 DLL (例如 cudnn64 _ 7.DLL)放入 CUDA bin 文件夹(例如 C: Program Files NVIDIA GPU Computing Toolkit CUDA v10.1 bin)。

我在 Windows 10上使用 Anaconda,配有 GTX 1660 Super。我首先安装的 CUDA 环境下,这个 一步一步来。然而,现在有一个 keras-gpu元包可在 Anaconda 上,显然不需要事先安装 CUDA 和 cuDNN 库(我已经安装了无论如何)。

这就是为什么我创建了一个名为 keras_gpu的专用环境:

# need to downgrade from tensorflow 2.1 for my particular setup
conda create --name keras_gpu keras-gpu=2.3.1 tensorflow-gpu=2.0

要在@johncasey 的回答中添加,但对于 TensorFlow 2.0,添加以下代码块对我来说是可行的:

import tensorflow as tf
from tensorflow.python.keras import backend as K


# adjust values to your needs
config = tf.compat.v1.ConfigProto( device_count = {'GPU': 1 , 'CPU': 8} )
sess = tf.compat.v1.Session(config=config)
K.set_session(sess)

这篇文章 解决了我得到的 set_session错误: 您需要使用来自张量流路径的 keras 后端,而不是 keras 本身。

基于@MonkeyBack 的回答,使用 Tensorflow 2.5:

conda create --name keras_gpu keras-gpu tensorflow-gpu


# should show GPU is available
python -c "import tensorflow as tf;print('GPUs Available:', tf.config.list_physical_devices('GPU'))"