2023.8.24更新:在经过一段时间的学习摸索与踩坑后,笔者十分不建议各位在windows上部署深度学习环境,这是一件费力不讨好的事。不仅在编程时需要花费额外精力,在复现其他工作时也容易出现各种“别人很少遇到的”bug。
以下为原文,发布于2021-02-01 21:34:32。
博主花了两天时间,总算在win10笔记本上完成了cuda环境的部署,期间踩了很多坑。
现有的教程大都是通过anaconda部署的,但我是在jupyter上跑的,似乎没有什么文章是绕过anaconda来部署环境的,所以我决定写一个,顺带将自己遇到的坑也提一提。
首先说明一下我的本地环境:
tensorflow==2.4.1
python==3.6.2
jupyter==1.9.0
python版本大于3.5应该都没什么影响,但tensorflow版本比较关键,涉及到对应的CUDA工具包版本与cuDNN SDK版本,我们可以在这个页面查阅相关信息:从源代码构建 | TensorFlow
官方文档链接:https://www.tensorflow.org/install/gpu#windows_setup
要在windows系统上使用gpu训练神经网络,我们不仅得有一个gpu,还得部署一些附带的环境,这就是本文所要描述的东西。
首先,gpu得支持cuda,可以通过这个页面查询:CUDA GPUs - Compute Capability | NVIDIA Developer
然后,我们需要在系统中安装下面这些软件:
NVIDIA GPU 驱动程序:CUDA 11.0 需要 450.x 或更高版本
CUDA 工具包:TensorFlow 支持 CUDA 11(TensorFlow 2.4.0 及更高版本)
CUDA 工具包附带的 CUPTI。
cuDNN SDK 8.0.4
GPU驱动程序一般大家的电脑都是装好了的,可以在控制面板里看一下是不是又GeForce Experience这个软件,这个就是驱动。可以打开确认一下驱动版本是否符合要求。
(英伟达搞的这个强制登陆真的是有够ex的。)
然后我们需要下载两个文件,一个是CUDA工具包,一个是cuDNN SDK 8.0.4。这两个文件都可以在英伟达官网上下到,但他要求先注册,注册又很容易卡在第二步进不了第三步,我在这上面绕了好久。
虽然我是注册成功了,但是是有绕过注册的方法的,csdn上之前有人发过方法,简单的说就是下载链接可以直接复制出来,然后通过迅雷等外部下载工具去下。
迅雷下的甚至远比官网上下的快。
这里我给出两个下载链接,一个是官网的,一个是我下载好,上传到百度网盘的。
CUDA工具包我安装的版本是cuda_11.0.2_451.48_win10.exe
官网下载页面:CUDA Toolkit Archive | NVIDIA Developer,我下的是CUDA Toolkit 11.0 (May 2020)
百度网盘链接:百度网盘 请输入提取码,提取码:50ya
cuDNN 8.04
官网下载页面:cuDNN Archive | NVIDIA Developer 在这个页面选择要下载的版本,然后右键复制链接拿到外部下载工具就能绕过登录了。
我选的是Download cuDNN v8.0.4 (September 28th, 2020), for CUDA 11.0; cuDNN Library for Windows (x86)
百度网盘链接:百度网盘 请输入提取码,提取码:fqgk
第一个文件是个安装程序,需要运行。第二个压缩包我们按照TensorFlow文档里描述的,在C盘根目录新建文件家tools,然后解压到这个文件夹中。
最后我们要配置一下环境变量,在控制面板-系统-高级系统配置-环境变量里设置path变量:
如果你没有修改CUDA工具包的安装路径,那可以跟我设置成一样的值,确定一下就好了。
到这里就安装完成了,我们可以检查一下现在TensorFlow能否检查到GPU。
打开Windows PowerShell,运行ipython,输入
import tensorflow as tf
print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))
可以看到系统在尝试加载所需的软件依赖。如果环境存在问题,有文件不能成功加载,那么TensorFlow就检测不到GPU。如果全部加载成功,说明环境已经部署成功了。
在此之后我尝试着调用GPU去训练神经网络,被一个莫名的问题困扰,报错类型为UnKnown Error,错误描述为调用Conv2d函数出错,我一直没能找到原因。后面发现一旦在jupyter里同时启动多个kernel并同时训练神经网络,那么就会出现这个问题,如果只启动一个kernel则不会出现问题。
如果已经出现了这个问题,我的解决办法是在设备管理器中禁用GPU再启用,这样就好了。
最后还有一点要提的是,在部署完成后,最好重启一下电脑。我期间还遇到了一个问题,无法加载cusolver64_10.dll,这个文件可以在上面的图片里看到。我很费解,因为这个文件与其他文件是在同一个文件夹的,没理由别的能加载,它不能加载。同时我发现,ipython里能正常加载并显示GPU数量为1,但偏偏jupyter里出现了这个问题。百思不得其解,重启电脑后却好了。
我们可以尝试一下用gpu去训练神经网络,一般来说如果你先前已经尝试过用cpu训练,转而使用gpu的话会发现速度有着大幅提升。
这里给出TensorFlow给出的一个官方示例:用 tf.data 加载图片 | TensorFlow Core
有什么问题的话可以留言。