Tensorflow:无法在服务器中创建会话

时间:2018-01-30 05:41:57

标签: python tensorflow

我在Keras开发了一个模型并训练了很多次。一旦我强行停止模型的训练,从那时起我就会收到以下错误:

Traceback (most recent call last):
  File "inception_resnet.py", line 246, in <module>
    callbacks=[checkpoint, saveEpochNumber])   ##
  File "/home/eh0/E27890/anaconda3/lib/python3.5/site-packages/keras/legacy/interfaces.py", line 87, in wrapper
    return func(*args, **kwargs)
  File "/home/eh0/E27890/anaconda3/lib/python3.5/site-packages/keras/engine/training.py", line 2042, in fit_generator
    class_weight=class_weight)
  File "/home/eh0/E27890/anaconda3/lib/python3.5/site-packages/keras/engine/training.py", line 1762, in train_on_batch
    outputs = self.train_function(ins)
  File "/home/eh0/E27890/anaconda3/lib/python3.5/site-packages/keras/backend/tensorflow_backend.py", line 2270, in __call__
    session = get_session()
  File "/home/eh0/E27890/anaconda3/lib/python3.5/site-packages/keras/backend/tensorflow_backend.py", line 163, in get_session
    _SESSION = tf.Session(config=config)
  File "/home/eh0/E27890/anaconda3/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 1486, in __init__
    super(Session, self).__init__(target, graph, config=config)
  File "/home/eh0/E27890/anaconda3/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 621, in __init__
    self._session = tf_session.TF_NewDeprecatedSession(opts, status)
  File "/home/eh0/E27890/anaconda3/lib/python3.5/contextlib.py", line 66, in __exit__
    next(self.gen)
  File "/home/eh0/E27890/anaconda3/lib/python3.5/site-packages/tensorflow/python/framework/errors_impl.py", line 466, in raise_exception_on_not_ok_status
    pywrap_tensorflow.TF_GetCode(status))
tensorflow.python.framework.errors_impl.InternalError: Failed to create session.

所以错误实际上是

  

tensorflow.python.framework.errors_impl.InternalError:失败   创建会话。

最有可能的是,GPU内存仍然被占用。我甚至无法创建一个简单的tensorflow会话。

我看到了答案here,但是当我在终端

中执行以下命令时
export CUDA_VISIBLE_DEVICES=''

在没有GPU加速的情况下开始模型训练。

另外,当我在服务器上训练我的模型并且我没有对服务器的root访问权限时,我无法重启服务器或清除具有root访问权限的GPU内存。现在的解决方案是什么?

3 个答案:

答案 0 :(得分:6)

我在this question的评论中找到了解决方案。

nvidia-smi -q

这给出了占用GPU内存的所有进程(及其PID)的列表。我使用

逐个杀死它们
kill -9 PID

现在一切都在顺利进行。

答案 1 :(得分:0)

我将Anaconda 4.5.12与python 3.5,NVIDIA Driver 390.116结合使用 并且也面临着同样的问题。 就我而言,这是由于cudatoolkit版本不兼容

conda install tensorflow-gpu

使用cudnn 7.3.x安装了cudatoolkit 9.3.0。但是,在回答了here并提到了我在pytorch和GPU一起使用而没有任何问题的其他虚拟环境之后,我推断cudatookit 9.0.0将与我的驱动程序版本兼容。

conda install cudatoolkit==9.0.0

这已安装cudatoolkit 9.0.0版的cudnn 7.3.0cuda 9.0_0。之后,我可以使用GPU创建张量流会话。

现在可以选择取消工作了

  • 如果您有其他工作占用了GPU内存,则按照@Preetam saha arko的建议将其一一杀死,将释放GPU,并可以让您与GPU建立tf会话(前提是解决了兼容性问题)已经)
  • 要创建具有指定GPU的会话,请从tf.Session()中找到PID,然后终止先前的nvidia-smi请求,并将cuda可见设备设置为可用的GPU ID(本示例为0

    import os os.environ["CUDA_VISIBLE_DEVICES"]='0'

    然后使用tf.Session可以与指定的GPU设备创建会话。

  • 否则,如果GPU无法正常工作,则在tf.Session()中找到PID后,终止先前的nvidia-smi请求,并将cuda可见设备设置为undefined

    import os os.environ["CUDA_VISIBLE_DEVICES"]=''

    然后使用tf.Session可以与CPU建立会话。

答案 2 :(得分:0)

在集群上工作时,我遇到了类似的问题。当我将作业脚本提交到Slurm服务器时,它可以正常运行,但是在Jupytyter笔记本上训练模型时,会出现以下错误:

内部错误:创建会话失败

原因:这是因为我在同一GPU下运行多个jupyter笔记本(所有笔记本均使用tensorflow),所以Slurm服务器将限制创建新的tensorflow会话。 通过停止所有jupyter笔记本,然后一次仅运行一台/两台笔记本,可以解决该问题。

以下是jupyter笔记本的日志错误:

内部:对cuDevicePrimaryCtx的调用失败保留:CUDA_ERROR_OUT_OF_MEMORY;报告的总内存:12786073600