Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cuda 即使设备是cpu,也会发生gpu错误_Cuda_Tensorflow - Fatal编程技术网

Cuda 即使设备是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,

我正在尝试运行一个对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,
                                      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在主机端分配内存,而不是在设备端。