不影响已安装的低版本cuda8及其环境工具条件下安装新版本cuda9

根据参考链接,心中熟悉流程

  1. 参考1确定了【高版本gpu driver 可以兼容 低版本】,所以放心卸载仅支持cuda8.0的旧版,安装支持cuda9.0的新版gpu driver。因为driver与硬件相关,暂时我找不到可以隔离的方案
  2. 至于隔离cuda,至少有两种方案:
  • 基于ubuntu的多用户的隔离:每个用户的cuda安装在自己的home下面,不会影响原有的系统根目录下的cuda8.0的文件。然后修改每个用户自己的bashrc文件,将自己的cuda系统变量设置为指向自己home下面的cuda
  • 基于docker的隔离:基于docker-gpu,可以把cuda安装在每一个docker中,各个docker彼此隔离,并且与主机无关
  1. 创建新的cuda环境:
    采取某个作者的方案,使用anaconda建立虚拟环境,定制cuda、tensorflow,与其他用户的【深度学习环境】隔离开来

我的实际操作过程:

  • 现状及目标:
    机器上已运行了基于旧版本的driver,cuda8.0及一系列application,需要在保证原有环境能正常运行的条件下安装新cuda9.0,并实现各用户的cuda环境隔离

0. 我的软硬件环境:

object value
nvidia-gpu-brand & type Tesla-->K 80
OS Centos7
服务器是否有图形界面 No
原driver 367.48
即将安装的driver 384.145

1. 安装gpu driver:

lspci | grep -i nvidia


uname -m && cat /etc/*release

gcc --version

uname -r

cat /proc/driver/nvidia/version (检查当前的显卡驱动版本,如果更新driver出错,需要还原)


官网下面的step 3及之后的若干步骤
繁琐且非必须了,所以下面参考这篇博客进行显卡驱动安装:https://bluesmilery.github.io/blogs/a687003b/#2、安装CUDA-9-0-amp-cuDNN-7-1 (根据上述链接,去下载合适的driver)


  • 下面有两步非常非常重要

关闭 nouveau (无论是否有图形界面,建议都关闭掉)

vim /lib/modprobe.d/dist-blacklist.conf
#blacklist nvidiafb # 屏蔽掉这句
# 然后添加下面两句:
blacklist nouveau
options nouveau modeset=0
# 驱动安装好之后也可以不用改回来

lsmod | grep nouveau 【没有输出即图形界面已关闭】

卸载原有显卡驱动
这里与原有安装方式有关,分为dpg和runfile两种,实验室服务器之前的安装方式是dpg,系统是centos7,但根据查的参考博客,最好是用runfile、

// 如果是旧驱动是runfile安装方式,试一下下面的命令就知道了
sudo /usr/bin/nvidia-uninstall
// 如果上述命令失败,说明之前是非runfile方式装的,就转下面的方法:
yum remove nvidia*  // 干掉和nvidia有关的所有驱动文件

关闭 X Server

//注意,我在centos下面的命令,
//主要常规有几种命令:
init 3
systemctl stop gdm.service 
// 安装完后就:systemctl start gdm.service
//但是也会有意外,
//比如我这次就遇到上述命令无法关闭X //server的问题:
// 最后在一个国外小论坛上找到一个可行方案:
rm /tmp/ .X0-lock 
// 还有可能有 .X1-lock .X2-lock .etc
// 一个个试过去,我是 .X2-lock, .X3-lock .X4-lock
// 后来我猜测是【之前有啥应用锁住了X server,无法释放】

进入安装界面后一路选yes,注意不要 no
我的问题是:这一步发现 X server没有真正完全关闭,所以又回头找方案关闭
X server

给new drtiver file 设置x执行权限并安装

chmod u+x NVIDIA-Linux-x86_64-xxx.yyy.run
./NVIDIA-Linux-x86_64-xxx.yyy.run

测试是否兼容cuda 8.0

cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
make clean
make
./deviceQuery

// Result = PASS 即表示OK

之后建议重启下服务器,能减少各种错误。

比如我就遇到:
An NVIDIA kernel module ‘nvidia-uvm’
appears to already be loaded in your kernel

nvidia-smi查看占用进程pid
kill 掉
但是最简单的方法就是:重启服务器

至此,最麻烦也最容易出问题的driver部分就OK了。

2. 安装CUDA-9.0 & cuDNN-7.1:

  • 注:强烈建议之前就下载好driver,cuda,cudnnn,下载方法见前面的说明,并且做sha校验,确保文件完整性,我就犯了这个低级错误:下错了文件

  • 安装cuda:

chmod u+x cuda_9.0.176_384.81_linux.run
./cuda_9.0.176_384.81_linux.run
  • 接下来就是安装过程:
接下来会有一系列选择

是否安装显卡驱动:选no,因为已经装了最新的驱动
是否安装CUDA 9.0:选yes
输入安装位置:默认即可,因为默认位置就区分开了不同的CUDA版本
是否创建软链:选no,因为要实现多版本CUDA共存。待会儿手动建一个自己需要的软链接。
是否安装sample:选yes

不同系统可能会有 opengl选项,如果有,选择no
  • 安装几个补丁:
chmod u+x cuda_9.0.176.1_linux.run
./cuda_9.0.176_384.81_linux.run
chmod u+x cuda_9.0.176.2_linux.run
./cuda_9.0.176_384.81_linux.run
chmod u+x cuda_9.0.176.3_linux.run
./cuda_9.0.176_384.81_linux.run
  • CUDA测试:
cd /usr/local/cuda-9.0/samples/1_Utilities/deviceQuery
make
./deviceQuery

// Result = PASS 即表示OK
  • Cudnn安装:
tar zxvf cudnn-9.0-linux-x64-v7.1.tgz
// 默认解压为一个cuda目录,cd进去

cp cuda/include/cudnn.h /usr/local/cuda-9.0/include/
cp cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64/
chmod a+r /usr/local/cuda-9.0/include/cudnn.h
chmod a+r /usr/local/cuda-9.0/lib64/libcudnn*

3. 配置自己用户的环境变量,隔离cuda

  1. 之前的root 下面的 ~/.bashrc千万不能动
  2. 为cuda-9.0建立属于自己用户zh的软链接:
ln -s /usr/local/cuda-9.0 /usr/local/cuda_zh
  1. 修改自己的 .bashrc
export PATH="/usr/local/cuda_zh/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda_zh/lib64/:$LD_LIBRARY_PATH"
export LIBRARY_PATH="/usr/local/cuda_zh/lib64:$LIBRARY_PATH"

// 注意:一定要确保自己的cuda_zh优先级
//比系统变量的优先级高,所以自己路径写在最前面
  1. source ~/.bashrc
  2. 在不同用户下,分别执行 nvcc --version,查看各自的cuda版本。【我的情况是:一个8.0,一个9.0】

4. 配置下tensorflow-gpu环境:

  1. 切换国内源,安装 Anaconda:
  2. 切换国内源,安装tensorflow-gpu
  3. 测试tensorflow-gpu可用性
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
  1. 切换其他用户,检测其他用户之前的tensorflow-gpu是否能正常运行
  2. 注:上述安装具体过程参见我自己的一篇博客:ubuntu常见软件的安装

5. 遇到的最有印象的问题总结:

  1. sudoers文件被修改后需要恢复为read only 才能后续执行sudo 命令
  2. ubuntu带图形界面的测试机上的驱动安装前必须要禁用图形界面相关的noveau及X server,否则会出现循环登录的问题,出现了最简单的办法是【卸载了重装nvidia驱动】
  3. 驱动卸载的remove命令,只能后接nvidia*,否则会出问题
  4. centos上面 X server有时候会因为各种问题而不能【真正完全】关闭,我找到了一种方案:rm .X2-lock。可能还有其他可能
  5. 遇到一些异常bug,先google,并且试着重启下服务器
  6. 利用linux多用户的天然隔离效果+自己的bashrc用户变量可以做【某些软件的多版本共存】

参考链接:

  1. https://bluesmilery.github.io/blogs/a687003b/
    https://bluesmilery.github.io/blogs/a687003b/#2、安装CUDA-9-0-amp-cuDNN-7-1
    (先测试高版本显卡可以兼容低版本)

  2. https://blog.csdn.net/tunhuzhuang1836/article/details/79545625
    https://blog.csdn.net/ksws0292756/article/details/80120561
    (基于多用户的cuda隔离,只是影响当前用户,也不影响之前的主机环境)

  3. (基于docker的cuda级别隔离,可以拿来多用户共享某cuda且不干扰原来的主机环境)
    https://blog.skyaid-service.org/2017/11/16/nvidia-docker/
    https://blog.csdn.net/zh_jessica/article/details/79644544
    https://blog.opskumu.com/docker-gpu.html
    https://github.com/NVIDIA/nvidia-docker (官方tutorial)
    https://github.com/NVIDIA/nvidia-docker/wiki/Docker-Hub (官方tutorial)
    https://blog.csdn.net/sinat_26917383/article/details/78728215

  4. 深入理解整个安装流程进行所参考的:

  1. 实际操作后,出各种错后参考的一些链接
  1. centos 7下面的实际操作的参考:
  1. 我自己的ubuntu下面的常用软件安装连接:
    xxx
posted @ 2019-03-10 10:31  hzhang_NJU  阅读(1806)  评论(0编辑  收藏  举报