是否可以在 Ubuntu 20.04 上为两个不同的 nvidia GPU 安装不同的驱动程序?

是否可以在 Ubuntu 20.04 上为两个不同的 nvidia GPU 安装不同的驱动程序?

我的 ubuntu 设备中有一台 Geforce GTX 470 已经有一段时间了。我无法让它与 CUDA 一起工作,因为显然nvidia 放弃了对旧款 Fermi 显卡的支持。请注意,我尝试卸载/重新安装各种驱动程序选项,但无法使用nvidia-驱动程序-460适用于 GTX 470。唯一能正常工作的 NVIDIA 驱动程序是nvidia-驱动程序-390,但即使有了这个驱动程序,显然也没有 CUDA。这是 nvidia-smi 的输出我把GTX 1050放进机器里。

$ nvidia-smi
Mon Apr 12 10:15:04 2021       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.141                Driver Version: 390.141                   |
|-------------------------------+----------------------+----------------------+
| 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 470     Off  | 00000000:02:00.0 N/A |                  N/A |
| 40%   58C    P0    N/A /  N/A |    506MiB /  1216MiB |     N/A      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0                    Not Supported                                       |
+-----------------------------------------------------------------------------+

所以我购买并安装了 GeForce GTX 1050 Ti。经过安装驱动程序和 nvidia-cuda-toolkit 的努力,我现在将这张 GTX 1050 卡用作显示器,它也可以与 Blender 正常工作,大大加快了渲染操作。不幸的是,仍在计算机中的 GTX 470 似乎无法使用,并且 nvidia-smi 不再识别该卡。该命令甚至不识别 GTX 470,只列出 GTX 1050:

$ nvidia-smi -L
GPU 0: GeForce GTX 1050 Ti (UUID: GPU-89930378-de2a-cf96-b00a-693446ccda2c)

我无法使用“软件和更新”窗口的“附加驱动程序”选项卡更改 GTX 470 使用的驱动程序。单选按钮卡在继续使用手动安装的驱动程序并且无法改变: 在此处输入图片描述

但是,GTX 1050 似乎与 nvidia-driver-460 配合得很好:

$ nvidia-smi
Fri Apr 16 15:16:52 2021       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.67       Driver Version: 460.67       CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce GTX 105...  Off  | 00000000:01:00.0  On |                  N/A |
| 30%   34C    P5    N/A /  75W |    536MiB /  4032MiB |      5%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      1597      G   /usr/lib/xorg/Xorg                 35MiB |
|    0   N/A  N/A      2416      G   /usr/lib/xorg/Xorg                259MiB |
|    0   N/A  N/A      2543      G   /usr/bin/gnome-shell              140MiB |
|    0   N/A  N/A      3960      G   /usr/lib/firefox/firefox            1MiB |
|    0   N/A  N/A      4126      G   /usr/lib/firefox/firefox            1MiB |
|    0   N/A  N/A      4133      G   /usr/lib/firefox/firefox            1MiB |
|    0   N/A  N/A      4150      G   /usr/lib/firefox/firefox            1MiB |
|    0   N/A  N/A     26149      G   blender                            79MiB |
|    0   N/A  N/A     26833      G   /usr/lib/firefox/firefox            1MiB |
|    0   N/A  N/A     32571      G   /usr/lib/firefox/firefox            1MiB |
+-----------------------------------------------------------------------------+

奇怪的是,那里报告的 CUDA 版本(11.2)与报告的 CUDA 版本不匹配nvcc(10.1.243):

$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243

尽管 CUDA 版本不匹配,但我对 GTX 1050 的表现还是很满意的。它似乎充分利用了 PCI-E 3 的 8GT/s 速度,大大提高了我的搅拌机渲染速度。

我有几个问题:

  1. 是否可以安装不同的相应显卡的驱动程序?GTX 470 无法与nvidia-驱动程序-460它始终与 nvidia-cuda-toolkit 一起安装,并且似乎与 GTX 1050 和 Blender 配合得很好。使用X.org X 服务器对于 GTX 470,我可以管理这样的事情吗?

  2. 我应该尝试更新/升级吗nvcc升级到 CUDA 11.2?我担心我可能会破坏某些东西,并且想知道这样做是否有任何好处。我最多担心搅拌机不再识别该卡。

  3. 是否还值得在机器中保留 GTX 470?虽然我怀疑我能否让 GTX 470 帮助进行 Blender 渲染,但它可能能够处理 Ubuntu 的显示相关任务,从而让 GTX 1050 将所有精力集中在我的 Blender 渲染上。

  4. 如果我安装一个第二GTX 1050 Ti 能否进一步提高 Blender 的速度?

编辑:一些额外的信息。一些输出sudo dmesg

[    3.032920] nvidia: loading out-of-tree module taints kernel.
[    3.032926] nvidia: module license 'NVIDIA' taints kernel.
[    3.032926] Disabling lock debugging due to kernel taint
[    3.033029] RAPL PMU: API unit is 2^-32 Joules, 2 fixed counters, 163840 ms ovfl timer
[    3.033030] RAPL PMU: hw unit of domain pp0-core 2^-16 Joules
[    3.033030] RAPL PMU: hw unit of domain package 2^-16 Joules
[    3.050459] nvidia-nvlink: Nvlink Core is being initialized, major device number 238
[    3.050773] NVRM: The NVIDIA GeForce GTX 470 GPU installed in this system is
               NVRM:  supported through the NVIDIA 390.xx Legacy drivers. Please
               NVRM:  visit http://www.nvidia.com/object/unix.html for more
               NVRM:  information.  The 460.67 NVIDIA driver will ignore
               NVRM:  this GPU.  Continuing probe...
[    3.050895] nvidia 0000:01:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=none:owns=io+mem
[    3.154354] cryptd: max_cpu_qlen set to 1000
[    3.166652] NVRM: ignoring the legacy GPU 0000:02:00.0
[    3.166677] nvidia: probe of 0000:02:00.0 failed with error -1
[    3.166697] NVRM: loading NVIDIA UNIX x86_64 Kernel Module  460.67  Thu Mar 11 00:11:45 UTC 2021
[    3.324880] AVX version of gcm_enc/dec engaged.
[    3.324880] AES CTR mode by8 optimization enabled
[    3.352802] nvidia-modeset: Loading NVIDIA Kernel Mode Setting Driver for UNIX platforms  460.67  Thu Mar 11 00:03:18 UTC 2021

输出sudo lshw -C video

$ sudo lshw -C video
[sudo] password for sneakyimp: 
  *-display                 
       description: VGA compatible controller
       product: GP107 [GeForce GTX 1050 Ti]
       vendor: NVIDIA Corporation
       physical id: 0
       bus info: pci@0000:01:00.0
       version: a1
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress vga_controller bus_master cap_list rom
       configuration: driver=nvidia latency=0
       resources: irq:59 memory:f9000000-f9ffffff memory:b0000000-bfffffff memory:c0000000-c1ffffff ioport:e000(size=128) memory:c0000-dffff
  *-display UNCLAIMED
       description: VGA compatible controller
       product: GF100 [GeForce GTX 470]
       vendor: NVIDIA Corporation
       physical id: 0
       bus info: pci@0000:02:00.0
       version: a3
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress vga_controller cap_list
       configuration: latency=0
       resources: memory:f6000000-f7ffffff memory:c8000000-cfffffff memory:d0000000-d3ffffff ioport:d000(size=128) memory:f8000000-f807ffff

ubuntu-drivers devices表明旧的 470 正在尝试使用 nvidia-driver-340,该驱动程序非常旧:

$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:03.0/0000:02:00.0 ==
modalias : pci:v000010DEd000006CDsv00001043sd00008342bc03sc00i00
vendor   : NVIDIA Corporation
model    : GF100 [GeForce GTX 470]
manual_install: True
driver   : nvidia-340 - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin

== /sys/devices/pci0000:00/0000:00:02.0/0000:01:00.0 ==
modalias : pci:v000010DEd00001C82sv00001043sd0000862Abc03sc00i00
vendor   : NVIDIA Corporation
model    : GP107 [GeForce GTX 1050 Ti]
driver   : nvidia-driver-390 - distro non-free
driver   : nvidia-driver-418-server - distro non-free
driver   : nvidia-driver-460-server - distro non-free
driver   : nvidia-driver-450 - distro non-free
driver   : nvidia-driver-460 - third-party non-free recommended
driver   : nvidia-driver-450-server - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin

答案1

我使用略有不同的硬件进行了一些实验:TESLA M40 24GB 和 Quadro FX380。“新”驱动程序支持带有 CUDA、nvidia-smi 等的 TESLA,但不支持 quadro(例如您的 GTX 470,旧驱动程序支持它)。您不能混合使用不同版本的 nvidia 专有产品。这就是我们使用开源驱动程序的原因。nouveau 驱动程序支持您/我的旧版 GPU。我使用较新的 GPU 来加速带有 CUDA 的 ML 内容。我使用旧 GPU 来支持显示、观看视频等,因此 Tesla 的视频内存未受影响。

要加载“新”驱动程序(您的 GTX 1050),必须将 nouveau 列入黑名单。在我的 Ubuntu 20.04 上,它是在文件中完成的: /lib/modprobe.d/nvidia-graphics-drivers.conf 最初它包含:

blacklist nouveau
blacklist lbm-nouveau
alias nouveau off
alias lbm-nouveau off

我只留下了未注释的内容:

blacklist nouveau

行。我们不应该更改别名,因为我们需要针对旧版 GPU 的 nouveau。

然后,您可以通过为旧版 GPU 加载 nouveau 来获得正确的模式设置。我设置了 cron 守护进程来帮我执行此操作。在 /etc/crontab 文件中,我添加了以下行:

@reboot     root   /sbin/modprobe nouveau

这将加载“黑名单”的 nouveau 驱动程序nvidia 驱动程序已加载。这将启用旧卡上的加速功能,并且新卡已设置好。就我而言,这是有道理的,因为 TESLA 没有视频输出。就您而言,这可能没那么重要。

但是,您的旧版 GPU 上将无法使用 CUDA - nouveau 是善意人士的开源努力,而专有驱动程序则带来专有技术 (CUDA)。而且供应商可能随时放弃对您的硬件的支持。这就是为什么专有和封闭的东西通常是不受欢迎的。

相关内容