使用TensorFlow

时间:2017-04-14 18:12:04

标签: tensorflow nvidia ubuntu-16.04

问题描述

当我在GPU上计算渐变时,我的系统挂起。我能够在没有任何问题的情况下计算CPU上的渐变。我可以毫无问题地在我的GPU上计算我的图表中的所有节点,包括我的损失函数。当我在GPU上计算渐变时,无论我使用哪种优化器,我的系统都会挂起。产生此问题的代码是:

sess = tf.Session()

# ...

cnn = CNNClass()

#...

step_size = tf.placeholder(tf.float32, name="step_size") 
global_step = tf.Variable(0, name="global_step", trainable=False) 
optimizer = tf.train.MomentumOptimizer(step_size, 0.9)

#...

# CRASHES WHEN I RUN THIS
grads_and_vars = optimizer.compute_gradients(cnn.loss)
sess.run([grads_and_vars], feed_dict)

# DOES NOT CRASH WHEN I RUN THIS
sess.run([cnn.loss])

进一步详情

我尝试在我的ConfigProto中设置gpu_options=tf.GPUOptions(per_process_gpu_memory_fraction=0.333),但这没有用。

在运行代码之前启动watch -n 0.1 nvidia-smi会显示Volatile GPU-Util在挂起之前会达到100%。

在我的CPU上计算渐变并打印出来显示正常输出(我没有得到任何NaN或0或类似的东西)。

系统信息

  • 系统:Ubuntu 16.04
  • TensorFlow安装自:binary
  • TensorFlow版本:v1.0.0-65-g4763edf-dirty 1.0.1
  • CUDA版本:8.0,V8.0.61
  • cuDNN版本:5.1
  • GPU型号和内存:NVidia GeForce GTX TITAN X(12GB)
  • 显卡驱动程序:375.39

编辑1:更新

在缩小模型后,代码在GPU上运行。

在GPU上开始计算似乎有很大的开销。当我训练一个中等大小的模型时,我可以看到这一点:挥发性GPU-Util在没有完成任何评估的情况下有一段时间达到100%,然后Volatile GPU-Util下降到大约%30并且评估循环开始相当快地运行。这不会是一个问题,除非我的系统几乎完全无法使用,直到Volatile GPU-Util下降到30%。

我认为开销与将数据放在GPU上有某种关系。有人可以解释为什么会这样吗?有没有办法防止TensorFlow在新贵阶段占用所有易失性GPU?

1 个答案:

答案 0 :(得分:1)

TensorFlow在完全控制GPU时效果最佳。为了避免系统在完全使用时挂起,最简单的方法是在将GPU用于培训时不要将GPU用于图形。