【问题标题】:TensorFlow CUDA_ERROR_OUT_OF_MEMORYTensorFlow CUDA_ERROR_OUT_OF_MEMORY
【发布时间】:2017-04-19 18:25:18
【问题描述】:

我正在尝试在 TensorFlow 中构建一个大型 CNN,并打算在多 GPU 系统上运行它。我采用了“塔式”系统并为两个 GPU 拆分批次,同时将变量和其他计算保留在 CPU 上。我的系统有 32GB 内存,但是当我运行代码时出现错误:

E tensorflow/stream_executor/cuda/cuda_driver.cc:924] failed to alloc 17179869184 bytes on host: CUDA_ERROR_OUT_OF_MEMORY
W ./tensorflow/core/common_runtime/gpu/pool_allocator.h:195] could not allocate pinned host memory of size: 17179869184
Killed

我已经看到,如果我将 CUDA 设备隐藏到 TensorFlow,代码可以工作(尽管非常缓慢),因此它不使用 cudaMallocHost()...

感谢您的宝贵时间。

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    有一些选择:

    1- 减少批量大小

    2- 使用内存增长:

    config = tf.ConfigProto()
    config.gpu_options.allow_growth = True
    session = tf.Session(config=config, ...)
    

    3- 不要分配整个 GPU 内存(仅 90%):

    config = tf.ConfigProto()
    config.gpu_options.per_process_gpu_memory_fraction = 0.9
    session = tf.Session(config=config, ...)
    

    【讨论】:

    • 感谢您的回答,但两种解决方案都不起作用,因为它们只影响 GPU 内存...我的错误是关于主机内存...
    • 我进一步发现我的错误是在sess.run(tf.global_variables_initializer())之后立即发生的
    • 如果你的最后一层是全连接层,那么减少它的过滤器数量(通道),至少尝试一下
    • 事实证明我的模型不正确,并且在第一个全连接层上获得了大量输入,从而大大增加了网络空间。不过感谢您的提示!
    【解决方案2】:

    将代码中的 batch_size 减少到 100 就可以了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-25
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-08
      • 1970-01-01
      相关资源
      最近更新 更多