【问题标题】:Can I run Keras model on gpu?我可以在 gpu 上运行 Keras 模型吗?
【发布时间】:2018-01-21 13:38:18
【问题描述】:

我正在运行 Keras 模型,提交截止日期为 36 小时,如果我在 cpu 上训练我的模型大约需要 50 小时,有没有办法在 gpu 上运行 Keras?

我正在使用 Tensorflow 后端并在我的 Jupyter 笔记本上运行它,但没有安装 anaconda。

【问题讨论】:

  • 我发现了这个:medium.com/@kegui/… 感觉就像一个人可以在这里细读一个狭窄领域的高评分问题,然后在 Medium 上做出完整的“答案”,并从观看中赚取实际收入。跨度>
  • 适用于 AMD GPU。看到这个帖子。 stackoverflow.com/a/60016869/6117565

标签: python tensorflow keras jupyter


【解决方案1】:

使用 Tensorflow 2.5,以 @MonkeyBack 的回答为基础:

conda create --name keras_gpu keras-gpu tensorflow-gpu

# should show GPU is available
python -c "import tensorflow as tf;print('GPUs Available:', tf.config.list_physical_devices('GPU'))"

【讨论】:

    【解决方案2】:

    我在 Windows 10 上使用 Anaconda,配备 GTX 1660 Super。我首先在这个step-by-step 之后安装了CUDA 环境。不过现在 Anaconda 上有一个 keras-gpu 元包,显然不需要事先安装 CUDA 和 cuDNN 库(反正我的库已经安装了)。

    这就是我创建一个名为 keras_gpu 的专用环境的原因:

    # need to downgrade from tensorflow 2.1 for my particular setup
    conda create --name keras_gpu keras-gpu=2.3.1 tensorflow-gpu=2.0
    

    要添加 @johncasey 的答案,但对于 TensorFlow 2.0,添加此块对我有用:

    import tensorflow as tf
    from tensorflow.python.keras import backend as K
    
    # adjust values to your needs
    config = tf.compat.v1.ConfigProto( device_count = {'GPU': 1 , 'CPU': 8} )
    sess = tf.compat.v1.Session(config=config) 
    K.set_session(sess)
    

    This post 解决了我得到的set_session 错误:您需要使用 tensorflow 路径中的 keras 后端而不是 keras 本身。

    【讨论】:

      【解决方案3】:

      是的,您可以在 GPU 上运行 keras 模型。您必须先检查几件事。

      1. 您的系统有 GPU(Nvidia。因为 AMD 还不能工作)
      2. 您已安装 GPU 版本的 tensorflow
      3. 你已经安装了CUDA installation instructions
      4. 验证 tensorflow 是否使用 GPU check if GPU is working 运行

      sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

      对于 TF > v2.0

      sess = tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(log_device_placement=True))

      (感谢@nbro 和@Ferro 在 cmets 中指出这一点)

      from tensorflow.python.client import device_lib
      print(device_lib.list_local_devices())
      

      输出将是这样的:

      [
        name: "/cpu:0"device_type: "CPU",
        name: "/gpu:0"device_type: "GPU"
      ]
      

      完成所有这些后,您的模型将在 GPU 上运行:

      检查 keras(>=2.1.1) 是否使用 GPU:

      from keras import backend as K
      K.tensorflow_backend._get_available_gpus()
      

      一切顺利。

      【讨论】:

      • 我必须为此安装 python 3.5 吗?否则 tensorflow 将不起作用?
      • 没有必要。 TF 适用于 2.7 和 3.5。选择正确的 TF 版本即可。
      • 好吧,我会用 2.7,安装 3.5 时遇到问题
      • 我收到此错误 -Could not find any downloads that satisfy the requirement tensorflow in /usr/local/lib/python2.7/dist-packages Downloading/unpacking tensorflow Cleaning up... No distributions at all found for tensorflow in /usr/local/lib/python2.7/dist-packages Storing debug log for failure in /home/hyperworks/.pip/pip.log
      • K.tensorflow_backend._get_available_gpus() 在 TensorFlow 2.0 中不起作用。
      【解决方案4】:

      查看您的脚本是否在任务管理器中运行 GPU。如果不是,请怀疑您的 CUDA 版本是否适合您正在使用的 tensorflow 版本,正如其他答案已经建议的那样。

      此外,需要一个适用于 CUDA 版本的适当 CUDA DNN 库才能使用 tensorflow 运行 GPU。从here 下载/解压,并将 DLL(例如 cudnn64_7.dll)放入 CUDA bin 文件夹(例如 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin)。

      【讨论】:

        【解决方案5】:

        2.0 兼容答案:虽然上面提到的答案详细解释了如何在 Keras 模型上使用 GPU,但我想解释一下如何为 Tensorflow Version 2.0 完成它。

        要知道有多少 GPU 可用,我们可以使用以下代码:

        print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))
        

        要找出您的操作和张量分配给哪些设备, 将tf.debugging.set_log_device_placement(True) 作为程序的第一条语句。

        启用设备放置日志记录会导致打印任何张量分配或操作。例如,运行以下代码:

        tf.debugging.set_log_device_placement(True)
        
        # Create some tensors
        a = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
        b = tf.constant([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
        c = tf.matmul(a, b)
        
        print(c)
        

        给出如下所示的输出:

        在设备中执行 op MatMul /job:localhost/replica:0/task:0/device:GPU:0 tf.Tensor([[22. 28.] [49. 64.]], shape=(2, 2), dtype=float32)

        更多信息,请参考this link

        【讨论】:

        • 如果我只列出“GPU”,现在有未显示的 XLA_GPU。也许这也是 keras 看不到我的 gpu 的原因
        【解决方案6】:

        当然。如果您在 Tensorflow 或 CNTk 后端上运行,您的代码将默认在您的 GPU 设备上运行。但如果是 Theano 后端,您可以使用以下

        Theano 标志:

        “THEANO_FLAGS=device=gpu,floatX=float32 python my_keras_script.py”

        【讨论】:

          【解决方案7】:

          当然。我想你已经为 GPU 安装了 TensorFlow。

          你需要在导入 keras 后添加以下块。我正在一台有 56 个核心 cpu 和一个 gpu 的机器上工作。

          import keras
          import tensorflow as tf
          
          
          config = tf.ConfigProto( device_count = {'GPU': 1 , 'CPU': 56} ) 
          sess = tf.Session(config=config) 
          keras.backend.set_session(sess)
          

          当然,这种用法会强制执行我的机器的最大限制。您可以降低 cpu 和 gpu 消耗值。

          【讨论】:

          • 错误module 'tensorflow' has no attribute 'ConfigProto'
          • 您使用的是 tensorflow 2?我为 tf 1.X 测试了它。
          • 唯一的答案实际上表明在 gpu 上运行 keras 需要安装另一个完整的软件堆栈,从 nvidia 驱动程序到 keras 本身的“-gpu”构建,加上注意 cudnn 和 cuda 正确安装和链接
          猜你喜欢
          • 1970-01-01
          • 2021-05-04
          • 1970-01-01
          • 2022-01-10
          • 2019-12-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-16
          相关资源
          最近更新 更多