Tensorflow:无法在s中创建会话

2024-10-01 13:41:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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: Failed to create session.

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

我看到了一个答案here,但是当我在终端中执行以下命令时

^{pr2}$

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

另外,由于我在服务器上训练我的模型,而且我对服务器没有根访问权限,所以我无法重新启动服务器或使用根访问权限清除GPU内存。现在的解决方案是什么?在


Tags: inpy模型homesessionlibpackagestensorflow
3条回答

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

内部错误:无法创建会话

原因:因为我在同一个GPU下运行多个jupyter笔记本(它们都使用tensorflow),所以slurm服务器会限制创建一个新的tensorflow会话。 问题的解决方法是停止所有的jupyter笔记本,然后一次只运行1/2个。在

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

内部:调用cuDevicePrimaryCtxRetain失败:CUDA_ERROR_OUT_OF_MEMORY;报告的总内存:12786073600

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

nvidia-smi -q

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

^{pr2}$

现在一切又顺利了。在

我使用的是Python4.5.12和python3.5,NVIDIA驱动程序390.116 也面临着同样的问题。 在我的例子中,这是由不兼容的cudatoolkit版本引起的

conda install tensorflow-gpu

安装了cudatoolkit 9.3.0和cudn7.3.x。但是,在浏览了答案here并参考了我的其他虚拟环境,其中我使用了带GPU的pytorch而没有任何问题,我推断{}将与我的驱动程序版本兼容。在

^{pr2}$

此安装来自cuda 9.0_0内部版本的cudatoolkit 9.0.0和{}。在这之后,我能够用GPU创建tensorflow会话。

现在就来杀乔布斯

  • 如果其他作业占用了GPU内存,那么按照@Preetam saha arko的建议逐个删除这些作业将释放GPU,并允许您使用GPU创建tf会话(前提是兼容性问题已经解决)
  • 要使用指定的GPU创建会话,请在从nvidia-smi中找到PID后终止前一个tf.Session()请求,并将cuda visible device设置为可用的GPU ID(本例中为0

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

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

  • 否则,如果GPU不起作用,那么在从nvidia-smi中找到PID后终止前一个tf.Session()请求,并将cuda visible device设置为undefined

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

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

相关问题 更多 >