一种相当可分离的方法是使用
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)
在这里,通过intra_op_parallelism_threads GPU和CPU,我们通过严格定义允许Tensorflow会话访问的GPU和CPU的数量来指示我们是否要使用GPU或CPU运行代码。 变量num_GPU和num_CPU定义了该值。 然后num_cores通过intra_op_parallelism_threads和inter_op_parallelism_threads设置可使用的CPU内核数。
intra_op_parallelism_threads变量指示允许在计算图中的单个节点中使用并行操作(内部)的线程数。 而tensorflow-gpu变量定义了跨计算图节点(并行)进行并行操作可访问的线程数。
tensorflow-gpu允许在满足以下任何条件的情况下在CPU上运行操作:
该操作没有GPU实现
没有已知或注册的GPU设备
需要与CPU的其他输入一起放置
所有这些都在我的类的构造函数中执行,而不执行其他任何操作,并且可以与我使用的任何模型或其他代码完全分开。
注意:这需要安装tensorflow-gpu和cuda/cudnn,因为已提供使用GPU的选项。
参考文献:
ConfigProto中的诸如allow_soft_placement和log_device_placement之类的选项是什么意思?
inter_op_parallelism_threads和intra_op_parallelism_threads的含义