Ubuntu - NIVDIA相关配置(显卡驱动,cuda,cudnn环境配置)

显卡驱动配置

平时总装服务器,没发现安装显卡驱动有什么麻烦,直接命令安装就可以了

sudo ./NVIDIA-Linux-x86_64-384.111.run -no-x-check -no-nouveau-check -no-opengl-files #安装驱动

但是最近安装本地电脑时出了些问题:

ERROR: Unable to load the kernel module 'nvidia.ko'.  This happens most
frequently when this kernel module was built against the wrong or
improperly configured kernel sources, with a version of gcc that differs
from the one used to build the target kernel, or if a driver such as
rivafb/nvidiafb is present and prevents the NVIDIA kernel module from
obtaining ownership of the NVIDIA graphics device(s), or NVIDIA GPU
installed in this system is not supported by this NVIDIA Linux graphics
driver release.

找到了一个解决方法,参考:https://hellozhaozheng.github.io/z_post/%E5%85%B6%E4%BB%96-Ubuntu%E7%B3%BB%E7%BB%9F%E4%B8%8B%E5%AE%89%E8%A3%85NVIDIA%E9%A9%B1%E5%8A%A8/

博客中表示,遇到此问题, 要么是安装本身不匹配或者破损, 要么没有完全禁用nouveau, 根据博客中的安装方式禁用即可.

此处简单转述过来:

卸载已安装的驱动

# 如果过去已有nvidia驱动安装,首先卸载所有安装的nvidia驱动

sudo service lightdm stop # 卸载之前应该先停止 lightdm
sudo /usr/bin/nvidia-uninstall
sudo apt-get --purge remove "nvidia-*"

# 卸载完以后,重启,重启,重启(reboot command: init 6)

 禁用nouveau

# 禁用nouveau驱动和相关的驱动包
sudo gedit /etc/modprobe.d/blacklist.conf

# 在文件的最后一行加入下面的命令,屏蔽有影响的驱动包

blacklist rivafb
blacklist vga16fb
blacklist nouveau
blacklist nvidiafb
blacklist rivatv

# 测试是否禁用成功
lsmod | grep nouveau

# 如果有输出则代表nouveau正在加载。修改blacklist-nouveau.conf(若没有则创建)
sudo gedit /etc/modprobe.d/blacklist-nouveau.conf
# 文件中输入以下内容并保存:
blacklist nouveau
options nouveau modeset=0

# 之后更新
sudo update-initramfs -u
# 重启,再次查看
lsmod | grep nouveau

# 没有输出即为禁用成功,重启后很明显可以发现终端命令中打字体变大了(勾起了我最早的回忆。)

 安装驱动

# 安装显卡驱动
# 安装需要的依赖
sudo apt update
sudo apt install dkms build-essential linux-headers-generic

# 32 位库兼容性支持相关文件
sudo apt-get install lib32ncurses5
sudo apt-get install lib32z1

# 安装驱动包
# Ctrl+Alt+F1 进入命令提示符界面
sudo service lightdm stop

# 更改执行权限, 进行安装, 不要忘了后面的选项
sudo chmod 755 NVIDIA-Linux-x86_64-384.111.run  #修改权限(否则没有访问权限,无法进行指令安装)
sudo ./NVIDIA-Linux-x86_64-384.111.run –no-x-check –no-nouveau-check –no-opengl-files #安装驱动
#–no-x-check 关闭X服务
#–no-nouveau-check 禁用nouveau
#–no-opengl-files 不安装OpenGL文件

ps:nvidia-smi反应时间长的问题:

nvidia-smi -pm 1 # 修改一下nvidia的persistent状态就行了

~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~

多CUDA环境配置

修改CUDA配置路径 ~/.bashrc:

export PATH=/home1/pbliu/Software/cuda-10.1-7.6.4/bin:$PATH
export LD_LIBRARY_PATH=/home1/pbliu/Software/cuda-10.1-7.6.4/lib64:$LD_LIBRARY_PATH
export LIBRARY_PATH=/home1/pbliu/Software/cuda-10.1-7.6.4/lib64:$LIBRARY_PATH
export CUDA_HOME=/home1/pbliu/Software/cuda-10.1-7.6.4:$CUDA_HOME

sudo ln -s /usr/local/cuda-10.0 /usr/local/cuda 修改cuda的软链接???

LD_LIBRARY_PATH和LIBRARY_PATH:

参考:https://www.cnblogs.com/panfeng412/archive/2011/10/20/library_path-and-ld_library_path.html

# LIBRARY_PATH环境变量用于在程序编译期间查找动态链接库时指定查找共享库的路径,例如,指定gcc编译需要用到的动态链接库的目录。设置方法如下(其中,LIBDIR1和LIBDIR2为两个库目录):

export LIBRARY_PATH=LIBDIR1:LIBDIR2:$LIBRARY_PATH

# LD_LIBRARY_PATH环境变量用于在程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径,注意,LD_LIBRARY_PATH中指定的路径会在系统默认路径之前进行查找。设置方法如下(其中,LIBDIR1和LIBDIR2为两个库目录):

export LD_LIBRARY_PATH=LIBDIR1:LIBDIR2:$LD_LIBRARY_PATH

切换cuda版本:

参考:https://www.jianshu.com/p/6a6fbce9073f

1 删除现有的软链接并建立新链接

$ rm -rf cuda 
# 注:删除软连接, rm -rf cuda  不是 rm -rf cuda/,后者会删除原始文件

$ sudo ln -s /usr/local/cuda-11.0.1 /usr/local/cuda 
# 和新安装的cuda文件夹建立新链接
# 注:cuda安装命令
# $ chmod 744 cuda_11.0.1_450.36.06_linux.run
# $ ./cuda_11.0.1_450.36.06_linux.run --silent --toolkit --toolkitpath=/usr/local/cuda-11.0.1

2 我实际操作过程中发现nvcc -V还没有切换过来,这时候需要修改/etc/profile

$ sudo vim /etc/profile
# 其中有两行环境变量:(原来我用的10.0的cuda)
# export PATH=/usr/local/cuda-10.0/bin:$PATH
# export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64$LD_LIBRARY_PATH

# 将这两行注释,换成cuda软链接的路径,这样我们以后直接修改软链接就可以了,就不用再来修改这个文件了,当然这个只是全局修改的方式
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda

~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~

Linux cudnn配置

最传统的方式可以下载第三个文件,下载后的文件为cudnn-10.0-linux-x64-v7.4.2.24.solitairetheme这种莫名其妙的格式

# 将后缀改为tgz格式就可以用tar命令正常解压了,注意不是tar.gz
cp cudnn-10.0-linux-x64-v7.4.2.24.solitairetheme cudnn-10.0-linux-x64-v7.4.2.24.tgz

# 配置(官网)
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*

# 查看结果
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

# 如果要修改版本,直接覆盖即可,再将有版本标示的文件sudo删掉即可

######   8.0 version  ###### 因为8.0版本的更新里边文件多了,命令些许不同
$ 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*

~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~

pytorch和cuda相关的一些

# 如何查看pytorch实际使用时的cuda目录
>>> import torch
>>> import torch.utils
>>> import torch.utils.cpp_extension
>>> torch.utils.cpp_extension.CUDA_HOME        #输出 Pytorch 运行时使用的 cuda 

# 如何查看pytorch是哪个版本cuda编译的
>>> import torch
>>> torch.version.cuda    #输出一个 cuda 版本

还有发现一个有趣的事情, 在新建的虚拟环境中使用ipython还是过去base的python环境, 如下所示. 具体如何在envs中使用ipython调用对应的python环境还不知道怎么设置.

(MONAI) kani@miracle-101:~$ which python
/home1/kani/anaconda3/envs/MONAI/bin/python
(MONAI) kani@miracle-101:~$ which ipython
/home1/kani/anaconda3/bin/ipython

~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~

清理显卡僵尸进程

fuser -v /dev/nvidia*

未完待续...有的地方还没搞明白
 

Guess you like

Origin blog.csdn.net/Eric_Evil/article/details/103283703
Recommended