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版本
右键—>NVIDIA控制面板—>配置PhysX—>设置显卡为主显卡
这里可以看到我目前的显卡CUDA版本是11.6.127
以CUDA版本为主的话,我们接下来就以11.6的版本去安装(这里按照你的CUDA版本为主)
以TensorFlow-GPU版本为主
这里我列出最新的TensorFlow-GPU的版本与对应的支持:具体可以看官方网站支持
这里我将以TensorFlow-gpu==2.4.1版本来安装
小结
这里主要以两个目标为主,看各自的需要了,CUDA版本与TensorFlow版本的对应问题可能会导致后续的DLL文件不全,关于DLL文件的问题,摆烂,缺什么补什么就好…
CUDA安装
打开运行下载的exe
第一个路径文件是临时解压的路径,安装结束后会自己删除的
进入安装程序
选择——自定义(高级)
这里安装选项中,必须选择CUDA(其余的:第二个是NVIDIA驱动程序,如果已安装可以不用安装,第三第四是一些额外的环境需要,按需安装,非必要)
路径可以选择:但一定记住自己的安装位置
完成后结束
配置环境变量
进入环境变量配置
检查系统变量有这两个,没有得补上:
在系统变量里继续添加如下变量:
(在配置环境路径建议进入相应的目录验证一下)
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
在系统变量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
多版本CUDA共存问题
再安装新的CUDA后,需要把旧版本的环境变量其中包括CUDA_PATH更改为新版本的环境变量,然后PATH里的把新版本的放到旧版本的上面
NVCUDASAMPLES_ROOT改成新版本的路径。
CUDA验证
进入cmd输入:
nvcc --version
前提是配置好环境:
验证bandwidthTest和deviceQuery
在cmd中:
cd C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\extras\demo_suite
bandwidthTest.exe
deviceQuery.exe
PASS代表通过
CUDNN安装
CUDNN官方网站 安装前面对应的关系下载对应的版本(这里下载需要注册账号,随意注册填写即可)
把压缩包解压后打开,之后全选复制到你的CUDA目录下:
安装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-gpu是否可用
tf.test.is_gpu_available()
返回了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')]
数据运算测试:
# 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.]
一些测试出现的问题
运行测试代码的时候会出现:
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
再次运行就可以解决了!!!
无法定位程序输入点OPENSSL_sk_new_reserve于动态链接库libffi-8.dll
这个问题是Anaconda内部文件DLL无法定位:
复制替换到D:\Anaconda\Library\bin即可