Cuda 即使设备是cpu,也会发生gpu错误
我正在尝试运行一个对GPU来说太大的网络(卷积、高速、fc、rnn)。因此,我将设备全局定义为“cpu”。仍然是在执行脚本时,在构建模型后,在初始化变量时,脚本抛出gpu错误Cuda 即使设备是cpu,也会发生gpu错误,cuda,tensorflow,Cuda,Tensorflow,我正在尝试运行一个对GPU来说太大的网络(卷积、高速、fc、rnn)。因此,我将设备全局定义为“cpu”。仍然是在执行脚本时,在构建模型后,在初始化变量时,脚本抛出gpu错误 with tf.Session() as sess: with tf.device("cpu:0"): model = CNN_FC_LANGUAGE(sess, checkpoint_dir=FLAGS.checkpoint_dir,
with tf.Session() as sess:
with tf.device("cpu:0"):
model = CNN_FC_LANGUAGE(sess, checkpoint_dir=FLAGS.checkpoint_dir,
char_embed_dim=FLAGS.char_embed_dim,
summaries_dir=FLAGS.summaries_dir,
feature_maps=eval(FLAGS.feature_maps),
kernels=eval(FLAGS.kernels),
batch_size=FLAGS.batch_size,
dropout_prob=FLAGS.dropout_prob,
forward_only=FLAGS.forward_only,
seq_length=FLAGS.seq_length,
prediction_starts=FLAGS.prediction_starts,
prediction_length=FLAGS.prediction_length,
use_char=FLAGS.use_char,
highway_layers=FLAGS.highway_layers,
rnn_size=FLAGS.rnn_size,
rnn_layer_depth=FLAGS.rnn_layer_depth,
use_batch_norm=FLAGS.use_batch_norm,
run_name=run_name,
data_dir=FLAGS.data_dir)
model.run(FLAGS.epoch, FLAGS.learning_rate, FLAGS.learning_rate_decay, FLAGS.net2net)
在所有使用的脚本中,搜索“gpu”不会给出0个结果。
另外,在创建模型时,我会打印所有的张量名称。该设备也可以打印。在这里搜索“gpu”时,我也得到了0个结果
不过,当脚本运行时,它会抛出一个CUDA错误。但如果设备被明确设置为CPU,它为什么要在GPU上分配任何内存呢
E tensorflow/stream_executor/cuda/cuda_driver.cc:1034] failed to alloc 2147483648 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: 2147483648
E tensorflow/stream_executor/cuda/cuda_driver.cc:1034] failed to alloc 1932735232 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: 1932735232
E tensorflow/stream_executor/cuda/cuda_driver.cc:1034] failed to alloc 1739461632 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: 1739461632
E tensorflow/stream_executor/cuda/cuda_driver.cc:1034] failed to alloc 1565515520 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: 1565515520
E tensorflow/stream_executor/cuda/cuda_driver.cc:1034] failed to alloc 1408964096 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: 1408964096
E tensorflow/stream_executor/cuda/cuda_driver.cc:1034] failed to alloc 4294967296 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: 4294967296
E tensorflow/stream_executor/cuda/cuda_driver.cc:1034] failed to alloc 4294967296 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: 4294967296
E tensorflow/stream_executor/cuda/cuda_driver.cc:1034] failed to alloc 4294967296 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: 4294967296
E tensorflow/stream_executor/cuda/cuda_driver.cc:1034] failed to alloc 4294967296 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: 4294967296
Killed
有什么想法吗?Thx
编辑:同样在构建图tensorflow echos时:
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with properties:
name: GeForce GTX 1050 Ti
major: 6 minor: 1 memoryClockRate (GHz) 1.468
pciBusID 0000:04:00.0
Total memory: 3.94GiB
Free memory: 3.64GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0: Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1050 Ti, pci bus id: 0000:04:00.0)
但是为什么呢?我告诉它只使用cpu,对吗?通过调用Cudamalochost分配固定内存。 此方法不分配全局GPU内存,内存在主机端分配,但具有一些属性,允许通过PCI Express进行更快的复制
此外,cudaMallocHost需要连续内存,可能您的内存被分割成小的稀疏分配,cudaMalloc会失败 通过调用cudamalochost分配固定内存。 此方法不分配全局GPU内存,内存在主机端分配,但具有一些属性,允许通过PCI Express进行更快的复制
此外,cudaMallocHost需要连续内存,可能您的内存被分割成小的稀疏分配,cudaMalloc会失败 如果GPU运行时(包括设备和分配器)可用,则TensorFlow的GPU版本将始终尝试初始化GPU运行时(包括设备和分配器),并且您看到的错误来自分配主机(即CPU)内存,如果您尝试使用GPU,则可以更有效地访问这些内存 为了避免使用任何GPU资源,可以在启动Python时设置
CUDA\u VISIBLE\u DEVICES
环境变量。假设您的代码位于名为my_script.py
的文件中:
# An empty CUDA_VISIBLE_DEVICES will hide all GPUs from TensorFlow.
$ CUDA_VISIBLE_DEVICES="" python my_script.py
如果GPU运行时(包括设备和分配器)可用,则TensorFlow的GPU版本将始终尝试初始化GPU运行时(包括设备和分配器),并且您看到的错误来自分配主机(即CPU)内存,如果您尝试使用GPU,可以更有效地访问这些内存 为了避免使用任何GPU资源,可以在启动Python时设置
CUDA\u VISIBLE\u DEVICES
环境变量。假设您的代码位于名为my_script.py
的文件中:
# An empty CUDA_VISIBLE_DEVICES will hide all GPUs from TensorFlow.
$ CUDA_VISIBLE_DEVICES="" python my_script.py
你试过运行一个小问题吗?而且,第一个数字
2147483648
是2^31。你确定要初始化所有内容吗?当我运行较小的问题时,脚本运行正常。但它可能仍然在GPU上。。。此外,我还编辑了一些其他内容,以显示gpu的参与。见上文。ThxIt可以很好地处理较小的问题,因为您只请求有效的块大小。什么是CNN语言?这是什么图书馆?他们的文件怎么说?主机代码使用什么语言?CNN_FC_语言是一个用python编写的类,它使用tensorflow的c++代码。他们的文档说,如果您使用tf.device(“cpu:0”):那么就根本不应该进行GPU分配。(我希望我理解了你的问题并回答了他们)你试过运行一个较小的问题吗?而且,第一个数字2147483648
是2^31。你确定要初始化所有内容吗?当我运行较小的问题时,脚本运行正常。但它可能仍然在GPU上。。。此外,我还编辑了一些其他内容,以显示gpu的参与。见上文。ThxIt可以很好地处理较小的问题,因为您只请求有效的块大小。什么是CNN语言?这是什么图书馆?他们的文件怎么说?主机代码使用什么语言?CNN_FC_语言是一个用python编写的类,它使用tensorflow的c++代码。他们的文档说,如果您使用tf.device(“cpu:0”):那么就根本不应该进行GPU分配。(我希望我理解了你的问题并回答了他们)我想我的问题更像是一个时态流问题。Tensorflow不应在GPU上分配任何op,因此cudaMalloc的整个问题不应相关。还是我完全错了?我编辑了我的答案,cudaMallocHost在主机端分配内存,而不是在设备端。我想我的问题更像是tensorflow问题。Tensorflow不应在GPU上分配任何op,因此cudaMalloc的整个问题不应相关。还是我完全错了?我已经编辑了我的答案,cudaMallocHost在主机端分配内存,而不是在设备端。