ubuntu 安装显卡驱动gpu-cuda
一、定义
1.系统查看
2.安装驱动
3.安装cudn
4.安装cudnn
5.安装nccl
6.安装docker
7.安装torch
8.测试cudn
9.测试cudnn
10.测试nccl
二、实现
1.系统查看
#查看系统版本
cat /proc/version
#查看显卡
sudo lshw -C display
2.安装驱动
2. 1. 禁用 nouveau 驱动
sudo vim /etc/modprobe.d/blacklist-nouveau.conf
文件最后加入以下内容 (如果没有需要添加)
blacklist nouveau
options nouveau modeset=0
重启机器
reboot
重启后查看确认
lsmod | grep nouveau
没有内容输出,说明禁用成功
2.2 安装gcc/cmake
sudo apt-get update
sudo apt-get install gcc
sudo apt-get install cmake
gcc --version
cmake --version
2.3 安装驱动
./L40-NVIDIA-Linux-x86_64-550.54.15.run
2.4 查看版本 : nvidia-smi
3.安装cudn
卸载久版本
sudo apt-get remove --purge nvidia-*
sudo apt-get autoremove
sudo rm -rf /usr/local/cuda*
3.1. 查看系统版本:cat /proc/version
根据显卡驱动型号选取cuda,产品型号对应表:https://docs.nvidia.com/deploy/cuda-compatibility/index.html
cat /proc/driver/nvidia/version
驱动版本对应的算力,决定cuda 的型号。 且最好将cuda 驱动版本一致。
https://blog.csdn.net/weixin_56119039/article/details/125828575
3.2. 打开官网,安装cudn: https://developer.nvidia.com/cuda-toolkit-archive
选择local安装
注意!由于我们之前以及安装过驱动了,这次不要再安装驱动了。
输入accept
在Driver这里按ENTER勾掉!
然后选择Install
最后,打开终端,配置环境变量:
vim ~/.bashrc
最后添加
export PATH=$PATH:/usr/local/cuda-12.4/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-12.4/lib64
#执行
source ~/.bashrc
nvcc -V 查看版本
3.3 分析-nvidia-smi 中的CUDA 版本与 nvcc不一致
CUDA 有两种API,分别是 运行时 API 和 驱动API,即所谓的 Runtime API 与 Driver API。
nvidia-smi 的结果除了有 GPU 驱动版本型号,还有 CUDA Driver API的型号,而nvcc的结果是对应 CUDA Runtime API
nvidia-smi 中的 CUDA version 表示当前显卡驱动最高能支持的 CUDA 版本。pytorch 的 cudatoolkit版本指其所编译好的 CUDA 操作版本。
后面cuda 应用,对应于runtime API
4.安装cudnn(cuda的一些底层库,如卷积算子)
4.1. 安装省略, docker 自带安装cudn、cudnn。
4. 2. ubuntu 安装cudnn
https://developer.nvidia.com/rdp/cudnn-archive
https://developer.nvidia.com/cudnn-downloads
查看版本:cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
或者
cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
4.3. 遇到问题:cat: /usr/local/cuda/include/cudnn_version.h: No such file or directory
见:https://blog.csdn.net/Sally9116/article/details/124019795
5.安装nccl: 通讯库(注意安装时需要检查硬件是否支持nvlink)
https://docs.nvidia.com/deeplearning/nccl/install-guide/index.html#debian
https://developer.nvidia.com/nccl/nccl-legacy-downloads
Network Installer for Ubuntu22.04
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
$ sudo dpkg -i cuda-keyring_1.1-1_all.deb
$ sudo apt-get update
sudo apt install libnccl2=2.24.3-1+cuda12.4 libnccl-dev=2.24.3-1+cuda12.4
是否安装成功 #确认系统nccl版本
dpkg -l |grep libnccl
6.安装docker
见docker 安装教程
7.安装torch
https://pytorch.org/get-started/previous-versions/
8.测试cudn
import torch
print('CUDA版本:',torch.version.cuda)
print('Pytorch版本:',torch.__version__)
print('显卡是否可用:','可用' if(torch.cuda.is_available()) else '不可用')
print('显卡数量:',torch.cuda.device_count())
print('是否支持BF16数字格式:','支持' if (torch.cuda.is_bf16_supported()) else '不支持')
print('当前显卡型号:',torch.cuda.get_device_name())
print('当前显卡的CUDA算力:',torch.cuda.get_device_capability())
print('当前显卡的总显存:',torch.cuda.get_device_properties(0).total_memory/1024/1024/1024,'GB')
print('是否支持TensorCore:','支持' if (torch.cuda.get_device_properties(0).major >= 7) else '不支持')
print('当前显卡的显存使用率:',torch.cuda.memory_allocated(0)/torch.cuda.get_device_properties(0).total_memory*100,'%')
9.测试cudnn
import torch
import torch.nn as nn
import torch.optim as optim
torch.backends.cudnn.benchmark = True
# 定义一个简单的卷积神经网络
class SimpleCNN(nn.Module):
def __init__(self):
super(SimpleCNN, self).__init__()
self.conv1 = nn.Conv2d(1, 32, kernel_size=3)
self.conv2 = nn.Conv2d(32, 64, kernel_size=3)
def forward(self, x):
x = self.conv1(x)
x = nn.functional.relu(x)
x = self.conv2(x)
x = nn.functional.relu(x)
x = x.view(x.size(0), -1)
return x
# 定义模型和优化器
model = SimpleCNN().cuda() # 将模型移到 GPU
optimizer = optim.Adam(model.parameters())
# 随机生成一些输入数据
input = torch.randn(64, 1, 28, 28).cuda() # 输入数据移到 GPU
output = model(input) # 前向传播
print(output.shape)
10.nvlink 安装测试
硬件连接: nvlink 主要应用于gpu 之间的通信
nvidia-smi nvlink -s #查看状态
nvidia-smi topo -m #查看 GPU 之间的通讯方式
11.测试nccl
nccl 测试:
git clone https://github.com/NVIDIA/nccl-tests.git
cd nccl-tests
make
# 一机8卡测试 -g 8
$ ./build/all_reduce_perf -b 8 -e 128M -f 2 -g 8
单卡测试结果
测试2
import torch
import torch.distributed as dist
import torch.multiprocessing as mp
# rank:进程号 #world_size: 全局进程总数
def worker(rank):
dist.init_process_group("nccl", rank=rank, world_size=2)
torch.cuda.set_device(rank)
tensor = torch.randn(10).cuda()
dist.all_reduce(tensor)
torch.cuda.synchronize(device=rank)
if __name__ == "__main__":
os.environ["MASTER_ADDR"] = "localhost"
os.environ["MASTER_PORT"] = "29501"
os.environ["TORCH_CPP_LOG_LEVEL"]="INFO"
os.environ["TORCH_DISTRIBUTED_DEBUG"] = "DETAIL"
mp.spawn(worker, nprocs=2, args=()) #nprocs 总进程数=world_size
# NCCL_DEBUG=INFO python test3.py
原文地址:https://blog.csdn.net/weixin_40777649/article/details/145275016
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!