ChatGPT解决这个技术问题 Extra ChatGPT

带有 Tensorflow 后端的 Keras 是否可以随意强制使用 CPU 或 GPU?

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


G
Gaurav Kumar

如果你想强制 Keras 使用 CPU

方式一

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

也可以看看

https://github.com/keras-team/keras/issues/152 https://github.com/fchollet/keras/issues/4613


对我不起作用(Keras 2,Windows)-必须按照下面的答案设置 os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
#152 指的是什么问题?一个链接会很好。
我在问题 #152 中没有看到对 CUDA_DEVICE_ORDER=PCI_BUS_ID 的任何引用
我在 ipython3 终端中并且设置了 import os os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" # see issue #152 os.environ["CUDA_VISIBLE_DEVICES"] = "" ,现在如何“撤消”这个?我希望 Keras 再次使用 GPU。
@MartinThoma 我的意思是不必离开 ipython,我在其中运行了很多东西,所以我想回到“启用 GPU”的环境。我尝试删除 os.environ 字典中的键,但徒劳无功。
s
slfan

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

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

这是做什么的?
使用 Win,强制 TF 使用 CPU 并忽略任何 GPU。 0 或空白没有运气,但 -1 似乎可以解决问题。
为我在 Win10 x64 上工作。我也没有任何运气赢得 0 或空白,只有 -1 有效。
在 Ubuntu 上为我工作
我的机器上有两个 GPU,设置 'CUDA_VISIBLE_DEVICES' = 0/1 是指可用 GPU 的物理 ID。将其设置为 -1 会使用 CPU。
R
RACKGNOME

这样做的一个相当可分离的方法是使用

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 内核数。

intra_op_parallelism_threads 变量指示计算图中单个节点中的并行操作允许使用的线程数(内部)。而 inter_ops_parallelism_threads 变量定义跨计算图(inter)节点的并行操作可访问的线程数。

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

该操作没有 GPU 实现 没有已知或注册的 GPU 设备 需要与来自 CPU 的其他输入共同定位

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

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

参考:

ConfigProto 中的 allow_soft_placement 和 log_device_placement 等选项是什么意思?

inter_op_parallelism_threads 和 intra_op_parallelism_threads 的含义


这是一个很好的解决方案,因为仅定义“CUDA_VISIBLE_DEVICES”会导致 CUDA_ERROR_NO_DEVICE 进行大量诊断,然后再继续在 CPU 上执行。虽然......两种方法都有效!
这是唯一对我有用的一致解决方案。继续回来。
你能解释一下其他参数的含义吗?像 allow_soft_placementintra_op_parallelism_threadsinter_op_parallelism_threads
inter/intra_op_parallelism_threads 是指 CPU 还是 GPU 操作?
@bluesummers 它们与 CPU 并行化有关
E
Engineero

只需导入 tensorflow 并使用 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)

最佳答案在这里
当我设置 tf.device('/cpu:0') 时,我仍然可以看到稍后使用 nvidia-smi 分配给 python 的内存。
@CMCDragonkai 解决与否^_^?
似乎对我也不起作用,当我将它设置为使用 cpu 时仍然使用 gpu
不应该在同一个with下执行模型定义和编译吗?
s
sygi

根据 keras tutorial,您可以简单地使用与常规 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 中以 Tensorflow 作为后端来完成,而不是使用 Tensorflow 来调用 Keras 层?
我不明白你的问题。 with 内的代码可以是任何 Keras 代码。
如何使用从磁盘加载的训练模型来做到这一点?我目前正在 gpu 上进行培训,但之后想在 CPU 上进行验证
通过使用上述方法,我能够在训练过程中将训练从 gpu 切换到 cpu,其中我使用 model.save 将模型保存在两者之间,然后使用 keras.models.load_model 使用不同的 tf.device 重新加载它。如果您想训练然后在不同的设备上进行预测,这同样适用。
F
Felipe Augusto

我只是花了一些时间弄清楚。托马斯的回答并不完整。假设你的程序是 test.py,你想使用 gpu0 来运行这个程序,并保持其他 gpus 空闲。

你应该写 CUDA_VISIBLE_DEVICES=0 python test.py

注意它是 DEVICES 而不是 DEVICE


l
learner

对于使用 PyCharm 和强制 CPU 的人,您可以在运行/调试配置中的环境变量下添加以下行:

<OTHER_ENVIRONMENT_VARIABLES>;CUDA_VISIBLE_DEVICES=-1

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅