【问题标题】:Keras with Tensorflow backend - Run predict on CPU but fit on GPU带有 Tensorflow 后端的 Keras - 在 CPU 上运行预测但适合 GPU
【发布时间】:2018-07-24 20:47:17
【问题描述】:

我正在使用 keras-rl 使用 D-DQN 算法训练我的网络。我正在使用 model.fit_generator() 函数在 GPU 上运行我的训练,以允许在 GPU 进行反向传播时将数据发送到 GPU。与GPU处理数据的速度相比,我怀疑数据的生成速度太慢了。

在生成数据时,按照 D-DQN 算法的说明,我必须首先用我的模型预测 Q 值,然后将这些值用于反向传播。如果 GPU 用于运行这些预测,则意味着它们正在破坏我的数据流(我希望反向传播尽可能频繁地运行)。

有没有一种方法可以指定在哪个设备上运行特定操作?在某种程度上,我可以在 CPU 上运行预测,在 GPU 上运行反向传播。

【问题讨论】:

    标签: python tensorflow keras keras-rl


    【解决方案1】:

    也许您可以在训练结束时保存模型。然后在导入任何 keras 或 tensorflow 内容之前启动另一个 python 文件并写入os.environ["CUDA_VISIBLE_DEVICES"]="-1"。现在您应该能够加载模型并使用您的 CPU 进行预测。

    【讨论】:

    • 预测是训练的一部分,我想同时使用CPU和GPU。
    【解决方案2】:

    不看你的代码很难正确回答你的问题。

    下面的代码展示了如何列出可用设备并强制 tensorflow 使用特定设备。

    def get_available_devices():
        local_device_protos = device_lib.list_local_devices()
        return [x.name for x in local_device_protos]
    
    get_available_devices()
    
    with tf.device('/gpu:0'):
        //Do GPU stuff here
    with tf.device('/cpu:0'):
        //Do CPU stuff here
    

    【讨论】:

    • model.fit_generator() 之前执行model.predict_on_batch()with tf.device('/gpu:0') 之前,我已经尝试使用with tf.device('/cpu:0'),但它什么也没做。创建模型时是否也需要使用它?我也尝试将 tf 用作 keras.backend.tensorflow_backend 但随后 device() 不是该张量流的方法。
    • “什么也没做”是什么意思?你的意思是不管你设置什么设备,它仍然使用 GPU?
    • 是的,它与我不使用这些命令时没有什么不同,即使用 GPU 进行预测和拟合。
    • 据我从 tensorflow 文档中可以看出,这应该是这样做的方法。您可能还想在编译模型时尝试指定设备,以防万一。来自 doc 的引用:“# # 在此上下文中构建的所有操作都将被放置在 GPU 0 上”虽然很难确定“已构建”的含义。 Link: Device
    • 我只是尝试使用Graphdevice 函数而不是直接使用tf.device,并且我还在它们各自的设备上编译了模型,但我没有发现任何区别。我在keras.backend.tensorflow_backend include 中找不到Graph() 方法,所以这里直接使用tensorflow 可能是个问题。文档说N.B. The device scope may be overridden by op wrappers or other library code. For example, a variable assignment op v.assign() must be colocated with the tf.Variable v, and incompatible device scopes will be ignored.我不知道Keras是如何使用tf.Variables...
    猜你喜欢
    • 2018-09-26
    • 2020-01-20
    • 1970-01-01
    • 2018-12-10
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    相关资源
    最近更新 更多