当前位置:   article > 正文

[DL021]Windows预览版WSL2-Ubuntu2004安装Cuda11.1及Cudnn(亲测可用、流程清晰)_021window

021window

1. 环境

  • Windows10_insider_preview,必须得是insider_preview版本(OS内部版本开头数字要是20150以上),要不安装好了也是检测不到GPU的,已安装WSL2下的Ubuntu20.04
  • WSL2
    • python3.8.5
    • pip 20.0.2
    • tensorflow==2.4.0

在这里插入图片描述

2. 安装步骤

2.1 驱动的安装

WSL2的Nvidia驱动安装说明

微软关于WSL安装英伟达驱动的说明:
https://docs.microsoft.com/en-us/windows/win32/direct3d12/gpu-cuda-in-wsl

  1. 前提条件:

    1. Windows OS内部版本号>20150
    2. WSL2
  2. 此网址根据显卡类型选择驱动下载,在Windows下安装

2.2 Cuda-11.1安装

编者按:官方给出的WSL安装Cuda教程给出了两种安装方式,经过亲身实践apt-get方式安装的是行不通的,因为在执行sh -c 'echo "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64 /" > /etc/apt/sources.list.d/cuda.list'之后再执行apt-get的时候会报错The repository http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64 is not signed以及BAG SIG错误,编者在网络搜索了很多方法(包括导入GPG公钥到keyserver.ubuntu.com等等方法)都是不可行的.

在这里插入图片描述

下文给出的是切实可行的办法,也就是通过runfile方法进行安装.

打开这个网址按照下图进行选择

在这里插入图片描述

先在shell里面切换到ubuntu的Downloads文件夹,接着在Ubuntu的Shell里面输入:

wget https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda_11.1.0_455.23.05_linux.run 
sudo sh cuda_11.1.0_455.23.05_linux.run
  • 1
  • 2

上面命令第一行会下载一个.run的文件到Downloads,第二行是进行安装.网络上其他教程可能会说在安装的时候不要选安装Driver的选项,但是实际操作过程中并没有让选择安装Driver的教程,猜想可能是因为cuda的版本(11.1)比较新,已经适配了WSL(毕竟在选择的网址那已经有了一个WSL-Ubuntu的选项).

安装完成之后在电脑的/usr/local目录下应该有一个cuda-11.1的文件夹(其中cuda那个是安装过程自动创建的软连接).

在这里插入图片描述

接下来还需要配置环境变量,这里如果是自己的电脑建议直接在/etc/profile里面配置,省的开机后环境变量会失效或者是从bash切换到zsh的时候导致环境变量失效(编者就是因为安装之后又嫌弃WindowsTerminal的终端太难看,又弄的zsh-ohmyzsh-powerline什么的):

 export PATH='$PATH:/usr/local/cuda-11.1/bin/:/usr/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/sbin'
 export LD_LIBRARY_PATH="/usr/local/cuda-11.1/lib64:$LD_LIBRARY_PATH"
  • 1
  • 2

完毕之后输入nvcc -V应该显示如下信息.如果没有,那就是没安装成功,卸载重装重新走一遍上面的流程.

在这里插入图片描述

2.3 Cudnn安装

说是安装实际也不是,就是下载文件然后复制到对应的cuda的文件夹就是了.

网址:https://developer.nvidia.com/rdp/cudnn-download

上面的网址需要注册成为开发者才能下载.cudnn的版本一定要和cuda的版本对应.

在这里插入图片描述

下载后得到的文件夹是cudnn-11.2-linux-x64-v8.1.0.77.arj,这里后缀名是arj,原因不详(我是在Windows下载的),但是可以直接把后缀改成tgz,之后移动到Ubuntu对应的文件夹(Windows的盘符比如说D盘在WSL-Ubuntu里面就是/mnt/d/),移动到Ubuntu的里面(此处我移动到了Ubuntu的Downloads文件夹,以下操作也是在Downloads文件夹下进行操作)就可以进行Cudnn文件的安装(其实是复制):

tar -zxvf cudnn-11.2-linux-x64-v8.1.0.77.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda-11.1/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-11.1/lib64/
sudo cp /usr/local/cuda-11.1/lib64/libcusolver.so.11 /usr/local/cuda-11.1/lib64/libcusolver.so.10
sudo chmod +x /usr/local/cuda/include/cudnn.h
sudo chmod +x /usr/local/cuda/lib64/libcudnn*
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里一定要执行复制libcusolver.so.11的那行命令,不然cuda会无法正常工作报如下错误,找不到GPU.

Could not load dynamic library 'libcusolver.so.10'; dlerror: libcusolver.so.10: 
cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/cuda-11.1/lib64
  • 1
  • 2

至此,在Windows的WSL-Ubuntu下安装Cuda以及Cudnn已结束.以下代码可以验证GPU的存在(需要已经安装tensorflow).

import tensorflow as tf
devices = tf.config.list_physical_devices()
print(devices)
  • 1
  • 2
  • 3

输出:

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

几处容易踩坑的地方

1 环境变量的配置

1.1 重启后nvcc -V显示comman not found怎么回事

如果是自己的电脑,建议直接将环境变量设置在/etc/profile里面,一劳永逸.也不会因为弃用bash(安装了zsh的情况下),导致~/.bashrc里面的环境变量失效.

2 Cudnn的安装

sudo cp /usr/local/cuda-11.1/lib64/libcusolver.so.11 /usr/local/cuda-11.1/lib64/libcusolver.so.10
  • 1

上面这行命令可能随着安装的版本不同而改变,如果没有执行,在Jupyter里面运行下面这段代码是看不到报错的,但是就是检测不到GPU.这时候推荐在bash里面运行,就会报错缺少libcusolver.so.10等文件(这一点当初也是困扰了许久,到bash里面一运行才恍然大悟.).

import tensorflow as tf
devices = tf.config.list_physical_devices()
print(devices)
  • 1
  • 2
  • 3
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/128495
推荐阅读
相关标签
  

闽ICP备14008679号