多版本cuda共存
时间:2019-01-17
本文章向大家介绍多版本cuda共存,主要包括多版本cuda共存使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
- 首先在机器中安装一个版本的cuda,参考链接。
- 然后再安装另一个版本的cuda时,不要配置环境变量(这样可以保证默认使用第一个版本的cuda),然后安装相应版本的cudnn即可。
- 安装了两个版本的cuda之后,需要安装anaconda(安装参考链接)来控制python版本以及tensorflow-gpu版本。(其实是因为tensorflow-gpu版本的不同,才要求cuda版本不同的。)
- 假设第一次安装的版本如下:
tensorfow-gpu1.4 + cuda8.0 + cudnn6.0 + python3.4
(即本机的默认环境),但是你现在需要运行tensorflow-gpu1.6 + cuda9.0 + cudnn7.0 + python3.5
。那么你需要执行以下步骤- 先用anaconda创建一个虚拟环境:先用anaconda创建一个虚拟环境:
conda create -n tensor-1.6 python=3.5
- 开启tensorflow-gpu1.6的虚拟环境:
source activate tensor-1.6
- 新建启动该虚拟环境时需要运行的脚本:
mkdir -p /home/username/.conda/envs/cuda_test/etc/conda/activate.d
vim /home/username/.conda/envs/cuda_test/etc/conda/activate.d/activate.sh
chmod +x /home/username/.conda/envs/cuda_test/etc/conda/activate.d/activate.sh
在脚本中输入以下内容,使该虚拟环境启动时,自动切换为cuda9.0:ORIGINAL_CUDA_HOME=$CUDA_HOME ORIGINAL_LD_LIBRARY_PATH=$LD_LIBRARY_PATH export CUDA_HOME=/usr/local/cuda-9.0 export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
- 新建退出该虚拟环境时需要运行的脚本:
mkdir -p /home/username/.conda/envs/cuda_test/etc/conda/deactivate.d
vim /home/username/.conda/envs/cuda_test/etc/conda/deactivate.d/deactivate.sh
chmod +x /home/username/.conda/envs/cuda_test/etc/conda/deactivate.d/deactivate.sh
在脚本中输入以下内容,使该虚拟环境退出时,自动切换为本机默认环境(即cuda8.0):export CUDA_HOME=$ORIGINAL_CUDA_HOME export LD_LIBRARY_PATH=$ORIGINAL_LD_LIBRARY_PATH unset ORIGINAL_CUDA_HOME unset ORIGINAL_LD_LIBRARY_PATH
- 先用anaconda创建一个虚拟环境:先用anaconda创建一个虚拟环境:
至此,多版本cuda共存的问题就解决了。如果使用不同版本的tensorflow-gpu,就可以自动切换cuda版本了。如果版本多于两个,利用同样的原理进行配置启动与退出时的规则即可。
- shell 学习笔记(18)
- Hive 中的复合数据结构简介以及一些函数的用法说明
- BloomFilter 简介及在 Hadoop reduce side join 中的应用
- 关于 hadoop reduce 阶段遍历 Iterable 的 2 个“坑”
- Hadoop Mapper 阶段将数据直接从 HDFS 导入 Hbase
- 译文 | 量化投资教程:投资组合优化与R实践
- 浅谈 java 中构建可执行 jar 包的几种方式
- python 日志模块 logging 详解
- 基于堆实现的优先级队列:PriorityQueue 解决 Top K 问题
- explain 深入剖析 MySQL 索引及其性能优化指南
- 图文并茂详解 SQL JOIN
- 自定义 hadoop MapReduce InputFormat 切分输入文件
- Hadoop MapReduce 二次排序原理及其应用
- MySQL Tips【Updating】
- 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 数组属性和方法
- 要点1:指针、数组和复合字面量
- akka-typed(9) - 业务分片、整合,谈谈lagom, 需要吗?
- com-IFileDlg 进行文件的 打开或者保存
- 哆啦A梦?不好记!安利一下Prometheus这款开源的企业监控报警平台
- Kotlin:03-变量、常量、数据类型
- nginx工程师,需要上承天命,下召九幽
- 新版视频流媒体平台EasyNVR如何在前端显示当前页面所在位置?
- Kotlin:04-基本数据类型详细介绍
- Kotlin:05-控制流 if、when、for、while
- android: API24 及以上版本调用系统相机时报:FileUriExposedException 的解决
- Typora 完美结合 PicGo,写作体验更佳!
- 视频流媒体服务器EasyNVR在CentOS6.5上编译报 No such file or directory错误
- Flink Timer(定时器)机制及实现详解
- android:运行时权限工具类的封装
- Android:非Activity跳转Activity时要加FLAG?