问题:Tensorflow后端的Keras能否被迫随意使用CPU或GPU?
我安装了Tensorflow后端和CUDA的Keras。我有时想按需强迫Keras使用CPU。不用说在虚拟环境中安装单独的仅CPU的Tensorflow就能做到吗?如果可以,怎么办?如果后端是Theano,则可以设置标志,但是我还没有听说过可以通过Keras访问Tensorflow标志。
回答 0
如果要强制Keras使用CPU
方式1
import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" # see issue #152
os.environ["CUDA_VISIBLE_DEVICES"] = ""
在导入Keras / Tensorflow之前。
方式二
运行脚本为
$ CUDA_VISIBLE_DEVICES="" ./your_keras_code.py
也可以看看
回答 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
GPU
和CPU
,我们通过严格定义允许Tensorflow会话访问的GPU和CPU的数量来指示我们是否要使用GPU或CPU运行代码。变量num_GPU
并num_CPU
定义该值。num_cores
然后通过intra_op_parallelism_threads
和设置可供使用的CPU内核数inter_op_parallelism_threads
。
该intra_op_parallelism_threads
变量指示在计算图中单个节点中并行操作被允许使用(内部)的线程数。虽然inter_ops_parallelism_threads
变量定义了跨计算图节点(并行)进行并行操作可访问的线程数。
allow_soft_placement
如果满足以下任一条件,则允许在CPU上运行操作:
该操作没有GPU实现
没有已知或注册的GPU设备
需要与CPU的其他输入一起放置
所有这些都在任何其他操作之前在我的类的构造函数中执行,并且可以与我使用的任何模型或其他代码完全分开。
注意:这要求tensorflow-gpu
和cuda
/ cudnn
要安装,因为提供了使用GPU的选项。
参考:
回答 2
这对我有用(win10),在导入keras之前放置:
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
回答 3
只需导入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)
回答 4
按照keras 教程,您可以简单地使用与tf.device
常规tensorflow中相同的作用域:
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
回答 5
我只是花了一些时间弄清楚。Thoma的答案不完整。假设您的程序是test.py
,您想使用gpu0来运行该程序,并使其他gpus保持空闲。
你应该写 CUDA_VISIBLE_DEVICES=0 python test.py
注意DEVICES
不是DEVICE
回答 6
对于从事PyCharm并强制使用CPU的人员,您可以在“运行/调试”配置的“环境变量”下添加以下行:
<OTHER_ENVIRONMENT_VARIABLES>;CUDA_VISIBLE_DEVICES=-1