mik*_*305 88 python machine-learning keras tensorflow
我在Keras上安装了Tensorflow后端和CUDA.我想有时需要强迫Keras使用CPU.这可以在没有在虚拟环境中安装单独的CPU Tensorflow的情况下完成吗?如果是这样的话?如果后端是Theano,可以设置标志,但我还没有听说过可通过Keras访问的Tensorflow标志.
Mar*_*oma 96
如果你想强迫Keras使用CPU
import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" # see issue #152
os.environ["CUDA_VISIBLE_DEVICES"] = ""
Run Code Online (Sandbox Code Playgroud)
在导入Keras/Tensorflow之前.
运行您的脚本
$ CUDA_VISIBLE_DEVICES="" ./your_keras_code.py
Run Code Online (Sandbox Code Playgroud)
也可以看看
RAC*_*OME 65
一个相当可分的方法是使用
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)
Run Code Online (Sandbox Code Playgroud)
在这里,使用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
变量定义了可在计算图(inter)的节点之间进行并行操作的线程数.
allow_soft_placement
允许在满足以下任何条件的情况下在CPU上运行操作:
该操作没有GPU实现
没有已知或已注册的GPU设备
需要与来自CPU的其他输入共存
所有这些都是在我的类的构造函数中执行任何其他操作之前,并且可以与我使用的任何模型或其他代码完全分离.
注意:这需要tensorflow-gpu
和cuda
/ cudnn
要安装,因为该选项用于使用GPU.
参考文献:
ConfigProto中的选项如allow_soft_placement和log_device_placement是什么意思?
inter_op_parallelism_threads和intra_op_parallelism_threads的含义
Neu*_*tic 44
这对我(win10)起作用,在你导入keras之前放置:
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
Run Code Online (Sandbox Code Playgroud)
har*_*028 22
只需导入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)
Run Code Online (Sandbox Code Playgroud)
syg*_*ygi 20
根据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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
98999 次 |
最近记录: |