Ubuntu16.04下CUDA8.0和CUDA9.0共存
前言
在Github上有一些比较早的代码需要的环境可能是CUDA8.0,而对于一个新手来说,正常思维都会选择最现金的版本进行环境配置,在这里简单的介绍一下,如何在实用GPU进行运算的时候,CUDA8.0和CUDA9.0共存的问题。
1、安装前的检查
运行下面的指令,检查一下您的电脑当前CUDA版本
nvcc --version
我自己的电脑显示如下: (我的电脑里目前装的CUDA9.0)
2、下载合适的CUDA8.0版本
选择CUDA8.0版本的时候,一定要根据自己的电脑系统以及相应的环境选择,下载链接 在相应提供的下载链接的界面,按照如下所标注的内容进行:(我本人的是 Ubuntu服务器,16.04的,在这里我们选择runfile的安装形式)
Tips:由于我的是服务器端,所以如果有人也是在服务器端进行安装的话,记得要将刚才所下载的文件,先上传到服务器端。
3、进行相应的安装
在所下载相应的文件夹下,进行如下操作:
cd CUDA8 # 进入包含上述下载文件的文件夹
sudo chmod 777 cuda_8.0.61_375.26_linux.run ##给文件一定的权限
./cuda_8.0.61_375.26_linux.run ## 开始安装
运行安装指令之后,会出现Nvidia的介绍文档,例如下面所示:
重中之重的一点是,介绍文档需要你的一些操作,不然安装过程无法继续,有两个方法跳过介绍文档
- 一路Enter,直到出现一些需要你输入Y 或 N的选项
- 按Esc,退出介绍文档
当你跳过了介绍文档之后,接下来会出现一些需要你选择的选项:(每一步对应的输入都在下图中用红色的圆圈标注出来了,在这里解释一点:Driver一定要选择 n,因为你之前有装的支持CUDA9.0的驱动,所以就不用在装新的)
4、进行相应的环境配置
进入如下安装路径中,打开 bashrc 文件,然后定位到最低端 (操作过程见下图)
可以看到,在这里我的电脑端,导入的路径都是cuda9.0的:
在这里,我们要想实用刚才安装的CUDA8.0,我们只需要进行如下操作即可: 将相应的cuda-9.0换成cuda-8.0,如下图所示(保存之后退出)
然后在终端,执行下面指令进行source:
source ~/.bashrc
接下来就可以进行相应的验证:(如下图所示,既可以看到,CUDA8.0版本安装成功)
5.多个 cuda 版本之间进行切换
上面讲述的,只是你想用其中的一个的情况,如果你经常想要进行版本切换,建议使用下面的方法: 将~/.bashrc 下与cuda相关的路径都改为 /usr/local/cuda/ 而不使用 /usr/local/cuda-8.0/ 或/usr/local/cuda-9.0/。
#在切换cuda版本时
rm -rf /usr/local/cuda#删除之前创建的软链接
sudo ln -s /usr/local/cuda-8.0 /usr/local/cuda
nvcc --version #查看当前 cuda 版本
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2016 NVIDIA Corporation
Built on Mon_Jan_23_12:24:11_CST_2017
Cuda compilation tools, release 8.0, V8.0.62
#cuda8.0 切换到 cuda9.0
rm -rf /usr/local/cuda
sudo ln -s /usr/local/cuda-9.0 /usr/local/cuda
nvcc --version
对于~/.bahsrc文件的修改方法和上面一致。
6、总结
上文中只是说了,如何从CUDA9.0转换成CUDA8.0,如果你想换回CUDA9.0,只需要进行相反的过程,将 bashrc 文件里面的cuda-8.0换成cuda-9.0,然后source一下,即可。
- 使用虚拟环境,搭建python3+scrapy
- Matplotlib基础全攻略
- Python 小爬虫 - 爬取今日头条街拍美女图
- python3使用zookeeper和私钥解密及编码转化配置信息
- Python中os.path.dirname(__file__)的用法
- TensorFlow从0到1 - 18 - TensorFlow 1.3.0安装手记
- Python + Splinter 实现浏览器自动化操作入门指南
- 动态地理信息可视化——leaflet在线地图简介
- python中的递归函数
- 对抗思想与强化学习的碰撞-SeqGAN模型原理和代码解析
- 玩转数据地图系列之——地图上的迷你条形图
- 树上倍增求LCA及例题
- 深度强化学习-DDPG算法原理和实现
- 你绝对想不到,数据地图还能这么玩~
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【Java8新特性】01 函数式接口和Lambda表达式你真的会了吗
- 只出现一次的元素
- 【排序】堆排序
- redis灵魂拷问:怎样搭建一个哨兵主从集群
- 是时候给你的鼠标指针更换样式换下风格体验了!如何卸载与安装鼠标指针?
- Linux设置虚拟内存
- SSM 单体框架 - 教育平台后台管理系统:接口文档
- java学习应用篇|使用环境变量做一些工具
- 【Java8新特性】06 新的日期和时间:LocalDate LocalTime LocalDateTime
- UNSAFE和Java 内存布局
- 【玩转Redis面试第1讲】Redis数据结构和常用命令速记
- SSM 单体框架 - 教育平台后台管理系统:课程模块
- 【玩转Redis面试第2讲】面试官再问Redis事务把这篇文章扔给他
- SSM 单体框架 - 教育平台后台管理系统:Maven 进阶使用
- SSM 单体框架 - 教育平台后台管理系统:广告和用户模块开发