在 tensorflow 2 中导入 tensorflow 模块很慢

Posted

技术标签:

【中文标题】在 tensorflow 2 中导入 tensorflow 模块很慢【英文标题】:Import tensorflow module is slow in tensorflow 2 【发布时间】:2020-04-12 03:17:31 【问题描述】:

相关:Import TensorFlow contrib module is slow in TensorFlow 1.2.1 也:What can cause the TensorFlow import to be so slow?

我正在使用 ssd 并导入 TensorFlow。我有 4 ghz 8 核 pc 和 16 gb 内存(处理器 AMD FX(tm)-8350 八核处理器,4000 Mhz,4 核,8 逻辑处理器)。 TensorFlow 导入需要 10-12 秒。

有什么方法可以选择性地导入 TensorFlow 的一部分?

RAM 磁盘有帮助吗?

还有没有更多的工作正在做这样的事情或:Slow to import tensorflow.contrib with Python 3 because inspect.stack is slow #11829?

编辑:Windows 8.1 上的 Python 3.6.8 :: Anaconda, Inc.。 Dos box、cygwin bash 的速度慢到 12 秒。 Vs code bash/power shell 最快为 8 秒。 在 .py 文件中导入,例如: import tensorflow as tf. 不确定是什么环境。

编辑 2:

PS D:\ray\dev\ml\ss1> conda info --envs
# conda environments:
#
base                  *  D:\Anaconda3
first                    D:\Anaconda3\envs\first
                         d:\Anaconda3
first                    d:\Anaconda3\envs\first

编辑 3:使用下面的代码,我在命令提示符下得到 9-10 秒:

(tf2) D:\ray\dev\ml\ss1>python timeimport.py
 import tensorflow: 1 units, 9.796 seconds. 0.1 units/second.
version: 2.0.0

(tf2) D:\ray\dev\ml\ss1>python timeimport.py
 import tensorflow: 1 units, 9.448 seconds. 0.11 units/second.
version: 2.0.0

(tf2) D:\ray\dev\ml\ss1>python timeimport.py
 import tensorflow: 1 units, 9.421 seconds. 0.11 units/second.
version: 2.0.0


from __future__ import absolute_import, division, print_function, unicode_literals
from contextlib import contextmanager
from timeit import default_timer as timer
@contextmanager
def timing(description: str,units=1,title="",before="") -> None:
    if before!="":
        print(before,flush=True)
    start = timer()
    yield
    dt = timer() - start
    frequency=0 if units is None else (units/dt)
    if units is None:
        if title is None: print(f"description: dt seconds.",flush=True)
        else: print(f"title description: dt seconds.",flush=True)
    else: 
        #"0:.2f".format(a)
        dt=round(dt,3)
        frequency=round(frequency,2)
        print(f"title description: str(units) units, dt seconds. str(frequency) units/second.",flush=True) 
    return dt
with timing("import tensorflow",1):
    import tensorflow as tf
print("version:",tf.__version__)

编辑 4:打开 Windows degender,我得到 8-9 秒而不是 9-10 秒。

编辑 5:我找到了解决方法:

制作一个笔记本:

import tensorflow as tf
print(tf.__version__)
import tensorflow_datasets as tfds
import code.py

然后在你的 code.py 中:

print("enter imported code")
import tensorflow as tf
print(tf.__version__)

# !pip install -q tensorflow-datasets
import tensorflow_datasets as tfds
import matplotlib.pyplot as plt
import numpy as np

#tfds.list_builders()
ds = tfds.load('mnist', split='train', shuffle_files=True)
...

所以你运行笔记本一次,它需要 10 秒。下一次就顺风顺水了。

【问题讨论】:

对于我的 linux 机器,第一次导入总是很慢,但是任何后续的导入(即跨不同的 Python CLI 实例)都是立即的。您是否也观察到了类似的行为? 我打瞌睡。请参阅编辑 3。 您可以尝试再次禁用 Windows Defender 和任何其他防病毒软件和基准测试吗?另外,您使用的是 windows susbsistem for linux (WSL) 吗? win 8.1 - afaik,我没有使用任何 Windows 子系统。 我找到了解决方法,请参阅编辑 5。 【参考方案1】:

我想首先说我使用的是 3 Ghz 四核,并且在 Python 中导入 TensorFlow 几乎不需要十秒钟。您能否详细说明您在导入它时遇到的问题(即终端/控制台/命令提示符/Anaconda 等中的 Windows/Mac/Linux)? 您没有指定如何尝试导入 Tensorflow,但考虑到您使用 python-3.x 对其进行了标记,我假设您正在使用 Python 导入 Tensorflow。我确信这不会是一个流行的答案,但也许可以考虑将 Tensorflow 与 c++ 之类的编译语言一起使用。众所周知,Python 等解释型语言比编译型语言慢得多,如果速度至关重要,那么在其原生语言中使用 TensorFlow 似乎是显而易见的。

【讨论】:

【参考方案2】:

当我从办公室的 Thinkpad T560(集成 GPU 的 i7 6600U)导入 tensorflow 时,需要 10 多秒(约 15 秒)。 但最近我在家里买了一台新的笔记本电脑联想 Y7000(i7 10750H 和 GTX 1650 卡,三星 SSD),我安装了 CUDA 依赖项并能够成功运行 TensorFlow 和 CUDA。

我想说,我现在感觉自己从一辆旧马车换成了一辆子弹头列车。

【讨论】:

nice cpu,你的 CPU 比我的好两倍:cpubenchmark.net/compare/… - 我最近设法再次安装了 tf 2 (2.1.0),但导入 ***.com/questions/62376660/… 仍然需要 10 秒

以上是关于在 tensorflow 2 中导入 tensorflow 模块很慢的主要内容,如果未能解决你的问题,请参考以下文章

无法在 PyCharm 2019.2 中导入 Keras(来自 TensorFlow 2.0)

无法在 Swift Playground 中导入 tensorflow

无法在 vscode 中导入 tensorflow

尝试在Anaconda中导入Tensorflow时出错

无法在 Jupyter Notebook 中导入 TensorFlow

在 python 3.4 中导入 tensorflow 时出错“无法加载本机 TensorFlow 运行时”