Tensorflow后端的Keras能否被迫随意使用CPU或GPU?
keras
machine-learning
python
tensorflow
30
0

我安装了Tensorflow后端和CUDA的Keras。我有时想按需强迫Keras使用CPU。不用说在虚拟环境中安装单独的仅CPU的Tensorflow就能做到吗?如果可以,怎么办?如果后端是Theano,则可以设置标志,但是我还没有听说过可以通过Keras访问Tensorflow标志。

参考资料:
Stack Overflow
收藏
评论
共 6 个回答
高赞 时间 活跃

根据keras 教程 ,您可以简单地使用与常规tensorflow中相同的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
收藏
评论

如果要强制Keras使用CPU

方式1

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

在导入Keras / Tensorflow之前。

方式2

运行脚本为

$ CUDA_VISIBLE_DEVICES="" ./your_keras_code.py

也可以看看

  1. https://github.com/keras-team/keras/issues/152
  2. https://github.com/fchollet/keras/issues/4613
收藏
评论

我只是花了一些时间弄清楚。 Thoma的答案不完整。假设您的程序是test.py ,您想使用gpu0来运行该程序,并使其他gpus保持空闲。

您应该编写CUDA_VISIBLE_DEVICES=0 python test.py

请注意,它是DEVICES而不是DEVICE

收藏
评论

这对我有用(win10),在导入keras之前放置:

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
收藏
评论

一种相当可分离的方法是使用

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然后设置可以通过使用CPU内核的数量intra_op_parallelism_threadsinter_op_parallelism_threads

intra_op_parallelism_threads变量指示允许在计算图中的单个节点中并行操作(内部使用)的线程数。尽管inter_ops_parallelism_threads变量定义了可在计算图的各个节点之间进行并行操作的线程数。

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

  1. 该操作没有GPU实现

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

  3. 需要与CPU的其他输入一起放置

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

注意:这需要安装tensorflow-gpucuda / cudnn ,因为已指定使用GPU的选项。

参考:

收藏
评论

只需导入tensortflow并使用keras,就这么简单。

import tensorflow as tf
# your code here
with tf.device('/gpu:0'):
    model.fit(X, y, epochs=20, batch_size=128, callbacks=callbacks_list)
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题