张量流。同一台机器和同一型号上的一组 GPU 运行良好,另一组出现 OOM 错误

Posted

技术标签:

【中文标题】张量流。同一台机器和同一型号上的一组 GPU 运行良好,另一组出现 OOM 错误【英文标题】:Tensorflow. One set of GPUs on same machine and same model work well, another gets OOM error 【发布时间】:2017-09-11 09:56:54 【问题描述】:

我正在使用多个 GPU (num_gpus = 4) 来训练一个具有多个塔的模型。该模型在一组 GPU 上训练良好:CUDA_VISIBLE_DEVICES = 0,1,2,3,而在第一次图形评估期间它遇到了 OOM 问题,CUDA_VISIBLE_DEVICES = 0,1,4,5

有人知道为什么会这样吗?

以下选项用于创建会话

session_config=tf.ConfigProto(
  allow_soft_placement=True,
  log_device_placement=False)
session_config.gpu_options.per_process_gpu_memory_fraction = 0.94
session_config.gpu_options.allow_growth=False

批量大小,已经超小了,= 3

系统信息

张量流 1.0 库达 8.0 Ubuntu 14.04.5 LTS 所有 GPU:GeForce GTX 1080

日志

名称:GeForce GTX 1080 主要:6 次要:1 memoryClockRate (GHz) 1.7335 pciBusID 0000:07:00.0 总内存:7.92GiB 可用内存:7.81GiB W tensorflow/stream_executor/cuda/cuda_driver.cc:590] 创建上下文 当一个当前处于活动状态时;现有:0xcc4593a0 我 tensorflow/core/common_runtime/gpu/gpu_device.cc:885] 找到设备 1 具有属性:名称:GeForce GTX 1080 主要:6 次要:1 memoryClockRate (GHz) 1.7335 pciBusID 0000:08:00.0 总内存: 7.92GiB 可用内存:7.81GiB W tensorflow/stream_executor/cuda/cuda_driver.cc:590] 创建上下文 当一个当前处于活动状态时;现有:0xd2404670 我 tensorflow/core/common_runtime/gpu/gpu_device.cc:885] 找到设备 2 具有属性:名称:GeForce GTX 1080 主要:6 次要:1 memoryClockRate (GHz) 1.7335 pciBusID 0000:18:00.0 总内存: 7.92GiB 可用内存:7.81GiB W tensorflow/stream_executor/cuda/cuda_driver.cc:590] 创建上下文 当一个当前处于活动状态时;现有:0xd25591b0 我 tensorflow/core/common_runtime/gpu/gpu_device.cc:885] 找到设备 3 具有属性:名称:GeForce GTX 1080 主要:6 次要:1 memoryClockRate (GHz) 1.7335 pciBusID 0000:1c:00.0 总内存: 7.92GiB 可用内存:7.81GiB I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA:0 1 2 3 I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0: Y Y Y Y I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 1: Y Y Y Y I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 2: Y Y Y Y I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 3: Y Y Y Y I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] 创建 TensorFlow 设备 (/gpu:0) -> (设备: 0, 名称: GeForce GTX 1080, pci 总线 ID:0000:07:00.0) 我 tensorflow/core/common_runtime/gpu/gpu_device.cc:975] 创建 TensorFlow 设备 (/gpu:1) -> (设备: 1, 名称: GeForce GTX 1080, pci 总线 ID:0000:08:00.0) 我 tensorflow/core/common_runtime/gpu/gpu_device.cc:975] 创建 TensorFlow 设备 (/gpu:2) -> (设备: 2, 名称: GeForce GTX 1080, pci 总线 ID:0000:18:00.0) 我 tensorflow/core/common_runtime/gpu/gpu_device.cc:975] 创建 TensorFlow 设备 (/gpu:3) -> (设备: 3, 名称: GeForce GTX 1080, pci 总线 ID:0000:1c:00.0)

I tensorflow/core/common_runtime/gpu/pool_allocator.cc:247] PoolAllocator:47441个get请求后,put_count=8461 eviction_count=1000 eviction_rate=0.118189 和不满意的分配 率=0.844839 我 tensorflow/core/common_runtime/gpu/pool_allocator.cc:259] 提高 pool_size_limit_ 从 100 到 110 W tensorflow/core/common_runtime/bfc_allocator.cc:217] 内存不足 试图分配 2.33GiB。来电者表示这不是 失败,但可能意味着如果更多 内存可用。 W tensorflow/core/common_runtime/bfc_allocator.cc:217] 内存不足 试图分配 3.08GiB。来电者表示这不是 失败,但可能意味着如果更多 内存可用。 W tensorflow/core/common_runtime/bfc_allocator.cc:217] 内存不足 试图分配 3.08GiB。来电者表示这不是 失败,但可能意味着如果更多 内存可用。 W tensorflow/core/common_runtime/bfc_allocator.cc:217] 内存不足 试图分配 3.98GiB。来电者表示这不是 失败,但可能意味着如果更多 内存可用。 W tensorflow/core/common_runtime/bfc_allocator.cc:217] 内存不足 试图分配 3.98GiB。来电者表示这不是 失败,但可能意味着如果更多 内存可用。 W tensorflow/core/common_runtime/bfc_allocator.cc:217] 内存不足 试图分配 2.54GiB。来电者表示这不是 失败,但可能意味着如果更多 内存可用。 W tensorflow/core/common_runtime/bfc_allocator.cc:217] 内存不足 试图分配 2.54GiB。来电者表示这不是 失败,但可能意味着如果更多 内存可用。 W tensorflow/core/common_runtime/bfc_allocator.cc:217] 内存不足 试图分配 3.17GiB。来电者表示这不是 失败,但可能意味着如果更多 内存可用。 W tensorflow/core/common_runtime/bfc_allocator.cc:217] 内存不足 试图分配 2.68GiB。来电者表示这不是 失败,但可能意味着如果更多 内存可用。 W tensorflow/core/common_runtime/bfc_allocator.cc:217] 内存不足 试图分配 3.86GiB。来电者表示这不是 失败,但可能意味着如果更多 内存可用。一世 张量流/核心/common_runtime/gpu/pool_allocator.cc:247] PoolAllocator:2698个get请求后,put_count=8709 evicted_c

【问题讨论】:

【参考方案1】:

日志是运行良好还是运行不良?那里没有错误,只有警告。

如果您的系统有双根联合体,则 0、1、4、5 可能位于不同的分区上。 DMA 矩阵将显示这一点。同一根复合体上的 GPU 之间的复制通常比跨它们快。如果由于副本较长,副本必须在张量参考上保持更长时间,您可能会看到峰值内存使用量增加,如果您的模型太接近限制,则会导致 OOM。当然,这只是一个理论,没有进一步的调试信息,很难确定。

【讨论】:

以上是关于张量流。同一台机器和同一型号上的一组 GPU 运行良好,另一组出现 OOM 错误的主要内容,如果未能解决你的问题,请参考以下文章

使用张量流矩阵乘法测试 GPU

使用多个 GPU 运行 LSTM 会得到“输入和隐藏张量不在同一设备上”

C#:让我的程序在同一台机器上的正在运行的进程上调用方法

Cupy add 在同一台机器上的不同环境中以不同的方式工作

为 GPU 编译张量流示例自定义操作

张量流的 XLA_GPU 和 XLA_CPU 是啥