Ubuntu16.04下安装多版本cuda和cudnn

原文 https://blog.csdn.net/tunhuzhuang1836/article/details/79545625

前言
因为之前针对Pytorch,caffe,torch等,装了cuda8.0和对应cudnn5.1,但是最近在装MxNet的时候,发现官网上能下载到的MxNet版本仅支持cuda9.0和对应cudnn7.0.5,所以无奈不想卸载cuda8.0只能在电脑上安装多个版本的cuda和对应cudnn。
 
 
安装cuda
好了进入正题,首先安装cuda 需要去nvidia官网注册一个账号登录下载。这里给一下历史版本的cuda链接(现在官网好像进去默认下载最新版本)。这里我们举例下载cuda9.0:(当你电脑上只有一个cuda时候下载哪种类型无所谓,如果已存在一个或以上时候需要选择runfile安装)
 
安装按照官方指引就好 
# if deb
sudo dpkg -i cuda-repo-ubuntu1604-9-0-local-rc_9.0.103-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda
# if runfile
sudo chmod +x cuda_9.0.176_384.81_linux.run
./cuda_9.0.176_384.81_linux.run12345678
这里我给了deb版本和runfile版本cuda安装。 如果你是第一遍装cuda,按官方教程什么版本都可以; 如果是电脑上已存在cuda,则安装需要runfile,且有几个需要注意的地方:(这里详情可参考Maple2014博客)
Do you accept the previously read EULA? (accept/decline/quit): accept
You are attempting to install on an unsupported configuration. Do you wish to continue? ((y)es/(n)o) [ default is no ]: y
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 346.46? ((y)es/(n)o/(q)uit): n
Do you want to install the OpenGL libraries? ((y)es/(n)o/(q)uit) [ default is yes ]: n
Install the CUDA 9.0 Toolkit? ((y)es/(n)o/(q)uit): y
Enter Toolkit Location [ default is /usr/local/cuda-9.0 ]:
/usr/local/cuda-9.0 is not writable.
Do you wish to run the installation with ‘sudo’? ((y)es/(n)o): y
Please enter your password:
Do you want to install a symbolic link at /usr/local/cuda? ((y)es/(n)o/(q)uit): n
Install the CUDA 9.0 Samples? ((y)es/(n)o/(q)uit): y
Enter CUDA Samples Location [ default is /home/xxx ]:
Installing the CUDA Toolkit in /usr/local/cuda-9.0 …
Installing the CUDA Samples in /home/xxx …
Copying samples to /home/xxx/NVIDIA_CUDA-9.0_Samples now…
Finished copying samples.12345678910111213141516
安装好后我们可以去/usr/local/下看到安装好的cuda-9.0文件夹:
    
 
安装cudnn
其次我们需要安装cudnn,同理去nvidia官网下载cudnn。这里我们安装的是cudnn7.0.5。 
 
注意,我们这里选择cuda9.0下cuDNN v7.0.5 Library for Linux。下载好后直接命令行解压然后复制lib64和include文件夹到usr/local/cuda-9.0,命令如下:
# Installing from a Tar File
sudo cp cuda/include/cudnn.h /usr/local/cuda-9.0/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64
sudo chmod a+r /usr/local/cuda-9.0/include/cudnn.h /usr/local/cuda-9.0/lib64/libcudnn*1234
 
 
cuda版本的自由切换
以上讲的就是多版本cuda的安装。最后,我们要做的就是cuda版本的自由切换。命令行sudo gedit ~/.bashrc打开.bashrc,也许你已经装过cuda8.0,则.bashrc下应该有如下行:(详情请参考mumoDM博客)
export PATH="$PATH:/usr/local/cuda-8.0/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda-8.0/lib64/"
export LIBRARY_PATH="$LIBRARY_PATH:/usr/local/cuda-8.0/lib64"  123
我们将所有的cuda-8.0更改为cuda文件夹: 
 
export PATH="$PATH:/usr/local/cuda/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64/"
export LIBRARY_PATH="$LIBRARY_PATH:/usr/local/cuda/lib64"  123
到这一步我们已经设置好了链接库,最后我们只需要在终端敲入: 
 
sudo rm -rf /usr/local/cuda #删除之前创建的软链接
sudo ln -s /usr/local/cuda-8.0 /usr/local/cuda #创建新 cuda 的软链接12
这里我是从cuda8.0切换到9.0 。同理反一下就可以切换回8.0 。所有完事后,可以用命令来查看cuda是否切换完成: 
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.17612345
 
总结
当然本人在安装过程中还是踩过好多坑的,举几个栗子说明。 
(1)  nvcc可能默认是你以前deb安装时候其他版本的,所以你会发现就算你操作按上面一步步来,nvcc –version结果还是没变。所以我们可以找到nvcc位置,然后创建usr/local/cuda/nvcc软链接到原先nvcc位置,应该是usr/bin/nvcc,操作为: 
which nvcc # 找到nvcc位置,假定在/usr/bin/nvcc且是以前版本8.0
sudo ln -s /usr/local/cuda/bin/nvcc  /usr/bin/nvcc # 创建软链接链接到当前cuda的nvcc
nvcc --version # 显示当前cuda版本123
 
(2)  也许你切换到8.0跑Pytorch的时候发现报错了: 
 
Traceback (most recent call last):
  File "train.py", line 318, in <module>
    main()
  File "train.py", line 182, in main
    out = model(inputs)
  File "/usr/local/lib/python2.7/dist-packages/torch/nn/modules/module.py", line 206, in __call__
    result = self.forward(*input, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/torch/nn/parallel/data_parallel.py", line 61, in forward
    outputs = self.parallel_apply(replicas, inputs, kwargs)
  File "/usr/local/lib/python2.7/dist-packages/torch/nn/parallel/data_parallel.py", line 71, in parallel_apply
    return parallel_apply(replicas, inputs, kwargs)
  File "/usr/local/lib/python2.7/dist-packages/torch/nn/parallel/parallel_apply.py", line 45, in parallel_apply
    raise output
RuntimeError: CUDNN_STATUS_INTERNAL_ERROR1234567891011121314
这个时候需要删除root下一个隐藏文件夹 .nv:
 
sudo rm -rf ~/.nv1
就是这么多,祝玩得开心!(附一张成功图:原8.0切换到9.0) 
 
 
引用
 
  http://blog.csdn.net/maple2014/article/details/78574275
  http://blog.csdn.net/mumoDM/article/details/79462604
  https://github.com/SeanNaren/deepspeech.pytorch/issues/32

Ubuntu16.04下安装多版本cuda和cudnn的更多相关文章

  1. Ubuntu16.04下安装最新版本的CMake

      当前最新版CMake为3.9.1.. Ubuntu中更新cmake到最新版本,过程如下: 1. 卸载已经安装的旧版的CMake[非必需] apt-get autoremove cmake 2. 文 ...

  2. docker学习笔记(一)—— ubuntu16.04下安装docker

    docker学习笔记(一)—— ubuntu16.04下安装docker 原创 2018年03月01日 14:53:00 标签: docker / ubuntu 1682 本文开发环境为Ubuntu ...

  3. ubuntu16.04下安装artoolkit5

    目前对AR技术的常见理解就是CV(Computer Vision)+CG(Computer Graphic).CV的方法很多,简单些比如FREAK+ICP(ARToolKit中的NFT),复杂些就是S ...

  4. Ubuntu16.04下安装数据库oracle客户端

    在Ubuntu16.04下安装oracle数据库客户端,使Django项目连接到远程Oracle数据库. 1.下载oracle客户端安装包: 进入官网http://www.oracle.com/tec ...

  5. Ubuntu16.04下安装redis

    Ubuntu16.04下安装redis 保证网络畅通,选定好下载工作路径,执行以下命令下载redis-3.2.6: sudo wget http://download.redis.io/release ...

  6. Ubuntu16.04下安装Hadoop

    一.记录理由 刚开始只是想要学习怎么使用Hive的.想着安装应该很简单,没想到花了整整一天的时间来安装,为了避免下次犯同样的错误,特此记录. 二.安装Hadoop 网上教你怎么安装Hadoop的文章有 ...

  7. Ubuntu16.04下安装googlechrome flash 插件和安装网易云音乐

    一.ubuntu 16.04 下安装完后发现 flash无法播放没有安装flash插件因为 Adobe Flash 不再支持 linux Google 便开发了PepperFlashPlayer来替代 ...

  8. Ubuntu16.04下安装texlive

    Ubuntu 16.04下安装texlive的步骤如下: 1.下载texlive 打开终端输入:sudo apt-get install texlive-full  #下载这一过程会持续10-20分钟 ...

  9. 深度学习环境配置:Ubuntu16.04下安装GTX1080Ti+CUDA9.0+cuDNN7.0完整安装教程(多链接多参考文章)

    本来就对Linux不熟悉,经过几天惨痛的教训,参考了不知道多少篇文章,终于把环境装好了,每篇文章或多或少都有一些用,但没有一篇完整的能解决我安装过程碰到的问题,所以决定还是自己写一篇我安装过程的教程, ...

随机推荐

  1. 认识函数(python)

    一般的函数都是有参数的,函数的参数都是放在函数定义的括号里的,函数参数的命名规则和我们说的变量的命名规则基本一样,一定要清晰明了.(能概括出它的意义,让人阅读你的代码,就知道这个参数是干嘛的就行).当 ...

  2. vc++6.0中查看函数栈的结构

    栈:一种后进先出的数据结构   比如:弹夹 函数调用的约定 传参顺序 传参媒介 如何传递返回值 平衡参数(堆栈平衡):有且只有被调方(callee)和调用方(caller)一方执行 _cdell (c ...

  3. 适合新手的160个creakme(一)

    先跑一下 直接使用这个字符串去check,发现提示信息有关键字符串 CODE:0042FB80 00000021 C Sorry , The serial is incorect ! 找到这个字符串的 ...

  4. X86驱动:挂接SSDT内核钩子

    SSDT 中文名称为系统服务描述符表,该表的作用是将Ring3应用层与Ring0内核层,两者的API函数连接起来,起到承上启下的作用,SSDT并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用 ...

  5. 怎样获取不同环境下的document对象

    1. 在一般的网页文档中, 可通过: document 或 window.document 获取; 2. 在iframe框架中, 可通过iframe节点的属性: contentDocument 获取; ...

  6. 在javascript对象内搜索,貌似是一个新鲜的话题。

    为啥 也不为啥,因为没找到. 用途 也没啥用途,比如,在电影网站找到链接,在小说网站找到链接.二货同事写的复杂对象.等等吧.反正要搜索就对了. 目标 在对象内,无论多少层,找到关键字. 关键字可能的位 ...

  7. mysql 8.0.13开启远程连接 配置方式

    1:linux登录mysql [root@localhost mysql]# mysql -u root -p Enter password: Welcome to the MySQL monitor ...

  8. C#异步编程中的最佳实践(做法)

    原文地址Stephen Cleary 写得很详细,尤其讲到了 GUI 上下文调用,在APS.NET中它会阻塞 GUI 线程,从而导致死锁.而控制台中却不存在这个问题. 比如开发过程中本地写控制台程序测 ...

  9. html5中本地存储概念是什么?

    html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage.sessionStorage用于本地存储一个会话中的数据,这些数据只有在同一个会话中的页 ...

  10. PHP转码函数mb_convert_encoding() 和iconv()

    注意:函数mb_convert_encoding的执行效率比iconv差,且需开启php的mbstring扩展. 一般情况下使用iconv,但此函数在碰到无法转码字符会丢弃,此种情况下可以用mb_co ...