与其他模块相比,导入tflearn需要花费大量时间。
在新创建的虚拟环境中,该环境仅通过pip
安装了tflearn并具有最小的依赖关系:
import numpy as np
大约需要0.18s import tensorflow as tf
大约需要0.90s import tflearn
大约需要3.1秒的时间(并要求我安装h5py和scipy)。按照建议安装h5py和scipy之后,import tflearn
消耗的时间最多达到3.5s。如何减少导入时间?
(以上所有测试都是通过将语句放入test.py并运行time python test.py
多次来完成的。报告的时间是time
内置的bash报告的“实际”时间。)< / p>
答案 0 :(得分:2)
在Jupyter或其他具有长期解释程序会话的工作中进行初始工作,因此您不需要等待太多的导入工作。
您可以使用python -v
来跟踪导入。我从apt安装了moreutils
,在tensorflow
原始Docker容器中安装了tflearn
的{{1}}和pip
。
python:3.6-stretch
很明显,导入root@10e4bcd91377:/# python -v -c 'import tensorflow' 2>&1 | ts '%H:%M:%.S' | grep 'import ' | wc -l
954
root@10e4bcd91377:/# python -v -c 'import tflearn' 2>&1 | ts '%H:%M:%.S' | grep 'import ' | wc -l
1768
会导入很多软件包。
哪一个?
tflearn
我将保留831行输出,但是看起来# python -v -c 'import tflearn' 2>&1 | grep 'import ' | cut -f1 -d# | sort | uniq > tflearn-imports.txt
# python -v -c 'import tensorflow' 2>&1 | grep 'import ' | cut -f1 -d# | sort | uniq > tensorflow-imports.txt
# diff --suppress-common-lines tensorflow-imports.txt tflearn-imports.txt
导入了tflearn
的所有内容,这花费了相当长的时间,并且导入tensorflow.contrib
本身并没有什么作用。有了这些信息,我们可以查看原始的tensorflow
输出–看起来python -v -c 'import tflearn' 2>&1
是导入tflearn.variables
...的模块……
tensorflow.contrib
# <snip>
import 'tensorflow.contrib.summary.summary'
import 'tensorflow.contrib'
import 'tflearn.variables'
import 'tflearn.config'
# <snip>
Ayup,看起来像它!由于Python导入的工作方式,导入子模块必须评估整个程序包,并且由于# time python -v -c 'from tensorflow.contrib.framework.python.ops import add_arg_scope as contrib_add_arg_scope' 2>&1 | grep 'import ' | wc -l
1727
real 0m4.010s
user 0m3.820s
sys 0m0.410s
root@10e4bcd91377:/#
不使用Tensorflow's Python lazy loader (which does mention contrib
),因此需要一段时间。
(这里在模块中曾经有过关于供应商的讨论,但这是不相关的,因为:)
不幸的是,tensorflow.contrib
中还有其他地方也从tflearn
导入了点点滴滴,因此清除这种依赖关系没有多大帮助。
答案 1 :(得分:0)
有些导入的模块在开始使用它们时会初始化,有些则不会。导入时tflearn
的初始化,由于它具有很多依赖性,因此花费这么多时间也就不足为奇了。
下面的SO QA将为您提供长时间的优化想法。
improving speed of Python module import
祝你好运