这里写目录标题
1.简介
由于Tensoflow-gpu对cuda版本严格的要求,TensoFlow-gpu==2.5.0需要CUDA11.2版本才能使用GPU(conda安装的TensorFlow可以不用安装cuDNN,pip方式安装需要)。
1.1测试TensorFlow能否使用GPU
import tensorflow as tf
# 查看gpu和cpu的数量
gpus = tf.config.experimental.list_physical_devices(device_type='GPU')
cpus = tf.config.experimental.list_physical_devices(device_type='CPU')
print(gpus, cpus)
2.安装CUDA11.2
2.1下载安装包
sudo wget https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda_11.2.0_460.27.04_linux.run
2.2安装
sudo sh cuda_11.2.0_460.27.04_linux.run
2.3配置环境变量
2.3.1打开bashrc
方式一(推荐)
sudo gedit ~/.bashrc
方式二
sudo vim ~/.bashrc
2.3.2末尾加上
export PATH=$PATH:/usr/local/cuda-11.2/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.2/lib64
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda-11.2:/lib64
2.3.3 内容生效
source ~/.bashrc
2.4 测试CUDA11.2是否安装成功
nvcc -V
3.安装cuDNN
3.1官网下载安装包
去官网注册一个账号,下载对应版本的cuDNN。
只需下载cuDNN Library for Linux (x86_64)就行
下载安装包:
cudnn-11.2-linux-x64-v8.1.1.33.tgz
解压得到一个名为cuda的目录
3.2安装cuDNN
cp cuda/lib64/* /usr/local/cuda-11.2/lib64/
cp cuda/include/* /usr/local/cuda-11.2/include/
3.3测试
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
4.完全卸载CUDA和cuDNN
# 到目录下
cd /usr/local/cuda-11.2/bin
# 执行
sudo ./cuda-uninstaller
继续清楚残余文件
sudo apt-get remove cuda
sudo apt autoremove
sudo apt-get remove cuda*
到文件下
cd /usr/local/
删掉两个cuda文件夹
大功告成!
补充:一般情况我们都安装了显卡驱动,所以这里第一项驱动最好不勾选,其他默认安装
代码测试GPU能否使用
import torch
flag = torch.cuda.is_available()
if flag:
print("CUDA可使用")
else:
print("CUDA不可用")
ngpu= 1
# Decide which device we want to run on
device = torch.device("cuda:0" if (torch.cuda.is_available() and ngpu > 0) else "cpu")
print("驱动为:",device)
print("GPU型号: ",torch.cuda.get_device_name(0))
import torch
import time
print(torch.__version__)
print(torch.cuda.is_available())
# print('hello, world.')
a = torch.randn(10000, 1000)
b = torch.randn(1000, 2000)
t0 = time.time()
c = torch.matmul(a, b)
t1 = time.time()
print(a.device, t1 - t0, c.norm(2))
device = torch.device('cuda')
a = a.to(device)
b = b.to(device)
t0 = time.time()
c = torch.matmul(a, b)
t2 = time.time()
print(a.device, t2 - t0, c.norm(2))
t0 = time.time()
c = torch.matmul(a, b)
t2 = time.time()
print(a.device, t2 - t0, c.norm(2))