如何给PVE的LXC安装NVIDIA驱动
本文最后更新于 776 天前,其中的信息可能已经有所发展或是发生改变。

前期准备

我们需要去NVIDIA官网下载LINUX的驱动。下载地址

在宿主机安装NVIDIA驱动

首先将驱动文件上传到宿主机中,这里我已经上传好了。

root@pve:~# ls
NVIDIA-Linux-x86_64-440.82.run

然后我们更新一下系统。
apt-get update && apt-get dist-upgrade -y
然后我们安装一些驱动需要的依赖。
apt-get install sudo git gcc make pve-headers-$(uname -r) -y
然后我们运行驱动程序。
sh NVIDIA-Linux-x86_64-440.82.run
这里是提示我们,我们的电脑目前使用的Nouveau开源驱动,如果我们想安装NVIDiA驱动,我们需要关闭Nouveau开源驱动。


这里是提示我们,它会添加文件来帮我们关闭Nouveau开源驱动,这里我们选择关闭。

这里是告诉我们他添加了那些文件来关闭Nouveau开源驱动,如果我们想重新启动Nouveau开源驱动,我们需要删除那些文件。然后他告诉我们,如果想继续安装,需要重新启动。这里我们回车,他会自动退出驱动安装。然后我们重写启动一下系统,继续安装。

然后我们重启成功之后,再次启动驱动程序,如果显示下面的信息,就说明正在安装了。

这里是告诉我们X config的设置。

这里是让我们选择是否安装32位的库,这里我们选择否,如果你想安装,选择是也可以。

这里就告诉我们,我们的驱动已经安装完成了。我们回车就会自动退出驱动安装。

这时我们可以使用nvidia-smi来看下驱动是否安装成功。如果出现下面的信息,就是成功了。

nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.82       Driver Version: 440.82       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 860M    Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   47C    P0    N/A /  N/A |      0MiB /  2004MiB |      1%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

注意
下面的操作是如果你要将设备共享到docker或者LXC当中需要进行的处理。
为什么要进行下面的操作
NVIDIA的驱动是在有应用访问显卡的时候加载内核和设备的,但是我们用docker或者LXC访问宿主的显卡的话,驱动是不知道我们访问了显卡的,他就也不会自动加载内核和设备。所以我们下面需要做的就是,在系统启动的时候手动加载内核和设备,然后将设备共享给docker和LXC,这样就可以正常使用驱动了。
首先我们需要添加两个启动时需要加载的内核模块。

nano /etc/modules-load.d/modules.conf
# /etc/modules-load.d/modules.conf
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
nvidia
nvidia_uvm

但是我们会发现虽然我们加载了驱动内核,但是还是没有加载驱动,这里我们就手动加一下设备。这里是说如果nvidia内核加载了,我们需要执行什么。nvidia_uvm内核加载了,我们需要执行什么。
nano /etc/udev/rules.d/70-nvidia.rules

# /etc/udev/rules.d/70-nvidia.rules
# Create /nvidia0, /dev/nvidia1 … and /nvidiactl when nvidia module is loaded
KERNEL=="nvidia", RUN+="/bin/bash -c '/usr/bin/nvidia-smi -L'"
#
# Create the CUDA node when nvidia_uvm CUDA module is loaded
KERNEL=="nvidia_uvm", RUN+="/bin/bash -c '/usr/bin/nvidia-modprobe -c0 -u'"

上面我们虽然让系统可以在启动的时候加载驱动的内核模块和加载显卡设备,但是如果没有应用使用显卡的话,一段时间后,驱动程序会自动释放这些设备,所以我们就需要nvidia-persistenced,驱动持久化软件。它会阻止驱动程序释放设备,但是需要我们手动运行,我们可以使用NVIDIA提供的一个脚本自动来安装一个nvidia-persistenced守护程序,这样我们就不需要自己手动添加自启动了。

git clone https://github.com/NVIDIA/nvidia-persistenced.git
cd nvidia-persistenced/init

然后我们执行安装。
./install.sh
如果提示下面的这些,就说明守护程序安装成功。

Adding user 'nvidia-persistenced' to group 'nvidia-persistenced'... done.
Installing sample systemd service nvidia-persistenced.service... done.
Enabling nvidia-persistenced.service... done.
Starting nvidia-persistenced.service... done.

systemd service successfully installed.

这里我们可以查询下守护程序是否成功,有一次我安装的时候,虽然守护程序安装成功了,但是服务没启动,我还以为安装出错了,折腾了一下午,才发现是守护程序被unmask,然后手动mask就可以了。

systemctl status nvidia-persistenced
● nvidia-persistenced.service - NVIDIA Persistence Daemon
   Loaded: loaded (/lib/systemd/system/nvidia-persistenced.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2020-06-21 20:51:55 CST; 56s ago
  Process: 8335 ExecStart=/usr/bin/nvidia-persistenced --user nvidia-persistenced (code=exited, status=0/SUCCE
 Main PID: 8338 (nvidia-persiste)
    Tasks: 1 (limit: 4915)
   Memory: 864.0K
   CGroup: /system.slice/nvidia-persistenced.service
           └─8338 /usr/bin/nvidia-persistenced --user nvidia-persistenced

这里我们可以看下驱动都加载成功没有,只要出现下面这五个设备,就说明安装成功了。

root@pve:~# ls -l /dev/nv*
crw-rw-rw- 1 root root 195,   0 Jun 21 20:54 /dev/nvidia0
crw-rw-rw- 1 root root 195, 255 Jun 21 20:54 /dev/nvidiactl
crw-rw-rw- 1 root root 195, 254 Jun 21 20:54 /dev/nvidia-modeset
crw-rw-rw- 1 root root 236,   0 Jun 21 20:54 /dev/nvidia-uvm
crw-rw-rw- 1 root root 236,   1 Jun 21 20:54 /dev/nvidia-uvm-tools

到这里宿主机的部分就完成了然后就是LXC需要进行的设置。
这里允许的设备上面写的195和236是跟着上面进行不同的配置。我这里是195和236,其他人可能就是195和235,也有可能出现三个不同的,你就需要配三个设备允许规则。
nano /etc/pve/lxc/100.conf

lxc.cgroup.devices.allow: c 195:* rwm
lxc.cgroup.devices.allow: c 236:* rwm
lxc.mount.entry: /dev/nvidia0 dev/nvidia0 none bind,optional,create=file
lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file

LXC系统操作

默认LXC安装的系统是不开启远程root登陆的,我们需要修改ssh配置文件,打开远程登陆。
nano /etc/ssh/sshd_config
开启下面三项设置。

PermitRootLogin yes
PwordAuthentication yes
PermitEmptyPasswords no

重启ssh服务。
systemctl restart sshd
查询一下LXC系统的ip地址
ip addr
将驱动上传到系统中,然后执行系统安装,这里需要注意,我们要加一个参数来跳过内核模块的安装,因为我们直接吧宿主机的设备映射进LXC中,就不需要在LXC中再次安装内核模块了。
sh NVIDIA-Linux-x86_64-440.82.run --no-kernel-module
然后我们安装结束后,可以看下安装成功没有。

nvidia-smi                                                 
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.82       Driver Version: 440.82       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 860M    Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   43C    P8    N/A /  N/A |      0MiB /  2004MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

看一下设备有没有正常加载。

ls -l /dev/nv*
crw-rw-rw- 1 nobody nogroup 195, 254 Jun 21 12:54 /dev/nvidia-modeset
crw-rw-rw- 1 nobody nogroup 236,   0 Jun 21 12:54 /dev/nvidia-uvm
crw-rw-rw- 1 nobody nogroup 236,   1 Jun 21 12:54 /dev/nvidia-uvm-tools
crw-rw-rw- 1 nobody nogroup 195,   0 Jun 21 12:54 /dev/nvidia0
crw-rw-rw- 1 nobody nogroup 195, 255 Jun 21 12:54 /dev/nvidiactl

这里我用emby测试一下是否映射成功,这里已经成功出现可以硬解的解码器,说明我们直通成功了。

原创声明
本文由 makese 于2020年06月28日发表在 我的博客
如未特殊声明,本站所有文章均为原创;你可以在保留作者及原文地址的情况下转载
转载请注明:如何给PVE的LXC安装NVIDIA驱动 | 我的博客

评论

  1. zly
    2 年前
    2021-12-27 16:17:01

    lxc.cgroup2.devices.allow: c 195:* rwm
    lxc.cgroup2.devices.allow: c 236:* rwm
    PVE 7以后,cgroup更新成了cgroup2

    • makese
      博主
      zly
      2 年前
      2021-12-27 16:39:14

      刚才去查了下,新版确实改成cgroup2了。因为换成unraid了,现在直接用docker了。

  2. wshfxr
    2 年前
    2022-2-14 12:04:00

    pve安装显卡驱动有点复杂

    • makese
      博主
      wshfxr
      2 年前
      2022-2-15 19:12:04

      确实比较麻烦,而且有的时候更新pve的时候还容易丢驱动,相对来说还是用核显容易一些。

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇