自学内容网 自学内容网

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)!