具有 Tensorflow 后端的 Kera 可以被迫随意使用 CPU 或 GPU 吗?

我已经安装了 Kera 与 Tensorflow 后端和 CUDA。我想有时候按需强迫 Kera 使用 CPU。如果不在虚拟环境中安装一个单独的只有 CPU 的 Tensorflow,可以做到这一点吗?如果是这样,怎么做?如果后端是西亚诺,就可以设置旗帜,但我没有听说过 Tensorflow 的旗帜可以通过 Keras 进入。

152220 次浏览

根据 keras 教程,您可以简单地使用与常规张量流中相同的 tf.device作用域:

with tf.device('/gpu:0'):
x = tf.placeholder(tf.float32, shape=(None, 20, 64))
y = LSTM(32)(x)  # all ops in the LSTM layer will live on GPU:0


with tf.device('/cpu:0'):
x = tf.placeholder(tf.float32, shape=(None, 20, 64))
y = LSTM(32)(x)  # all ops in the LSTM layer will live on CPU:0

如果你想强迫克拉斯使用中央处理器

方法一

import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"   # see issue #152
os.environ["CUDA_VISIBLE_DEVICES"] = ""

在 Keras/Tensorflow 进口之前。

第二条路

Run your script as

$ CUDA_VISIBLE_DEVICES="" ./your_keras_code.py

参见

  1. Https://github.com/keras-team/keras/issues/152
  2. Https://github.com/fchollet/keras/issues/4613

我只是花了点时间想明白。 托马的回答并不完整。 假设您的程序是 test.py,您想使用 gpu0来运行这个程序,并保持其他 gpus 是空闲的。

你应该写 CUDA_VISIBLE_DEVICES=0 python test.py

注意这是 DEVICES不是 DEVICE

完成这项工作的一种相当可分的方法是使用

import tensorflow as tf
from keras import backend as K


num_cores = 4


if GPU:
num_GPU = 1
num_CPU = 1
if CPU:
num_CPU = 1
num_GPU = 0


config = tf.ConfigProto(intra_op_parallelism_threads=num_cores,
inter_op_parallelism_threads=num_cores,
allow_soft_placement=True,
device_count = {'CPU' : num_CPU,
'GPU' : num_GPU}
)


session = tf.Session(config=config)
K.set_session(session)

在这里,使用 booleans GPUCPU,我们通过严格定义 Tensorflow 会话允许访问的 GPU 和 CPU 数量来指示是否要使用 GPU 或 CPU 运行代码。变量 num_GPUnum_CPU定义此值。然后,num_cores设置可通过 intra_op_parallelism_threadsinter_op_parallelism_threads使用的 CPU 核数。

The intra_op_parallelism_threads variable dictates the number of threads a parallel operation in a single node in the computation graph is allowed to use (intra). While the inter_ops_parallelism_threads variable defines the number of threads accessible for parallel operations across the nodes of the computation graph (inter).

allow_soft_placement允许在 CPU 上运行操作,如果满足以下任何一个条件:

  1. 操作没有 GPU 实现

  2. 没有已知或注册的 GPU 设备

  3. there is a need to co-locate with other inputs from the CPU

所有这些操作都是在类的构造函数中执行的,而且与我使用的任何模型或其他代码都是完全可分离的。

注意: 这需要安装 tensorflow-gpucuda/cudnn,因为这个选项提供了使用 GPU 的选项。

参考:

这对我来说很有用(win10) ,在你导入 Keras 之前:

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'

Just import tensortflow and use keras, it's that easy.

import tensorflow as tf
# your code here
with tf.device('/gpu:0'):
model.fit(X, y, epochs=20, batch_size=128, callbacks=callbacks_list)

对于使用 PyCharm 和强制 CPU 的人员,可以在 Run/Debug 配置中的 Environment 变量下面添加以下代码:

<OTHER_ENVIRONMENT_VARIABLES>;CUDA_VISIBLE_DEVICES=-1

要禁止在 GPU (张量流2.9)上运行,请使用 tf.config.set_visible_devices([], 'GPU')。空列表参数表示这次运行没有可见的 GPU。

Do this early in your code, e.g. before Keras initializes the tf configuration.

参见文件 https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/config/set_visible_devices