[other] 0 NVIDIA GPU 安装 driver 或 cuda
Tofloor
poster avatar
sleepytime
deepin
2024-04-25 18:27
Author

说明

cuda官方文档: https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html

理论上支持任何Linux版本,已用过 ubuntu server 和Deepin 20.9和Deepin V23 。

使用NVIDIA显卡跑模型,一般都需要CUDA环境。

使用docker容器的话,可以不用安装cuda,容器里有cuda 就行,但是容器中的cuda版本和宿主机的driver兼容。安装完驱动,nvidia-smi命令结果就可以显示驱动兼容的cuda版本号。

可以选择单独安装驱动,使用docker容器的cuda跑模型。

有些容器例如Xinference(类似ollama的本地部署模型的工具,支持集群),可以自动根据宿主机的driver版本智能切换cuda版本。

也可以选择安装CUDA 可以同时安装驱动和cuda,宿主机上直接跑模型。

nvidia下载最新驱动

官网直接查询nvidia显卡支持的最新驱动(driver)版本:https://www.nvidia.com/Download/index.aspx

image.png

特别的:如果是DataCenter/Tesla系列,这里会直接显示支持的所有cuda版本!

image.png

nvidia下载最新cuda(已包含driver)

官网最新的cuda update版本, 链接不变,版本号官网会定期更新: https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64

image.png

DeepinV23 beta3 ,我用的ubuntu22.04的runfile,看了debian的下载链接和ubuntu一样,估计是debian系通用。页面上选择完后就会得到下载地址,使用迅雷或者wget下载cuda文件。

https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux.run 

cuda文件版本号

cuda安装包自带的驱动版本,一定是兼容的,建议直接用cuda包安装,可以同时更新driver和cuda版本。

但是单独升级安装cuda或driver,版本号就不一定兼容了:


cuda文件名称,例如 cuda_12.4.1_550.54.15_linux.run

cuda版本:12.4.1

driver版本:550.54.15

cuda和driver的版本兼容性

cuda 和 driver 手动单独安装或升级时,要注意兼容性!

官网兼容性超详细说明: https://docs.nvidia.com/deploy/cuda-compatibility/

使用cuda安装包同时更新driver和cuda的示例图:

image.png

目前常见cuda版本和driver版本的兼容如图:

image.png

image.png

准备工作

(1)更新系统

sudo apt update
sudo apt full-upgrade
sudo apt autopurge
sudo apt autoclean
# 重启
reboot

(2)禁用nouveau (可选,第一次安装cuda时做过了,以后升级cuda版本可以跳过这步了。)

实测单独安装新版nvidia unix driver时会智能提示!检测到nouveau是否禁用,选择是即可,自动帮你做了下面操作。如不确定,就检查/etc/modprobe.d/下文件内容,没有就按照下面手动创建即可。

# 切换到root用户
sudo -i

# 确定是nvidia卡
update-pciids
lspci | grep -i nvidia

# 创建1个文件,禁用 Nouveau 驱动程序
nano /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0

update-initramfs -u

# 重启后验证,必需没有结果,才表示禁用成功。
reboot
lsmod | grep nouveau

进入非图形桌面的终端,安装CUDA

图形桌面下注销,不登录用户。deepin V23 图形界面是tty2。

键盘上 ctrl+alt+F3 ~ F6 ,即可切换到其它非图形桌面终端的tty3,tty4,tty5,tty6,任选其一使用:

# 切换到root用户
sudo -i

# 可选,补充依赖(第一次安装cuda时做过了,以后升级cuda版本可以跳过这步了。)
# apt install g++ freeglut3-dev build-essential libx11-dev \
#    libxmu-dev libxi-dev libglu1-mesa-dev libfreeimage-dev libglfw3-dev

# 暂时停止图形桌面
# deepin系统临时停止lightdm(图形桌面服务)。ubuntu server系统没有lightdm。
systemctl stop lightdm.service

# 执行 cuda 安装文件
bash cuda_12.x.x_5xx.xx.xx_linux.run

安装结果,类似显示如下:

= Summary =

Driver: Installed
Toolkit: Installed in /usr/local/cuda-12.5/

Please make sure that

  • PATH includes /usr/local/cuda-12.5/bin
  • LD_LIBRARY_PATH includes /usr/local/cuda-12.5/lib64, or, add /usr/local/cuda-12.5/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-12.5/bin
To uninstall the NVIDIA Driver, run nvidia-uninstall
Logfile is /var/log/cuda-installer.log

# 检查,多了个软链接
ls -lha /usr/local/cuda
/usr/local/cuda -> /usr/local/cuda-12.5/

# 不搞cuda开发,可以跳过这步,配置环境变量
# nano /etc/profile
# export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
# export LD_LIBRARY_PATH=/usr/local/cuda/lib64/${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

# 重启
reboot

官网文档后续补充(可选)

(1)设置持久进程

sudo -i

# 手动运行持久进程的方式
/usr/bin/nvidia-persistenced --verbose

# 官方建议修改为适合你自己linux发行版本的开机自启方式。
# 我用的systemd的service,这2个文件自己随便写的,仅供参考,欢迎大家提供更规范和标准的方式。
nano /etc/systemd/system/nvidia-persistenced.timer

[Unit]
Description=Set NVIDIA sth on boot[Timer]
OnBootSec=5[Install]
WantedBy=timers.target

nano /etc/systemd/system/nvidia-persistenced.service

[Unit]
Description=nvidia-persistenced[Service]
Type=oneshot
ExecStart=/usr/bin/nvidia-persistenced --verbose

chmod 644 /etc/systemd/system/nvidia-persistenced.timer
chmod 644 /etc/systemd/system/nvidia-persistenced.service
systemctl daemon-reload
systemctl enable nvidia-persistenced.timer

(2)执行官方文档中的验证脚本

执行后,如果没有结果,会自动创建设备节点,之后再次执行,就可以看到已有结果。

# 验证设备节点是否已正确创建
#!/bin/bash

/sbin/modprobe nvidia

if [ "$?" -eq 0 ]; then
  # Count the number of NVIDIA controllers found.
  NVDEVS=`lspci | grep -i NVIDIA`
  N3D=`echo "$NVDEVS" | grep "3D controller" | wc -l`
  NVGA=`echo "$NVDEVS" | grep "VGA compatible controller" | wc -l`

  N=`expr $N3D + $NVGA - 1`
  for i in `seq 0 $N`; do
    mknod -m 666 /dev/nvidia$i c 195 $i
  done

  mknod -m 666 /dev/nvidiactl c 195 255

else
  exit 1
fi

/sbin/modprobe nvidia-uvm

if [ "$?" -eq 0 ]; then
  # Find out the major device number used by the nvidia-uvm driver
  D=`grep nvidia-uvm /proc/devices | awk '{print $1}'`

  mknod -m 666 /dev/nvidia-uvm c $D 0
else
  exit 1
fi

显示结果(4个卡就是0~3):

mknod: /dev/nvidia0: File exists
mknod: /dev/nvidia1: File exists
mknod: /dev/nvidia2: File exists
mknod: /dev/nvidia3: File exists
mknod: /dev/nvidiactl: File exists
mknod: /dev/nvidia-uvm: File exists

常用命令

# 查看显卡数量
nvidia-smi -L

image.png

# 查看显卡版本信息,显卡资源使用情况,温度等
nvidia-smi -l

image.png

截图_选择区域_20240719171845.png

Reply Favorite View the author
All Replies
deepin
2024-04-25 20:39
#1

先码住,万一以后有用tail

Reply View the author
乾豫恒益
deepin
2024-04-25 21:20
#2

先留个底,这东西,太复杂了,Nvidia的显卡,怕了,或许高端的会好一点吧。

Reply View the author
neko
deepin
Ecological co-builder
Resources Team Moderator
2024-04-25 22:26
#3

cuda直接用run包安装就完事了,不需要关闭图形界面,另外你最后那个恢复图像界面写错了把disable改成enable。

其实没必要禁用lightdm服务,最多安装的驱动的时候用stop临时关闭,或者直接执行init 3切换成字符界面(会自动关闭图形界面)安装。

Reply View the author
sleepytime
deepin
2024-04-26 16:00
#4
neko

cuda直接用run包安装就完事了,不需要关闭图形界面,另外你最后那个恢复图像界面写错了把disable改成enable。

其实没必要禁用lightdm服务,最多安装的驱动的时候用stop临时关闭,或者直接执行init 3切换成字符界面(会自动关闭图形界面)安装。

嗯嗯,改过了。

Reply View the author
蒙笛
deepin
2024-04-27 10:49
#5

收藏备用

Reply View the author
国光
deepin
2024-04-30 14:38
#6

Nvidia 显卡收藏

Reply View the author