debian12 系统 开机自动加载 nvidia-uvm

文章提供了一个bash脚本,用于创建一个systemd服务,该服务在Debian系统启动时自动加载nvidia-uvm模块。脚本首先确保以root权限运行,然后创建一个预加载nvidia模块的脚本,接着设置systemd服务文件并启用服务,以确保在开机时nvidia-uvm设备能被正确加载。此解决方案适用于遇到类似问题的CUDA用户。
部署运行你感兴趣的模型镜像

debian 系统不知为何,开机没有自动加载 nvidia-uvm 设备,需要在主机系统手动启动任意一个cuda程序才能加载,非常坑爹。

写了一个脚本,配置了一个自动创建 nvidia-uvm 的 systemd 的服务。

#!/bin/bash

# 确保为 root 用户
if [ "$UID" -ne "0" ]; then
	echo "Must be root to run this script."
	exit 1
fi


# 创建自动加载脚本
echo "Create preload-nv-mod.sh > /preload_nv_mod.sh"
cat << \EOF > /preload_nv_mod.sh 
#!/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

EOF

# 设定 755 权限
chown root:root /preload_nv_mod.sh
chmod 755 /preload_nv_mod.sh


# 创建 systemd 的服务配置文件
echo "Create preload-nv-mod.service > /lib/systemd/system/preload-nv-mod.service"

cat << \EOF > /lib/systemd/system/preload-nv-mod.service
[Unit]
Description=preload-nv-mod
Documentation=None
ConditionFileIsExecutable=/preload_nv_mod.sh
After=network.target

[Service]
Type=forking
ExecStart=/preload_nv_mod.sh
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

[Install]
WantedBy=multi-user.target

EOF

# 设定服务配置的权限
chown root:root /lib/systemd/system/preload-nv-mod.service
chmod 644 /lib/systemd/system/preload-nv-mod.service

# 启用服务
echo "setting autostart"
systemctl enable preload-nv-mod
# 启动服务
echo "start service"
systemctl start preload-nv-mod
# 检查服务状态
echo "check service status"
systemctl status preload-nv-mod

参考资料
nvidia cuda官方创建 nvidia-uvm 节点的脚本
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#runfile-verifications

stackoverflow 上的问题 正确创建 nvidia-uvm 设备
https://askubuntu.com/questions/590319/how-do-i-enable-automatically-nvidia-uvm

Debian11 创建 systemd 开机服务
https://www.burning.net.cn/article/article-60

您可能感兴趣的与本文相关的镜像

PyTorch 2.6

PyTorch 2.6

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

### NVIDIA UVM 模块导致的 Segmentation Fault (11) 错误原因及解决方法 Segmentation fault (11) 是 Linux 系统中的一种常见错误,通常表明程序试图访问未被分配给它的内存区域。当涉及 NVIDIA Unified Virtual Memory (UVM) 模块时,这类错误可能源于驱动程序、内核模块或硬件配置方面的问题。 #### 可能的原因分析 1. **NVIDIA 驱动未正确安装** 如果系统NVIDIA 驱动未能成功加载或版本不匹配,则可能导致 UVM 模块无法正常工作。例如,在尝试运行 `docker run --gpus all ubuntu nvidia-smi` 时返回错误提示“No NVIDIA kernel module found”,说明当前系统缺少必要的 NVIDIA 内核支持[^1]。 2. **nvidia-uvm 模块未加载** 即使基本的 NVIDIA 显卡驱动已就位,但如果统一虚拟内存所需的特定子模块(即 nvidia-uvm)尚未激活,同样会造成类似问题。可以通过命令 `lsmod | grep nvidia_uvm` 来验证该模块状态;如果没有显示任何结果,则需要手动加载它:先卸载旧实例(`sudo rmmod nvidia_uvm`)再重新挂载(`sudo modprobe nvidia_uvm`)[^3]。 3. **GPU 设备不可用** 若 GPU 被标记为“unavailable”或其他非健康状态,也会间接引发上述异常状况。“设备不可用”的典型表现形式之一就是抛出 segmentation faults 类型的致命中断信号[^3]。 4. **软件与硬件之间的兼容性差距** 不同代际间的显卡架构差异较大,因此新发布的应用程序未必能够无缝适配所有现存型号的产品线。假如所使用的框架特别强调对最新特性的依赖——比如 Tensor Cores 运算加速单元的支持情况——那么老旧一代产品很可能因为缺乏相应能力而表现出不稳定现象。 #### 解决方案建议 为了有效应对这些问题,可以从以下几个角度入手: 1. **更新至最新版 NVIDIA Driver** 访问官方站点下载适用于自己平台的操作系统对应的最新稳定版图形处理器驱动包,并按照指引完成升级操作。确保每次变更后都重启机器以生效更改成果。 2. **检查并修复 Kernel Headers & Build Tools** 安装过程中需要用到一系列辅助工具集,包括但不限于 GCC 编译器套件以及对应发行版的核心头部文件组。对于基于 Debian 的衍生品而言,可通过 apt-get install build-essential linux-headers-$(uname -r) 获取所需资源。 3. **强制重置 NVRM 子系统** 执行清理动作之前最好保存好现有环境快照备份以防万一恢复失败造成更大损失。接着依照以下顺序逐步推进: ```bash sudo service lightdm stop # 关闭桌面管理服务防止干扰 sudo rmmod nvidia_drm nvidia_modeset nvidia_uvm nvidia sudo modprobe nvidia ``` 4. **启用详尽的日志记录功能** 设置环境变量 CUDA_ERROR_LEVEL=50 后重复触发原场景重现过程,从而捕捉到更加详细的内部运作轨迹数据流供进一步剖析研究之用。 --- ### 实现代码片段示例 这里提供一个小脚本用来自动化检测和修正部分常规情形下的 uvm 相关故障点: ```bash #!/bin/bash # Check if Nvidia modules exist and load them accordingly. check_and_load_nvidia_modules() { MODULES=("nvidia" "nvidia_modeset" "nvidia_uvm") for MOD in "${MODULES[@]}"; do if ! lsmod | grep $MOD >/dev/null ; then echo "$MOD not loaded, attempting to reload..." sudo rmmod ${MOD}_drm || true sleep 1 sudo modprobe $MOD && echo "$MOD successfully reloaded." fi done } echo "Starting diagnostic checks..." if [[ $(command -v nvidia-smi) ]];then check_and_load_nvidia_modules OUTPUT=$(nvidia-smi) RETVAL=$? if [ $RETVAL != 0 ];then echo "[ERROR] Failed running nvidia-smi with exit code:$RETVAL" exit $RETVAL else echo "NVIDIA-SMI output:\n$OUTPUT" fi else echo "[CRITICAL ERROR] Command 'nvidia-smi' does NOT seem available!" fi ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值