【问题标题】:Tensorflow-gpu runs out of host memory after exactly one epochTensorflow-gpu 在恰好一个 epoch 后耗尽主机内存
【发布时间】:2018-04-08 11:45:48
【问题描述】:

我一直在尝试在提供的 horse2zebra 数据集上运行 cyclegan-1 模型 (https://github.com/leehomyc/cyclegan-1) 以测试我的 tensorflow-gpu 安装。

起初一切似乎都正常,直到第一批结束,当我的系统冻结一分钟并出现此错误时:

2017-10-26 15:23:10.103303: E tensorflow/stream_executor/cuda/cuda_driver.cc:955] failed to alloc 8589934592 bytes on host: CUDA_ERROR_OUT_OF_MEMORY
2017-10-26 15:23:10.103321: W ./tensorflow/core/common_runtime/gpu/pool_allocator.h:195] could not allocate pinned host memory of size: 8589934592
2017-10-26 15:23:10.103592: E tensorflow/stream_executor/cuda/cuda_driver.cc:955] failed to alloc 7730940928 bytes on host: CUDA_ERROR_OUT_OF_MEMORY
2017-10-26 15:23:10.103599: W ./tensorflow/core/common_runtime/gpu/pool_allocator.h:195] could not allocate pinned host memory of size: 7730940928
./run_cyclegan_oct_26_2017: line 1: 15025 Killed                  python3 -m CycleGAN_TensorFlow.main --to_train=2 --log_dir=CycleGAN_TensorFlow/output/cyclegan/exp_01 --config_filename=CycleGAN_TensorFlow/configs/exp_01.json --checkpoint_dir=CycleGAN_TensorFlow/output/cyclegan/exp_01/20171026-005834

我搜索了类似的问题,认为这是由于 tensorflow 试图分配用于系统进程的 RAM 造成的。

但是,在终止 x 服务器并从 tty 运行后,我在完全相同的地方遇到了同样的错误:就在它完成处理第一批之后。

似乎 tensorflow 正在尝试分配大约 8GB,尽管这比我的系统内存要少。

问题是我需要限制 Tensorflow 的内存使用吗?我已经阅读了很多关于限制其 GPU 内存使用而不是 RAM 的内容。

我的设置:

  • 内存 15.6 GiB
  • 处理器 Intel core i5-4440 CPU @ 3.10Ghz x 4
  • 显卡 GeForce GTX 1060 6GB/PCIe/SSE2
  • 操作系统类型 64 位
  • 充足的磁盘空间
  • 使用python3

谢谢!

彼得

【问题讨论】:

  • 我是 Tensorflow 的新手,但我很确定 CUDA_ERROR_OUT_OF_MEMORY 表示您的 GPU 内存不足,而不是对您的 RAM 的引用。您的显卡有 6GB 内存,您正在尝试分配 8.5GB 和 7.7.GB。
  • 其他一些帖子说“主机”内存意味着 RAM,但我可能是错的。不过,我不确定在这两种情况下我会做什么。
  • 在您的第一个 epoch 之后,您是否尝试检查比您的小批量大得多的验证数据集?
  • 我不这么认为;我只是想在不做任何更改的情况下运行模型。
  • 在我的情况下,我在验证数据集上的批大小确实比训练大,回想起来很明显,但我需要提示。

标签: tensorflow tensorflow-gpu


【解决方案1】:

我在寻找类似问题的原因时发现了这个问题:程序可以在训练期间运行,但在尝试使用tf.train.saver.save 保存模型时得到CUDA_ERROR_OUT_OF_MEMORY。我在这里发布我的解决方案供其他人参考。

对于我的问题,原因是允许在线程中打开的文件的上限。因为我在数据生成器中打开了太多文件而没有关闭它们,所以我达到了上限(默认 1024)。这会导致无法打开模型文件进行写入。问题通过increase the upper limit 解决或保存前关闭所有文件。我花了很长时间才弄清楚这一点,因为错误消息与文件 I/O 无关:(

不确定tf.train_and_evaluate 是否会在评估前保存文件。但是您可以检查的一件事是确保输出文件(例如模型)是否可以正确打开。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-13
    • 2021-02-24
    • 2021-11-01
    • 2017-01-11
    • 1970-01-01
    • 2017-12-12
    • 2021-09-03
    • 2017-08-11
    相关资源
    最近更新 更多