TensorFlow-GPU-2.4.1与CUDA安装教程

  • 前言
  • 安装前须知
  • NV显卡CUDA版本
  • 以TensorFlow-GPU版本为主
  • 小结
  • CUDA安装
  • 配置环境变量
  • 多版本CUDA共存问题
  • CUDA验证
  • 验证bandwidthTest和deviceQuery
  • CUDNN安装
  • 安装tensorflow-gpu2.4.1
  • 完整测试TensorFlow-GPU的可用性
  • 一些测试出现的问题
  • 解决
  • 无法定位程序输入点OPENSSL_sk_new_reserve于动态链接库libffi-8.dll
  • 结语


前言

这篇文章是我二刷TensorFlow-GPU安装,最近需要在新的电脑安装环境,我翻了以前自己写的安装笔记:TensorFlow-GPU-CUDA无痛安装教程Windows篇,但是安装完因为版本的原因,出了一些新的问题,打算推倒再来一遍,因为是二周目,所以这篇文章我会更注重一些常见的安装问题与解决方法,希望可以帮的到你!!

安装前须知

首先要确定自己,是以当前NV显卡的CUDA版本为主,还是以TensorFlow-GPU的版本为主

NV显卡CUDA版本

tensorflow对应版本cuda tensorflow2.4.1对应cuda_深度学习


右键—>NVIDIA控制面板—>配置PhysX—>设置显卡为主显卡

这里可以看到我目前的显卡CUDA版本是11.6.127

以CUDA版本为主的话,我们接下来就以11.6的版本去安装(这里按照你的CUDA版本为主)

以TensorFlow-GPU版本为主

这里我列出最新的TensorFlow-GPU的版本与对应的支持:具体可以看官方网站支持

tensorflow对应版本cuda tensorflow2.4.1对应cuda_深度学习_02


这里我将以TensorFlow-gpu==2.4.1版本来安装

小结

这里主要以两个目标为主,看各自的需要了,CUDA版本与TensorFlow版本的对应问题可能会导致后续的DLL文件不全,关于DLL文件的问题,摆烂,缺什么补什么就好…

CUDA安装

NVIDIA CUDA官方网站

tensorflow对应版本cuda tensorflow2.4.1对应cuda_CUDA_03


打开运行下载的exe

第一个路径文件是临时解压的路径,安装结束后会自己删除的

进入安装程序

tensorflow对应版本cuda tensorflow2.4.1对应cuda_CUDA_04


tensorflow对应版本cuda tensorflow2.4.1对应cuda_tensorflow_05


tensorflow对应版本cuda tensorflow2.4.1对应cuda_tensorflow_06


选择——自定义(高级)

tensorflow对应版本cuda tensorflow2.4.1对应cuda_tensorflow_07


这里安装选项中,必须选择CUDA其余的:第二个是NVIDIA驱动程序,如果已安装可以不用安装,第三第四是一些额外的环境需要,按需安装,非必要

tensorflow对应版本cuda tensorflow2.4.1对应cuda_CUDA_08


路径可以选择:但一定记住自己的安装位置

tensorflow对应版本cuda tensorflow2.4.1对应cuda_CUDA_09


tensorflow对应版本cuda tensorflow2.4.1对应cuda_python_10


完成后结束

配置环境变量

进入环境变量配置

检查系统变量有这两个,没有得补上:

tensorflow对应版本cuda tensorflow2.4.1对应cuda_python_11


在系统变量里继续添加如下变量:

在配置环境路径建议进入相应的目录验证一下

CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.1  #具体路径具体修改
#以下不需要修改:
CUDA_LIB_PATH = %CUDA_PATH%\lib\x64  
CUDA_BIN_PATH = %CUDA_PATH%\bin 
CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64 
CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\x64

tensorflow对应版本cuda tensorflow2.4.1对应cuda_python_12


系统变量path中添加以下:

%CUDA_LIB_PATH%
%CUDA_BIN_PATH% 
%CUDA_SDK_LIB_PATH%
%CUDA_SDK_BIN_PATH%
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\lib\x64
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\bin 
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.1\common\lib\x6 
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.1\bin\win64

tensorflow对应版本cuda tensorflow2.4.1对应cuda_CUDA_13

多版本CUDA共存问题

再安装新的CUDA后,需要把旧版本的环境变量其中包括CUDA_PATH更改为新版本的环境变量,然后PATH里的把新版本的放到旧版本的上面
NVCUDASAMPLES_ROOT改成新版本的路径。

CUDA验证

进入cmd输入:

nvcc --version

前提是配置好环境:

tensorflow对应版本cuda tensorflow2.4.1对应cuda_tensorflow对应版本cuda_14

验证bandwidthTest和deviceQuery

在cmd中:

cd C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\extras\demo_suite
bandwidthTest.exe
deviceQuery.exe

tensorflow对应版本cuda tensorflow2.4.1对应cuda_CUDA_15


tensorflow对应版本cuda tensorflow2.4.1对应cuda_python_16


PASS代表通过

CUDNN安装

CUDNN官方网站 安装前面对应的关系下载对应的版本(这里下载需要注册账号,随意注册填写即可)

tensorflow对应版本cuda tensorflow2.4.1对应cuda_CUDA_17


把压缩包解压后打开,之后全选复制到你的CUDA目录下:

tensorflow对应版本cuda tensorflow2.4.1对应cuda_深度学习_18

安装tensorflow-gpu2.4.1

没有Anaconda的在cmd中

pip install tensorflow-gpu==2.4.1

有Anaconda进入环境下载即可

conda activate tf
pip install tensorflow-gpu==2.4.1

安装完成后验证一下版本:

import tensorflow as tf
tf.__version__

tensorflow对应版本cuda tensorflow2.4.1对应cuda_CUDA_19


查看tensorflow-gpu是否可用

tf.test.is_gpu_available()

tensorflow对应版本cuda tensorflow2.4.1对应cuda_tensorflow对应版本cuda_20


返回了True即可用

完整测试TensorFlow-GPU的可用性

测试代码:

# Coding BIGBOSSyifi
# Datatime:2022/4/24 17:33
# Filename:Facial.py
# Toolby: PyCharm

import tensorflow as tf

#避免爆内存,设置一个GPU内存增长的过度消耗
gpus = tf.config.experimental.list_physical_devices('GPU')
for gpu in gpus:
    tf.config.experimental.set_memory_growth(gpu,True)
    print(gpus)

测试结果:

[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]

tensorflow对应版本cuda tensorflow2.4.1对应cuda_深度学习_21


数据运算测试:

# Coding BIGBOSSyifi
# Datatime:2022/4/24 19:45
# Filename:tstest.py
# Toolby: PyCharm

import tensorflow as tf

# print('GPU', tf.test.is_gpu_available())

tf.compat.v1.disable_eager_execution()

with tf.device('/cpu:0'):
    a = tf.constant([1.0, 2.0, 3.0], shape=[3], name='a')
    b = tf.constant([1.0, 2.0, 3.0], shape=[3], name='b')
with tf.device('/gpu:1'):
    c = a + b

# 注意:allow_soft_placement=True表明:计算设备可自行选择,如果没有这个参数,会报错。
# 因为不是所有的操作都可以被放在GPU上,如果强行将无法放在GPU上的操作指定到GPU上,将会报错。
sess = tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(allow_soft_placement=True, log_device_placement=True))
# sess = tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(log_device_placement=True))
sess.run(tf.compat.v1.global_variables_initializer())
print(sess.run(c))

测试结果:

add: (AddV2): /job:localhost/replica:0/task:0/device:GPU:0
init: (NoOp): /job:localhost/replica:0/task:0/device:GPU:0
a: (Const): /job:localhost/replica:0/task:0/device:CPU:0
b: (Const): /job:localhost/replica:0/task:0/device:CPU:0

[2. 4. 6.]

tensorflow对应版本cuda tensorflow2.4.1对应cuda_tensorflow对应版本cuda_22

一些测试出现的问题

运行测试代码的时候会出现:

Could not opened dynamic library cudart64_110.dll
Could no topened dynamic library cublas64_11.dll
Could not opened dynamic library cublasLt64_11.dll
Could not opened dynamic library cufft64_10.dll
Could not opened dynamic library curand64_10.dll
Could not opened dynamic library cusolver64_10.dll
Could not opened dynamic library cusparse64_11.dll
Could not opened dynamic library cudnn64_8.dll

这里的问题就是我们缺失以上的.dll文件(根本原因还是CUDA和CUDDN的版本的问题)

解决

我尝试过卸载重新对于版本的安装,但是还是会出现这样的问题,那就对症解决dll吧
TensorFlow缺失的DLL文件:https://pan.baidu.com/s/1A0WVIxSC1EEvVuEk5hFVMg?pwd=mdzz
提取码:mdzz
把文件解压了全部复制到目录

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin

这里还有一个情况,我的显卡CUDA11.6,复制到\CUDA\v11.0\bin依然没有解决,这里高版本CUDA需要复制到新的目录:C:\Windows\System

tensorflow对应版本cuda tensorflow2.4.1对应cuda_python_23


再次运行就可以解决了!!!

无法定位程序输入点OPENSSL_sk_new_reserve于动态链接库libffi-8.dll

这个问题是Anaconda内部文件DLL无法定位:

tensorflow对应版本cuda tensorflow2.4.1对应cuda_tensorflow对应版本cuda_24


复制替换到D:\Anaconda\Library\bin即可