ubuntu18.04 安装CUDA11.0+cuDNN8.0.5+TensorFlow2.4.0

目录

1.安装/更新GPU驱动

2.安装CUDA

3.安装cuDNN

4.TensorFlow安装

5.环境验证


2021.05.20补充:

目前tensorflow-2.5.0以及pytorch-1.8.1已经能够支持到cuda11.2。


前几天在系里申请了个云计算资源,准备用来跑一个论文里的模型,系统是全新的ubuntu18.04.1,需要自己配一下环境。

1.安装/更新GPU驱动

好像可以不用自己安装GPU驱动,安装CUDA时会帮你安装,参考这篇文章,但笔者没试过。下面是自己安装/升级驱动的方法。

输入命令查看显卡信息,以及是否已经安装驱动。

nvidia-smi

可以看到有两块Tesla V100,驱动也都装好了,版本是418的,有点老了,注意有一个“CUDA Version: 10.1”,说明这个驱动只能安装CUDA10.1及以下的版本,但我想要安装CUDA11+cuDNN8(性能更好),所以要先卸载原来的驱动,再安装更高级的版本(如果原来没有驱动,直接安装就可以了);

卸载及安装的方法在这里:https://blog.csdn.net/weixin_42106049/article/details/85056274

安装驱动的话有个简单的方法,直接sudo ubuntu-drivers autoinstall,它会安装最新的驱动。速度慢的话记得把apt换个源(清华的源好像东西不全,后来用阿里没问题)。

 

这里要说明一下,我想用cuDNN 8,而只有tensorflow2.4才支持cuDNN 8,而tensorflow2.4.0又需要CUDA V11.0,不同版本的TensorFlow需要不同版本的CUDA和cuDNN,否则跑不起来。

所以我这边的一套配置就是CUDA11.0+cuDNN8.0.5+TensorFlow2.4.0

下面是tensorflow官网找到的tensorflow与cuda和cudnn的版本对应关系,有点过时了。大家想安装别的版本只要对应这个表格就可以了。

版本Python 版本cuDNNCUDA
tensorflow_gpu-2.3.03.5-3.87.410.1
tensorflow_gpu-2.2.03.5-3.87.410.1
tensorflow_gpu-2.1.03.5-3.77.410.1
tensorflow_gpu-2.0.03.5-3.77.410
tensorflow_gpu-1.15.03.5-3.77.410
tensorflow_gpu-1.14.03.5-3.77.410
tensorflow_gpu-1.13.03.5-3.77.410

2.安装CUDA

CUDA下载地址

(1)选择对应版本,我这里选择11.0,虽然显卡驱动已经支持11.2了,但是CUDA11.2好像没有对应的cuDNN。

(2)选择对应的环境,点击Download(建议此处使用vpn,否则速度会很慢)。

(3)下载完成后上传到服务器,根据提示安装即可。

安装步骤:

  • cd到.run文件所在的目录;
  • 更改权限:sudo chmod 775 cuda_11.0.2_450.51.05_linux.run
  • 执行文件:./cuda_11.0.2_450.51.05_linux.run
  • 稍等一会儿会出来一个接受协议的选项,写accept就行;然后是安装,直接选择install;
  • 再等一会儿,安装成功。(下面的图是我安装10.1版本时候的结果图,参考一下)

PS:有的人在安装的时候会出现existing package manager installation driver found,这是因为我们已经有了一个驱动,但是它想让你安装它推荐的驱动;不用管它,选择“continue”就行,然后在安装的时候把driver前面的x去掉,就不用再安装驱动了。

(4)安装完成后需要配置环境变量:

输入vi ~/.bashrc命令打开文件,在文件结尾输入以下语句,保存。(Linux ssh修改文件

export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

更新环境变量配置:source ~/.bashrc

查看环境变量是否配置成功:nvcc -V。成功会显示CUDA信息。

3.安装cuDNN

(1)到官网下载,需要先注册一个账号再打开链接才能下载。

我选择的是CUDA 11.0对应的cuDNN v8.0.5,需要下载的内容如下图所示,一共是四个文件:

(2)上传所有文件到服务器,然后解压cudnn-11.0-linux-x64-v8.0.5.39.tgz;

tar -xzvf cudnn-11.0-linux-x64-v8.0.5.39.tgz

(3)将cuda/include/cudnn.h文件复制到usr/local/cuda/include文件夹,将cuda/lib64/下所有文件复制到/usr/local/cuda/lib64文件夹中,并添加读取权限:

--分别输入以下两个命令(注意:下面的所有命令都要在cuda的父目录输入,就是上图所示的目录)

sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64

--然后更改权限

sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

(4)接下来安装Deb包, cuDNN Runtime Library for Ubuntu18.04(Deb),cuDNN Developer Library for Ubuntu18.04(Deb),cuDNN Code Samples and User Guide for Ubuntu18.04(Deb)

分别输入以下命令,如果你安装的是别的版本需要修改一下文件名。

注意:如果不小心安装了错误版本的deb包,请参考"在安装CUDNN时出现的一些错误"卸载。

sudo dpkg -i libcudnn8_8.0.5.39-1+cuda11.0_amd64.deb

sudo dpkg -i libcudnn8-dev_8.0.5.39-1+cuda11.0_amd64.deb

sudo dpkg -i libcudnn8-samples_8.0.5.39-1+cuda11.0_amd64.deb

 我之前安装过cuDNN8.0.5 for CUDA10.1,所以在安装的时候会提示“(8.0.5.39-1+cuda11.0) over (8.0.5.39-1+cuda10.1)”,意思是覆盖升级。

(5)然后测试是否安装成功,分别输入以下四个命令:

cp -r /usr/src/cudnn_samples_v8/ ~

cd ~/cudnn_samples_v8/mnistCUDNN/

make clean && make

./mnistCUDNN

 注意:这一步可能会出现编译失败的问题,如果出现这个问题也不用慌,直接看“5.环境验证”,跑代码看看CUDA能不能正常工作,如果可以那就没问题了。

最后出现Test passed! 说明成功了。

4.TensorFlow安装

直接pip3 install tensorflow-gpu==2.4.0 -i https://pypi.douban.com/simple就可以了。

这里有一个坑,pip一定要更新到最新版本,默认安装的是9.x来着,安装tensorflow-gpu==2.4.0提示找不到对应版本。

更新命令:sudo pip3 install --upgrade pip

5.环境验证

这里有一个代码,可以检查tensorflow是否能在gpu上工作

import tensorflow as tf
import timeit

device_name = tf.test.gpu_device_name()
if device_name != '/device:GPU:0':
    print(
        '\n\nThis error most likely means that this notebook is not '
        'configured to use a GPU.  Change this in Notebook Settings via the '
        'command palette (cmd/ctrl-shift-P) or the Edit menu.\n\n')
    raise SystemError('GPU device not found')


def cpu():
    with tf.device('/cpu:0'):
        random_image_cpu = tf.random.normal((100, 100, 100, 3))
        net_cpu = tf.keras.layers.Conv2D(32, 7)(random_image_cpu)
        return tf.math.reduce_sum(net_cpu)


def gpu():
    with tf.device('/device:GPU:0'):
        random_image_gpu = tf.random.normal((100, 100, 100, 3))
        net_gpu = tf.keras.layers.Conv2D(32, 7)(random_image_gpu)
        return tf.math.reduce_sum(net_gpu)


# We run each op once to warm up; see: https://stackoverflow.com/a/45067900
cpu()
gpu()

# Run the op several times.
print('Time (s) to convolve 32x7x7x3 filter over random 100x100x100x3 images '
      '(batch x height x width x channel). Sum of ten runs.')
print('CPU (s):')
cpu_time = timeit.timeit('cpu()', number=10, setup="from __main__ import cpu")
print(cpu_time)
print('GPU (s):')
gpu_time = timeit.timeit('gpu()', number=10, setup="from __main__ import gpu")
print(gpu_time)
print('GPU speedup over CPU: {}x'.format(int(cpu_time / gpu_time)))

结果:

可以看到有一堆successfully,然后也显示了gpu运行的时间,完工。

  • 13
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值