导入 tflearn 很慢
Importing tflearn is very slow
与其他模块相比,导入 tflearn 需要花费大量时间。
在新创建的虚拟环境中,只安装了 tflearn 和最小的依赖项 pip
:
import numpy as np
需要 ~0.18s
import tensorflow as tf
需要 ~0.90s
import tflearn
需要 ~3.1s(并要求我安装 h5py 和 scipy)。
按照建议安装 h5py 和 scipy 后,import tflearn
消耗的时间高达 ~3.5 秒。我怎样才能减少导入时间?
(以上所有测试都是在test.py和运行time python test.py
中多次放入语句完成的。报告时间为[报告的"real"时间time
内置于 bash.)
简答
在 Jupyter 或其他具有长期解释器会话的工具中完成初始工作,因此您无需等待那么多时间来导入。
长答案
您可以使用 python -v
来跟踪导入。我在一个原始的 python:3.6-stretch
Docker 容器中从 apt 安装 moreutils
,从 pip
安装 tensorflow
和 tflearn
...
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
会导入大量包。
哪些?
# 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
我将保留 831 行输出,但看起来 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>
难道是this from tensorflow.contrib.framework.python.ops import add_arg_scope as contrib_add_arg_scope
statement?让我们找出...
# 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:/#
嗯,看起来像!由于 Python 的导入工作方式,导入子模块必须评估整个包,并且由于 tensorflow.contrib
不使用 Tensorflow's Python lazy loader (which does mention contrib
),因此需要一段时间。
(这里的模块中曾经讨论过vendoring,但那是无关紧要的,因为:)
不幸的是,tflearn
中的其他地方也从 contrib
中导入了点点滴滴,因此消除这种依赖性不会有太大帮助。
一些导入的模块会在您开始使用它们时进行初始化,而有些则不会。 tflearn
在您导入它时进行初始化,并且由于它有很多依赖项,因此花费那么多时间也就不足为奇了。
下面的 SO QA 会给你这么长时间的优化思路。
improving speed of Python module import
祝你好运
与其他模块相比,导入 tflearn 需要花费大量时间。
在新创建的虚拟环境中,只安装了 tflearn 和最小的依赖项 pip
:
import numpy as np
需要 ~0.18simport tensorflow as tf
需要 ~0.90simport tflearn
需要 ~3.1s(并要求我安装 h5py 和 scipy)。
按照建议安装 h5py 和 scipy 后,import tflearn
消耗的时间高达 ~3.5 秒。我怎样才能减少导入时间?
(以上所有测试都是在test.py和运行time python test.py
中多次放入语句完成的。报告时间为[报告的"real"时间time
内置于 bash.)
简答
在 Jupyter 或其他具有长期解释器会话的工具中完成初始工作,因此您无需等待那么多时间来导入。
长答案
您可以使用 python -v
来跟踪导入。我在一个原始的 python:3.6-stretch
Docker 容器中从 apt 安装 moreutils
,从 pip
安装 tensorflow
和 tflearn
...
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
会导入大量包。
哪些?
# 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
我将保留 831 行输出,但看起来 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>
难道是this from tensorflow.contrib.framework.python.ops import add_arg_scope as contrib_add_arg_scope
statement?让我们找出...
# 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:/#
嗯,看起来像!由于 Python 的导入工作方式,导入子模块必须评估整个包,并且由于 tensorflow.contrib
不使用 Tensorflow's Python lazy loader (which does mention contrib
),因此需要一段时间。
(这里的模块中曾经讨论过vendoring,但那是无关紧要的,因为:)
不幸的是,tflearn
中的其他地方也从 contrib
中导入了点点滴滴,因此消除这种依赖性不会有太大帮助。
一些导入的模块会在您开始使用它们时进行初始化,而有些则不会。 tflearn
在您导入它时进行初始化,并且由于它有很多依赖项,因此花费那么多时间也就不足为奇了。
下面的 SO QA 会给你这么长时间的优化思路。
improving speed of Python module import
祝你好运