【发布时间】:2016-01-10 18:26:19
【问题描述】:
我启动一个在 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
我事先使用 sudo pkill -9 python 杀死了所有 Python 进程。运行 nvidia-smi 表明在运行我的脚本之前,没有进程使用任何 GPU。 (我使用 nVidia GPU,特别是 nVidia GeForce GTX Titan X)
我注意到问题出现在屏幕会话中(使用GNU 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 秒。
缓慢似乎是可重现的:即使我多次运行 import theano,它仍然需要大约 220 秒(除非我杀死并创建一个新屏幕)。另外,我不会清空base_compiledir。
【问题讨论】:
-
print行之前是否有import theano语句?如果是,暂停是发生在 Theano 自动打印的Using gpu device 0: <GPU details>语句之前还是之后? -
@DanielRenshaw 很好,在打印语句之前有一个
import theano。下次遇到此问题时,我将在所有导入之前移动打印语句。它在Using gpu device 0: <GPU details>语句之前暂停。 -
这通常意味着它正在做初步编译。
../../temp是在网络文件系统上还是以某种方式被反复删除? -
@DanielRenshaw(抱歉耽搁了,问题直到现在还没有再次出现)你是对的,这是需要很长时间才能完成的
import theano:我尝试使用print('start import theano'); import theano; print('done import theano')。不涉及编译。我不认为它涉及来自网络文件系统的文件,但即使它做了一切都是 1 Gbps 和本地:它通常不是瓶颈。