GPU运行Tensorflow详细教程及错误解决

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

GPU运行Tensorflow详细教程及错误解决

前提条件

最重要的一点:CUDA与tensorflow的版本一点要对应,不然用不了!

首先在系统搜索NVIDIA进入该控制面板,查看驱动版本

在这里插入图片描述

进入该网站可以查看自己系统驱动版本所支持的CUDA版本docs.nvidia.com/cuda/cuda-t…在这里插入图片描述

之后进入官网下载CUDA与CUDnn(这两个是配套的,都要安装CUDNN下载回比较麻烦,需要注册)

CUDA官网下载地址: developer.nvidia.com/cuda-toolki…

CUDNN官网下载地址:developer.nvidia.com/rdp/cudnn-a…

下载后安装CUDA,需要注意第一个安装界面出现的文件路径是解压路径(如下图),这个不用改,安装结束后系统会自动删除

在这里插入图片描述

而文件真正的安装路径在我们后续选择安装的项目才出现(这时一般会弹出三个路径,可以改也可以不改,我个人是把它改了,改完后要记住这个路径,后续可能会用到),到选择安装那一步时只需要选择CUDA这个选项即可,其他都不用选。

安装完毕后解压下载的CUDNN,里面会有以下几个文件

在这里插入图片描述

复制这几个文件,直接粘贴到CUDA的安装文件夹下,粘贴时系统提示有重复文件就直接选择替换文件

在这里插入图片描述

然后在命令行输入nvcc -V,有出现以下的版本信息就OK了,若没有出现则是环境变量没有配置好

在这里插入图片描述

若系统没有知道配置好则需要手动配置,在系统环境变量PATH添加以下几个,其中画黄线的部分就是刚刚CUDA的安装路径(系统默认的安装路径为C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA)

在这里插入图片描述

配置完成后在运行nvcc -V就发现可以了

接着打开命令行,若下载cpu版本则输入:pip inatall tensorflow
gpu版本则输入:pip install tensorflow-gpu
等待安装完毕后在命令行输入python,接着输入import tensorflow,系统出现下图中的这行文字未报错,或是什么提示都没有就说明安装成功了。

在这里插入图片描述

配置GPU运行

在运行的代码前面加上以下代码

import os
os.environ["CUDA_DEVICES_ORDER"] = "PCI_BUS_IS"
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
#这里0表示第0块GPU,看个人情况分配
复制代码

若在终端与运行可以打开文件所在路径然后输入以下代码运行

CUDA_VISIBLE_DEVICES=1,2  python XXX.py
#这里的XXX是文件名,要根据自己的文件名进行修改
复制代码

确认是否成功配置

1.打开python编译器,或者命令行输入python,然后输入以下代码

from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())

复制代码

系统既有CPU又有GPU信息说明配置成功。

在这里插入图片描述

打开命令行输入nvidia-smi命令就可以查看当前CPU与GPU信息了,一般在运行过程中我们会输入nvidia-smi –l命令让其默认没5秒刷新一次,查看程序运行过程中系统的变化(可按Ctrl+C停止)。

在这里插入图片描述

其他命令:nvidia-smi –l xxx(指定刷新频率,单位为S)
nvidia-smi –f xxx(将查询的信息输出到具体的文件中,不在终端显示)

查看python路径:where python
查看python版本:python -V 或 python --version
查看tensorflow版本与路径:

import tensorflow as tf
print(tf.__version__)
print(tf.__path__)
复制代码

出现的错误及解决方案

1.仍然运行很慢,仔细检查会发现在运行窗口中有如下错误:
tensorflow-keras: Layer lstm will not use cuDNN kernel since it doesn‘t meet the cuDNN kern
这是由于不符合LSTM网络的gpu运行规范所导致的,基础题规范见下图 在这里插入图片描述

由于其中大多数参数不填默认为标准值,只有recurrent_activation与activation参数经常会被修改,因此我们要将代码中的LSTM网络这些参数进行修改或直接删除,如下,只保留输出维度与激活函数,这样就不会报错了,可以正常GPU运行了。

tf.keras.layers.LSTM(16,recurrent_activation='sigmoid')                                        
复制代码

猜你喜欢

转载自juejin.im/post/7132274772943061000