与 CPU 版本相比,为什么 Tensorflow GPU 在创建模型和训练模型时非常慢?

时间:2021-03-25 10:11:21

标签: performance tensorflow anaconda

在解释问题之前,我想先给你一些关于我如何安装 tensorflow 和其他软件包的信息。我花了很多时间让 tensorflow 在我的 GPU(Nvidia RTX 3070,Windows 10 系统)上运行。首先,我安装了 Cuda (v.10.1),下载了 CuDDN (v7.6) 并将 CuDNN 文件复制并粘贴到正确的 Cuda 安装文件夹中(如此处所述:https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#install-windows) 我想使用 tensorflow 2.3.0 并使用此页面上的表格检查 Cuda 和 cuDNN 版本是否兼容:https://www.tensorflow.org/install/source 然后我打开 anaconda 提示窗口,激活我的新环境(>> activate [MyEnv])并安装所需的包。我读到首先安装 tensorflow 很重要,所以我安装的第一个包是 tensorflow-gpu,然后是一堆其他包。后来遇到了输入的时候找不到我的GPU的问题

import tensorflow as tf
print("Num GPUs Available: ", len(tf.config.list_physical_devices('GPU')))

响应是“可用的 GPU 数量:0” 我做了很多谷歌搜索,发现以下讨论: https://github.com/ContinuumIO/anaconda-issues/issues/12194#issuecomment-751700156 其中提到在 anaconda 提示窗口中使用 conda install tensorflow-gpu 时安装了错误的 tensorflow 构建。相反(当使用 Pythin 3.8 时,就像我一样),必须在提示窗口中使用 pass 正确的 tensorflow 构建。所以我设置了一个新环境并使用了

conda install tensorflow-gpu=2.3 tensorflow=2.3=mkl_py38h1fcfbd6_0

安装张量流。到现在为止还挺好。现在,我的第一个环境中缺少的 cudatoolkit(版本 10.1.243)和 cudnn(版本 7.6.5)包含在 tensorflow 包中,因此包含在我的第二个环境 [MyEnv2] 中。 我启动VSCode,选择正确的环境,重复测试是否可以找到gpu: 将张量流导入为 tf 打印(“可用的GPU数量:”,len(tf.config.list_physical_devices('GPU'))) 而且......它有效。找到了 GPU,乍一看一切都很好。

有什么问题吗? 在 GPU 上使用 tensorflow 非常慢。不仅在训练模型时,而且在使用

创建模型时
model = models.Sequential()
model.add(...)
(...)
model.summary()

在 CPU 上运行相同的代码示例几乎立即完成,而在 GPU 上运行代码需要 10 多分钟! (当我查看任务管理器性能选项卡时,什么也没有发生。当我在 GPU 上运行代码时,CPU 和 GPU 似乎都没有做任何事情!)而这种情况发生在没有训练的情况下创建模型时! 编译模型并开始训练后,出现同样的问题。 CPU 上的训练给了我关于 epoch 过程的即时反馈,而 gpu 上的训练似乎冻结了程序,因为几分钟内什么都没有发生(也许“冻结”是错误的词,因为我仍然可以在 VSCode 中的选项卡之间切换。程序本身并没有冻结)另一个令人困惑的方面是,在 gpu 上训练时,我只得到 nans 的损失和 mae 等待几分钟后训练终于开始。在任务管理器中,我可以观察到该模型需要大约 7.5GB 的 VRAM。 RTX3070 配备 8GB 显存。当我在 cpu 上运行相同的代码时,loss 和 mae 看起来非常好......

我真的不知道发生了什么,以及为什么当我在 GPU 上运行 tensorflow 时会出现这种奇怪的行为。你有什么想法吗?

1 个答案:

答案 0 :(得分:0)

Nvidia RTX 3070 卡基于兼容 AmpereCUDA version start with 11.x 架构。

您可以将 tensorflow 从 2.3 升级到 2.4,因为此版本支持 Ampere 架构。

因此,为了从您的 GPU 卡中获益,兼容组合为 TF 2.4CUDA 11.0,cuDNN 为 8.0