CUDA版本对显卡驱动版本有要求:
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
查看系统属性是否支持:
lspci | grep -i nvidia
uname -m && cat /etc/*release
gcc --version
uname -r
查找本机内核版本:
cat /proc/driver/nvidia/version
查看电脑驱动:
cat /var/log/dpkg.log | grep nvidia
查看该系统适合安装的驱动版本:
apt install ubuntu-drivers-common -y
ubuntu-drivers devices
安装指定nvidia版本驱动:
apt-get install nvidia-455
查看是否安装成功:
nvidia-smi
下载官网:
下载安装包:
安装:
sh cuda_11.1.0_455.23.05_linux.run
根据提示选中“continue”回车:
根据提示输入accept回车:
如下显示是默认状态,CUDA Toolkit是必须要安装的,其它的可选,不安装就把“X”就去掉:
#如果nvidia驱动是卸载后重新安装的就会显示如下页面,如果之前有安装则不会显示:
默认安装位置在/usr/local/下;
安装完成后/root(根)目录下也会生成一个NVIDIA_CUDA-11.1_Samples目录,进入该目录进行编译:
cd NVIDIA_CUDA-11.1_Samples/
make
#如下图表示编译成功
编译成功后会在当前目录下生成/bin目录,进入如下目录进行验证:
cd bin/x86_64/linux/release/
测试cuda是否可用,最后显示result=Pass表示成功:
./deviceQuery
./bandwidthTest
开头开到驱动的信息说明cuda已经在调用GPU.
设置环境变量:
vim /etc/profile
export PATH=/usr/local/cuda-11.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.1/lib64:$LD_LIBRARY_PATH
更新:
source /etc/profile
查看cuda版本:
apt install nvidia-cuda-toolkit
root@ubuntu:~# nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2020 NVIDIA Corporation
Built on Tue_Sep_15_19:10:02_PDT_2020
Cuda compilation tools, release 11.1, V11.1.74
Build cuda_11.1.TC455_06.29069683_0
如果编译完成后测试报错如下:一定是驱动和cuda版本不兼容,重新卸载并安装驱动后再重新安装cuda。
#切记要完全卸载nvidia驱动。
./deviceQuery
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
cudaGetDeviceCount returned 999
-> unknown error
Result = FAIL
卸载原驱动:
sudo apt-get remove --purge nvidia*
# sudo rmmod nvidia
rmmod: ERROR: Module nvidia is in use by: nvidia_modeset nvidia_uvm
root@ubuntu:/usr/local/src# sudo rmmod nvidia_uvm
root@ubuntu:/usr/local/src# sudo rmmod nvidia_modeset
rmmod: ERROR: Module nvidia_modeset is in use by: nvidia_drm
root@ubuntu:/usr/local/src# sudo rmmod nvidia_drm
root@ubuntu:/usr/local/src# sudo rmmod nvidia_modeset
root@ubuntu:/usr/local/src# sudo rmmod nvidia
rmmod: ERROR: Module nvidia is in use
查看下有哪些进程还在使用 nvidia*,kill 相关进程:
sudo lsof -n -w /dev/nvidia*
删除旧的CUDA:
apt-get remove nvidia-cuda-*
重启:
reboot
然后按照开头的cuda安装步骤重新安装cuda.
安装cudnn
同样要找到对应的版本,官网下载:
https://developer.nvidia.com/rdp/cudnn-archive
#需要注册并登录
网上推荐的直接解压复制文件的办法我这里验证不通过,所以就使用如下安装包进行安装:
dpkg -i libcudnn8_8.0.5.39-1+cuda11.1_amd64.deb
dpkg -i libcudnn8-dev_8.0.5.39-1+cuda11.1_amd64.deb
dpkg -i libcudnn8-samples_8.0.5.39-1+cuda11.1_amd64.deb
默认安装到/usr/src下面,进行编译:
cp -r /usr/src/cudnn_samples_v8/ $HOME
cd $HOME/cudnn_samples_v8/mnistCUDNN/
make clean && make
验证:
#passed表示成功。
pytorch gpu~ cuda cudnn安装是否成功的测试代码:
验证一:
# CUDA TEST
import torch
x = torch.Tensor([1.0])
xx = x.cuda()
print(xx)
# CUDNN TEST
from torch.backends import cudnn
print(cudnn.is_acceptable(xx))
验证二:
#用机器学习程序tensorflow
#载官网:://pypi.org/project/tensorflow/
我们使用pip安装指定版本,如果是python3就使用pip3:
pip3 install tensorflow-gpu==1.14
在terminal中输入:python
#后输入程序验证:
>>>import tensorflow as tf
>>>hello = tf.constant('Hello, TensorFlow!')
>>>sess = tf.Session()
>>>print(sess.run(hello))
如果安装成功,则会显示 Hello, TensorFlow!
验证三,系统自动分配设备:
root@ubuntu:/tmp# cat test1.py
#-*- coding:utf-8 -*-
import tensorflow as tf
# 新建一个 graph.
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
# 新建session with log_device_placement并设置为True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# 运行这个 op.
print(sess.run(c))
执行:
python test1.py
验证四,手动指定分配设备:
root@ubuntu:/tmp# cat test2.py
#-*- coding:utf-8 -*-
import tensorflow as tf
# 新建一个graph.
with tf.device('/cpu:0'):
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
# 新建session with log_device_placement并设置为True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# 运行这个op.
print(sess.run(c))
#卸载多余系统内核:
root@ubuntu:~# dpkg --get-selections |grep linux-image
linux-image-4.4.0-142-generic install
linux-image-4.4.0-204-generic install
linux-image-extra-4.4.0-142-generic install
linux-image-generic install
root@ubuntu:~# uname -a
Linux ubuntu 4.4.0-204-generic #236-Ubuntu SMP Fri Feb 19 16:11:27 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
root@ubuntu:~# apt-get purge linux-image-4.4.0-142-generic
nvcc和nvidia-smi显示的cuda版本不一致解释:
nvcc属于cuda的编译器,将程序编译成可执行的二进制文件,nvidia-smi全称是NVIDIA System Management Interface,是一种命令行使用工具,旨在帮助管理和监控NVIDIA GPU设备。
cuda有runtime api和driver api,两者都有对应的cuda版本,nvcc –version显示的就是前者对应的cuda版本,而nvidia-smi显示的是后者对应的cuda版本。
用于支持driver api的必要文件由GPU driver install安装,nvidia-smi就属于这一类API;而用于支持runtime api的必要文件是由cuda toolkit install安装的。nvcc是与cuda toolkit一起安装的cuda compiler-driver tool,它只知道自身构建时的cuda runtime版本,并不知道安装了什么版本的GPU driver,甚至不知道是否安装了GPU driver。
cuda toolkit install通常会集成了GPU driver install,如果你的cuda均通过cuda toolkit install来安装,那么runtime api和driver api的版本应该是一致的,也就是说,nvcc -V和nvidia-smi显示的版本正常是一样的,否则你可能使用了单独的GPU driver install来安装GPU driver,这样就会导致nvidia-smi和nvcc -V显示的版本不一样。
通常,driver api的版本能向下兼容runtime api的版本,即nvidia-smi显示的版本大于nvcc -V时通常是可以使用的。
#runtime api就是runfile类型的安装文件,driver api就是deb类型的安装文件。
驱动下载官网:https://www.nvidia.cn/Download/index.aspx?lang=cn