在屏幕会话中训练在Keras中实现的神经网络时,我似乎遇到了Theano的竞争条件。
我进行如下操作。我ssh到我正在使用的计算集群(我是而不是的根用户)。
然后我运行:
screen -S model1
然后,一旦进入这个屏幕会话,我就运行训练模型的Python脚本。我分离屏幕(Ctrl+A+D),当我执行screen -r时,一切正常。但是,如果在运行screen -r之前退出ssh会话,并在重新登录时运行screen -r,则会得到以下错误:
compilelock.py", line 91, in get_lock
File "~/.local/lib/python2.7/site-packages/theano/gof/compilelock.py", line 275, in lock
OSError: [Errno 13] Permission denied: '~/.theano/compiledir_Linux-3.11--generic-x86_64-with-Ubuntu-13.10-saucy-x86_64-2.7.5+-64/lock_dir'
Error in sys.exitfunc:
Traceback (most recent call last):
File "/usr/lib/python2.7/atexit.py", line 24, in _run_exitfuncs
func(*targs, **kargs)
File "~/.local/lib/python2.7/site-packages/theano/gof/cmodule.py", line 1344, in _on_atexit
File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__
return self.gen.next()
File "~/.local/lib/python2.7/site-packages/theano/gof/compilelock.py", line 54, in lock_ctx
File "~/.local/lib/python2.7/site-packages/theano/gof/compilelock.py", line 91, in get_lock
File "~/.local/lib/python2.7/site-packages/theano/gof/compilelock.py", line 275, in lock
OSError: [Errno 13] Permission denied: '~/.theano/compiledir_Linux-3.11--generic-x86_64-with-Ubuntu-13.10-saucy-x86_64-2.7.5+-64/lock_dir'
有人知道为什么会这样吗?有趣的是,只有当我登出并在登录后尝试运行screen -r时才会发生这种情况。
我猜您的主目录位于某种网络文件系统(例如AFS)上。如果是这样,一旦会话结束,文件系统安全凭据就会失效,并且进程(尽管它继续在屏幕内运行)不再具有处理Theano缓存目录~/.theano
中的文件的权限。如果这个猜想是正确的,那么这个问题就不是一个竞争条件。
如果问题与AFS凭据过期有关,那么解决方案是使用kinit
命令的凭据缓存(参见http://web.mit.edu/kerberos/krb5-1.12/doc/user/user_commands/kinit.html中的-c
选项)。