Python Theano需要几分钟来启动在GPU上运行的脚本

Python Theano需要几分钟来启动在GPU上运行的脚本,python,gpgpu,theano,Python,Gpgpu,Theano,我启动一个在GPU上运行的脚本,如下所示: THEANO_FLAGS=mode=FAST_RUN,device=gpu0,floatX=float32,base_compiledir=../../temp python t.py 有时它甚至需要几分钟才能开始:脚本t.py的第一行是一条打印语句(即print('start')),几分钟前它不会显示出来 如果使用CPU,则会立即显示打印语句: THEANO_FLAGS=mode=FAST_RUN,device=cpu,floatX=float32

我启动一个在GPU上运行的脚本,如下所示:

THEANO_FLAGS=mode=FAST_RUN,device=gpu0,floatX=float32,base_compiledir=../../temp python t.py
有时它甚至需要几分钟才能开始:脚本
t.py
的第一行是一条打印语句(即
print('start')
),几分钟前它不会显示出来

如果使用CPU,则会立即显示打印语句:

THEANO_FLAGS=mode=FAST_RUN,device=cpu,floatX=float32,base_compiledir=../../temp python t.py
我预先使用
sudopkill-9python
杀死了所有Python进程。运行
nvidia smi
表明,在运行我的脚本之前,没有进程使用任何GPU。(我使用nVidia GPU,特别是nVidia GeForce GTX Titan X)

我注意到这个问题出现在屏幕会话(使用)中,它是在一段时间前创建的(似乎超过半天)。终止screen会话并创建一个新会话可以解决这个问题。然而,我不明白为什么它能解决这个问题

什么可以解释这个问题


一些时间:

使用Python脚本:

import time
print('start import theano')
theano_import_start_time = time.time()
import theano
theano_import_duration = time.time() - theano_import_start_time
print('done import theano')
print('theano_import_duration: {0} seconds'.format(theano_import_duration))
使用以下命令运行:

francky@server:/scratch1/a/b$ THEANO_FLAGS=mode=FAST_RUN,device=gpu0,floatX=float32,base_compiledir=../../temp_compilation python -u test_import_theano.py
我得到:

start import theano
Using gpu device 0: GeForce GTX TITAN X (CNMeM is disabled)
done import theano
theano_import_duration: 221.107403994 seconds
221秒对于导入库来说是相当长的时间。如果我关闭屏幕并创建一个新屏幕,导入时间大约为1.1秒


慢度似乎是可以重现的:即使我只运行了一次导入操作,它仍然需要大约220秒(除非我关闭并创建一个新屏幕)。另外,我也不会清空
base\u compiledir

如果清空
base\u compiledir
Theano标志指向的目录并启动脚本,那么导入Theano将花费异常长的时间,因为第一次导入Theano将导致大量编译在幕后发生。由于安装程序编译已经发生,只要在此期间未清除
base\u compiledir
,后续运行应该会更快地导入no


由于Theano必须检查缓存中是否存在所有安装编译,
import Theano
可能需要一段时间才能运行,即使是在第一次运行之后。如果
base\u compiledir
位于网络上,或者速度较慢,则尤其如此,文件系统。

如果清空由
base\u compiledir
Theano标志指向的目录并启动脚本,则导入Theano将花费异常长的时间,因为第一次导入Theano将导致大量编译在幕后发生。由于安装程序编译已经发生,只要在此期间未清除
base\u compiledir
,后续运行应该会更快地导入no


由于Theano必须检查缓存中是否存在所有安装编译,
import Theano
可能需要一段时间才能运行,即使是在第一次运行之后。如果
base\u compiledir
位于联网的或速度较慢的文件系统上,尤其如此。

print
行之前是否有
import theano
语句?如果是,暂停是在使用gpu设备0:执行由Theano自动打印的
语句之前还是之后发生?@DanielRenshaw很好,在打印语句之前有一个
导入Theano
。下次出现此问题时,我将在所有导入之前移动打印语句。它在使用gpu设备0:
语句之前暂停。这通常意味着它正在进行初步编译。
。/../temp
是在网络文件系统上还是以某种方式被重复删除?@DanielRenshaw(很抱歉延迟,问题到现在还没有再次出现)你是对的,这就是需要很长时间才能完成的
导入theano
:我尝试了
打印('start import theano');进口茶多酚;打印('done import theano')
。不涉及汇编。我认为它不会涉及网络文件系统中的文件,但即使它做到了,所有操作都是1 Gbps和本地的:这通常不是瓶颈。在
print
行之前是否有
import theano
语句?如果是,暂停是在使用gpu设备0:执行由Theano自动打印的
语句之前还是之后发生?@DanielRenshaw很好,在打印语句之前有一个
导入Theano
。下次出现此问题时,我将在所有导入之前移动打印语句。它在使用gpu设备0:
语句之前暂停。这通常意味着它正在进行初步编译。
。/../temp
是在网络文件系统上还是以某种方式被重复删除?@DanielRenshaw(很抱歉延迟,问题到现在还没有再次出现)你是对的,这就是需要很长时间才能完成的
导入theano
:我尝试了
打印('start import theano');进口茶多酚;打印('done import theano')
。不涉及汇编。我认为它不会触及网络文件系统中的文件,但即使它做到了这一点,一切都是1 Gbps和本地的:这通常不是瓶颈。谢谢。尽管如此,速度似乎是可以重现的:即使我多次运行
import theano
,它仍然需要约220秒。此外,我不清空
base\u compiledir
。关闭屏幕并创建一个新屏幕后,在不更改任何其他内容的情况下,
import theano
需要约1秒。如果编译目录位于网络文件系统上,您的凭据是否已过期?谢谢。尽管如此,速度似乎是可以重现的:即使我多次运行
import theano
,它仍然需要约220秒。此外,我不清空
base\u compiledir
。关闭屏幕并创建一个新屏幕后,在不更改任何其他内容的情况下,
import theano
需要约1秒。如果编译目录位于网络文件系统上,您的凭据是否已过期?