GPU系列(六)-NVIDIA GPU 驱动安装

news2024/9/24 11:32:43

1. 安装驱动

1.1 查看系统是否识别显卡

lspci | grep -i vga

03:00.0 VGA compatible controller: NVIDIA Corporation GP102 [TITAN X] (rev a1)
0a:00.0 VGA compatible controller: Matrox Electronics Systems Ltd. G200eR2 (rev 01)

识别出显卡为 NVIDIA 的 TITAN X。

1.2 禁用 nouveau

lsmod | grep nouveau

如果有输出,说明 nouveau 已经加载,需要禁用。如果没有输出,则可以跳过此操作。

1.2.1 Ubuntu 系统

1)关闭自动更新

sed -i.bak 's/1/0/' /etc/apt/apt.conf.d/10periodic

编辑配置文件:

vim /etc/apt/apt.conf.d/50unattended-upgrades

去掉以下内容的注释:

Unattended-Upgrade::Package-Blacklist {
    "linux-image-*";
    "linux-headers-*";
};

2)编辑系统 blacklist

vim /etc/modprobe.d/blacklist-nouveau.conf

添加以下配置禁用 nouveau:

blacklist nouveau
options nouveau modeset=0

3)更新 initramfs

update-initramfs -u

4)重启系统

reboot
1.2.2 CentOS 系统

1)编辑系统 blacklist

vim /etc/modprobe.d/blacklist-nouveau.conf

添加配置禁用 nouveau

blacklist nouveau
options nouveau modeset=0

2)更新 initramfs

mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
dracut /boot/initramfs-$(uname -r).img $(uname -r)

3)重启系统

reboot

4)验证是否禁用成功

lsmod | grep nouveau

此时不应该有输出。

1.3 安装驱动

1.3.1 下载驱动

访问 Official Drivers | NVIDIA 选择对应的驱动版本下载。这里以 Linux 64-bit 的 TITAN X 驱动为例:

wget https://cn.download.nvidia.com/XFree86/Linux-x86_64/535.146.02/NVIDIA-Linux-x86_64-535.146.02.run
1.3.2 安装驱动
chmod +x NVIDIA-Linux-x86_64-535.146.02.run
./NVIDIA-Linux-x86_64-535.146.02.run
1.3.3 重启系统
reboot
1.3.4 验证是否安装成功
nvidia-smi

2. 安装 nvidia-container-runtime

2.1 安装 nvidia-container-runtime

2.1.1 Ubuntu 系统
curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | sudo apt-key add -distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
sudo apt-get update
apt-get install -y nvidia-container-runtime
 2.1.2 CentOS 系统
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.repo | sudo tee /etc/yum.repos.d/nvidia-container-runtime.repo
yum install -y nvidia-container-runtime

2.2 Docker 配置

2.2.1 更新 Docker 配置

1)配置 Docker 开启 GPU 支持

vim /etc/docker/daemon.json

添加以下内容:

{
  "default-runtime": "nvidia",
  "runtimes": {
    "nvidia": {
      "path": "/usr/bin/nvidia-container-runtime",
      "runtimeArgs": []
    }
  }
}

2)重启 Docker

systemctl daemon-reload
systemctl restart docker

3)验证安装结果

docker run --rm --gpus all ubuntu nvidia-smi

此时可以看到输出的 GPU 信息。

2.3 Containerd 配置

1)更新 Containerd 配置

vim /etc/containerd/config.toml

在与 plugins."io.containerd.grpc.v1.cri".containerd.runtimes 中添加:

        [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia]
          privileged_without_host_devices = false
          runtime_engine = ""
          runtime_root = ""
          runtime_type = "io.containerd.runc.v2"
          [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia.options]
            BinaryName = "/usr/bin/nvidia-container-runtime"
            CriuImagePath = ""
            CriuPath = ""
            CriuWorkPath = ""
            IoGid = 0
            IoUid = 0
            NoNewKeyring = false
            NoPivotRoot = false
            Root = ""
            ShimCgroup = ""
            SystemdCgroup = true

将默认的 runtime 设置为 nvidia

    [plugins."io.containerd.grpc.v1.cri".containerd]
      default_runtime_name = "nvidia"

2)重启 Containerd

systemctl daemon-reload
systemctl restart containerd

3)验证安装结果

nerdctl run --rm --gpus all registry-1.docker.io/library/ubuntu nvidia-smi

3. 安装 CUDA Toolkit

CUDA 是 NVIDIA 推出的通用并行计算架构,用于在 GPU 上进行通用计算。CUDA Toolkit 是 CUDA 的开发工具包,包含了编译器(NVCC)、库、调试器等工具。

3.1 检查系统是否支持

参考 CUDA Installation Guide for Linux 有最新的 CUDA 对 CPU 架构、操作系统、GCC 版本、GLIBC 版本的依赖要求。

1)检查系统版本

uname -m && cat /etc/os-release

2)检查 GCC 版本

gcc --version

Ubuntu 下可以使用以下命令安装 GCC 9

apt install build-essential gcc-9 g++-9
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g++ g++ /usr/bin/g++-9 --slave /usr/bin/gcov gcov /usr/bin/gcov-9

3)检查 GLIBC 版本

ldd --version

3.2 兼容性说明

使用 nvidia-smi 命令可以看到一个 CUDA 的版本号,但这个版本号是 CUDA driver libcuda.so 的版本号,不是 CUDA Toolkit 的版本号。

如上图 CUDA driver 是向后兼容的,即支持之前的 CUDA Toolkit 版本。

如上图,CUDA driver 支持向前的次要版本兼容,即大版本号相同就支持。参考[2]。

3.3 安装 CUDA

1)下载 CUDA

前往 CUDA Toolkit 12.4 Update 1 Downloads | NVIDIA Developer 选择对应的版本下载。这里以 Ubuntu 20.04 的 runfile(local) 为例:

wget https://developer.download.nvidia.com/compute/cuda/12.3.1/local_installers/cuda_12.3.1_545.23.08_linux.run

2)安装 CUDA

sh cuda_12.3.1_545.23.08_linux.run

3)添加环境变量

vim ~/.bashrc

增加以下内容:

export PATH=$PATH:$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda

使环境变量立即生效:

source ~/.bashrc

4)验证安装结果

nvcc -V

4. 安装 cuDNN

cuDNN 是 NVIDIA 基于 CUDA 开发的深度神经网络加速库。

1)检查 cuDNN 依赖

前往 Support Matrix — NVIDIA cuDNN v9.1.1 documentation 查看 cuDNN 与 CUDA、Driver、操作系统的兼容性是否满足要求。

2)下载 cudnn

前往 cuDNN Archive | NVIDIA Developer 下载对应的版本,选择 Local Installer for Linux x86_64 (Tar) ,会得到一个 tar.xz 的压缩包。

3)解压 cudnn

tar -xvf cudnn-linux-*-archive.tar.xz

4)安装 cudnn

cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include
cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64
chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

5. 开启持久模式

使用 nvidia-smi -pm 1 能够开启持久模式,但重启后会失效,同时使用 nvidia-smi 的方式已经被归档,推荐使用 nvidia-persistenced 常驻进程。

开启持久模式之后,驱动一直会被加载,会消耗更多能源,但能有效改善各种显卡故障。

1)新建配置文件

cat <<EOF > /lib/systemd/system/nvidia-persistenced.service

[Unit]
Description=NVIDIA Persistence Daemon
After=syslog.target

[Service]
Type=forking
PIDFile=/var/run/nvidia-persistenced/nvidia-persistenced.pid
Restart=always
ExecStart=/usr/bin/nvidia-persistenced --verbose
ExecStopPost=/bin/rm -rf /var/run/nvidia-persistenced/*
TimeoutSec=300

[Install]
WantedBy=multi-user.target
EOF

2)启动持久模式

systemctl start nvidia-persistenced

3)查看服务状态

systemctl status nvidia-persistenced

4)开机启动持久模式

systemctl enable nvidia-persistenced

如果装配了 NVLink 或者 NVSwitch ,还需要安装 nvidia-fabricmanager,否则无法正常工作。

1)下载 nvidia-fabricmanager

在 Index of /compute/cuda/repos/ubuntu2004/x86_64 找到合适的版本。

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/nvidia-fabricmanager-535_535.129.03-1_amd64.deb

2)安装 nvidia-fabricmanager

apt install ./nvidia-fabricmanager-535_535.129.03-1_amd64.deb

3)启动 nvidia-fabricmanager 服务

systemctl start nvidia-fabricmanager

4)查看 nvidia-fabricmanager 服务

systemctl status nvidia-fabricmanager

5)开机自启

systemctl enable nvidia-fabricmanager

7. 安装 InfiniBand 驱动 

wget https://content.mellanox.com/ofed/MLNX_OFED-4.9-5.1.0.0/MLNX_OFED_LINUX-4.9-5.1.0.0-ubuntu20.04-x86_64.tgz
tar zxf MLNX_OFED_LINUX-4.9-5.1.0.0-ubuntu20.04-x86_64.tgz
cd MLNX_OFED_LINUX-4.9-5.1.0.0-ubuntu20.04-x86_64
./mlnxofedinstall

然后重启机器,可以查看驱动状态:

systemctl status openibd

● openibd.service - openibd - configure Mellanox devices
     Loaded: loaded (/lib/systemd/system/openibd.service; enabled; vendor preset: enabled)
     Active: active (exited) since Mon 2024-03-11 15:30:58 CST; 1 weeks 0 days ago
       Docs: file:/etc/infiniband/openib.conf
    Process: 2261 ExecStart=/etc/init.d/openibd start bootid=65648015406c4b88b831c8b907ad4ec6 (code=exited, status=0/SUCCESS)
   Main PID: 2261 (code=exited, status=0/SUCCESS)
      Tasks: 0 (limit: 618654)
     Memory: 24.6M
     CGroup: /system.slice/openibd.service

通过 ibstat 可以查看设备信息:

ibstat

ibstat
CA 'mlx5_0'
	CA type: MT4123
	Number of ports: 1
	Firmware version: 20.35.1012
	Hardware version: 0
	Node GUID: 0x946dae03008bcc68
	System image GUID: 0x946dae03008bcc68
	Port 1:
		State: Active
		Physical state: LinkUp
		Rate: 200
		Base lid: 124
		LMC: 0
		SM lid: 1
		Capability mask: 0xa651e848
		Port GUID: 0x946dae03008bcc68
		Link layer: InfiniBand
CA 'mlx5_1'
	CA type: MT4123
	Number of ports: 1
	Firmware version: 20.35.1012
	Hardware version: 0
	Node GUID: 0x946dae03008bcc3c
	System image GUID: 0x946dae03008bcc3c
	Port 1:
		State: Active
		Physical state: LinkUp
		Rate: 200
		Base lid: 126
		LMC: 0
		SM lid: 1
		Capability mask: 0xa651e848
		Port GUID: 0x946dae03008bcc3c
		Link layer: InfiniBand

8. 部署 k8s-rdma-shared-dev-plugin

为了让 Kubernetes 能够发现 RDMA 设备,比如 IfiniBand ,并且被多个 Pod 使用,需要安装 k8s-rdma-shared-dev-plugin。

1)安装 k8s-rdma-shared-dev-plugin

kubectl apply -f https://raw.githubusercontent.com/shaowenchen/hubimage/main/network/k8s-rdma-shared-dev-plugin.yaml

2)修改配置文件

kubectl -n kube-system edit cm rdma-devices

3)Pod 中配置使用

在 spec 中配置 rdma/ib 就可以使用了。

spec:
  containers:
    - command:
        - /bin/sh
        - -c
        - mkdir -p /var/run/sshd; /usr/sbin/sshd;bash llama_distributed_v3.0_check.sh
      resources:
        limits:
          cpu: "64"
          memory: 950Gi
          rdma/ib: "8"
          tencent.com/vcuda-core: "800"
        requests:
          cpu: "64"
          memory: 950Gi
          rdma/ib: "8"
          tencent.com/vcuda-core: "800"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1644979.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

对比试验系列:Faster—RCNN配置及训练自己数据集

一、源码下载 GitHub - bubbliiiing/faster-rcnn-pytorch: 这是一个faster-rcnn的pytorch实现的库&#xff0c;可以利用voc数据集格式的数据进行训练。这是一个faster-rcnn的pytorch实现的库&#xff0c;可以利用voc数据集格式的数据进行训练。. Contribute to bubbliiiing/fa…

【LeetCode算法】1768. 交替合并字符串

提示&#xff1a;此文章仅作为本人记录日常学习使用&#xff0c;若有存在错误或者不严谨得地方欢迎指正。 文章目录 一、题目二、思路三、解决方案 一、题目 给你两个字符串 word1 和 word2 。请你从 word1 开始&#xff0c;通过交替添加字母来合并字符串。如果一个字符串比另…

数据结构-二叉树-二叉搜索树

一、概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者具有以下性质的二叉树&#xff1a; 若它的左子树不为空&#xff0c;则左树上所有节点的值都小于根节点的值。 若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根节点的值。 它…

Transformer 解析 超级详细版

推荐学习视频 汉语自然语言处理-从零解读碾压循环神经网络的transformer模型(一)- 注意力机制-位置编码-attention is all you need_哔哩哔哩_bilibili 目录 首先下transformer和LSTM的最大区别是什么&#xff1f; 1.positional \ encoding, 即位置嵌入(或位置编码); 2 自注…

软考-系统集成项目管理中级--常见计算题考点汇总

1、决策树和期望货币价值(决策树、表)---风险管理 很简单的题目&#xff0c;如下题目我们不再讲解。相信大家听了基础课都会做如果不会做&#xff0c;建议再听下基础课。 有点难度的题目&#xff0c;请大家先做&#xff0c;如果有疑问&#xff0c;可以听课&#xff08;课程私信…

力扣:931. 下降路径最小和

931. 下降路径最小和 给你一个 n x n 的 方形 整数数组 matrix &#xff0c;请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开始&#xff0c;并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列&#xff08;即…

全新神经网络架构KAN一夜爆火!

一种全新的神经网络架构KAN&#xff0c;诞生了&#xff01; 与传统的MLP架构截然不同&#xff0c;且能用更少的参数在数学、物理问题上取得更高精度。 比如&#xff0c;200个参数的KANs&#xff0c;就能复现DeepMind用30万参数的MLPs发现数学定理研究。 不仅准确性更高&#…

smardatenR5C40无代码新版本正式发布!附功能详解

smardatenR5C40新特性在25日晚直播发布&#xff0c;新版本上线了两大全新功能&#xff0c;对四大已有能力进行了增强&#xff01;没来得及参与的宝子们可以在“数睿数据视频号”中查看直播回放。 往下看具体详解&#xff0c;这些功能正被你所需要 一、全新能力发布 01数据报表…

图像识别——玩转YOLO网络

图像识别——玩转YOLO网络 YOLO&#xff0c;全称“You Only Look Once”&#xff0c;意为你只需要看一次&#xff0c;是一种快速、准确的目标检测算法。它由Joseph Redmon等人在2016年提出&#xff0c;其核心思想是将输入图像划分为SS个网格单元&#xff0c;每个网格预测B个边…

Day19 代码随想录打卡|字符串篇---反转字符串II

题目&#xff08;leecode T541&#xff09;&#xff1a; 给定一个字符串 s 和一个整数 k&#xff0c;从字符串开头算起&#xff0c;每计数至 2k 个字符&#xff0c;就反转这 2k 字符中的前 k 个字符。 如果剩余字符少于 k 个&#xff0c;则将剩余字符全部反转。如果剩余字符小…

现代信号处理8_递归的最小二乘(CSDN_20240505)

递归的最小二乘大约出现在50年前。递归&#xff0c;就是在已经算出的结果的基础下&#xff0c;当新的数据到来时&#xff0c;不需要再对数据进行一次完整的运算&#xff0c;而是在已有结果的基础上做一些简单的调整&#xff0c;就能得到新的结果。使用递归的好处&#xff1a; …

矩阵式键盘的控制

键盘扫描是最 为常用的工作方式&#xff0c;扫描方式又可分为程序程扫描、定时扫描和中断扫描。程序扫描是指在 特定的程序位置段上安排键盘扫描程序读取键盘状态。定时扫描是指利用单片机内部或扩展 的定时器产生定时中断&#xff0c;在中断中进行键盘扫描的工作方式。中断扫描…

2024年第二十六届“华东杯”(B题)大学生数学建模挑战赛|数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 让我们来看看华东杯 (B题&#xff09;&#xff01; 第一个问题…

链表经典面试题02--链表的带环问题

目录 引言 环形链表 题目描述: 思路分析: 代码展示: 面试中遇到的问题: 环形链表Ⅱ 题目描述: 思路分析: 代码展示: 面试中遇到的问题: 方法二: 随机链表的复制 题目描述: 思路分析: 代码展示: 小结 引言 这个专题专门讲解链表的带环问题,并且对面试有关链表带环…

华中科技大学雷达站部署

一&#xff1a;项目地址 GitHub - HUSTLYRM/HUST_Radar_2023: 华中科技大学狼牙战队 RoboMaster 2023赛季 雷达站 二&#xff1a;安装依赖 2.1创建虚拟环境 首先是程序是基于python3.8完成&#xff0c;所以创建虚拟环境的时候&#xff0c;选择3.8的虚拟环境 conda create -…

【Linux】详解用户态和内核态内核中信号被处理的时机sigaction信号自定义处理方法

一、用户态和内核态的理解 在操作系统中&#xff0c;用户态和内核态是两种主要的执行模式&#xff0c;它们代表了不同的访问级别和权限&#xff0c;用于确保系统的安全和稳定性。 1.1、用户态 用户态是操作系统中用户进程的运行状态。在这种状态下&#xff0c;进程只能访问受限…

天锐绿盾 | 如何保护企业数据安全?

天锐绿盾为企业数据安全提供了一系列综合性的保护措施&#xff0c;确保数据在存储、处理、传输等各个环节的安全性。 PC地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 具体措施包括&#xff1a; 文件透明加密&#xff1a;采…

病毒防护的基础知识

目录 1.震网病毒Stuxnet是蠕虫病毒 2.宏病毒Macro virus 3.X卧底Phishing 4.钓鱼网站 5.病毒类型 1.震网病毒Stuxnet是蠕虫病毒 Stuxnet蠕虫病毒&#xff08;超级工厂病毒&#xff09;是世界上首个专门针对工业控制系统编写的破坏性病毒&#xff0c;能够利用对windows系统…

菜鸟跟着一起学如何批量修改文件日期时间属性 (创建、修改、访问时间)

需求&#xff1a;批量修改指定文件夹下的文件的创建时间、修改时间和访问时间 工具&#xff1a;【汇帮元数据编辑器】和【汇帮批量重命名】 文件一般有三个时间属性&#xff0c;分别是创建时间、修改时间和访问时间&#xff0c;如果你从别的地方拷贝的文件&#xff0c;创建时…

【手撸RPC框架】netty入门

&#x1f43c;作者简介&#xff1a;一名大三在校生&#x1f38b; 空有想法&#xff0c;没有实践&#xff0c;难成大事 专栏前言&#xff1a;探索RPC框架的奥秘 简介&#xff1a;在现代软件开发中&#xff0c;随着微服务架构的普及&#xff0c;远程过程调用&#xff08;RPC&…