为什么Tensorflow GPU在创建模型和训练模型时与CPU版本相比速度极慢



在解释问题之前,我首先想给您一些关于如何安装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-窗口(我想使用tensorflow 2.3.0,并使用本页上的表检查Cuda和cuDNN版本是否兼容:https://www.tensorflow.org/install/source然后我打开了anaconda提示窗口,激活了我的新环境(>>激活[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

安装tensorflow。到目前为止还不错。现在,在我的第一个环境中丢失的cudatoolkit(10.1.243版(和cudnn(7.6.5版(被灌输到tensorflow包中,从而在我的第二个环境[MyEnv2]中。我启动VSCode,选择正确的环境,然后重新测试是否可以通过重复测试找到gpu:将tensorflow导入为tfprint("可用GPU数量:",len(tf.config.list_physical_devices('GPU'((和它是有效的。GPU找到了,第一眼看上去一切都很好。

那么问题出在哪里呢?在gpu上使用tensorflow非常慢。不仅在训练模型时,而且在使用创建模型时

model = models.Sequential()
model.add(...)
(...)
model.summary()

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

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

Nvidia RTX 3070板卡基于兼容CUDA version start with 11.xAmpere架构。

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

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