Ubuntu 16.04
输出uname -a
:
Linux HOST 4.4.0-22-generic #40-Ubuntu SMP Thu May 12 22:03:46 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
桌面级:
- CPU:英特尔
- GPU:Nvidia,361.42
我想要的是:
- 英特尔 GPU 将运行 xserver 和我的显示器,该显示器连接到板载 DP
- nvidia GPU 只能用于 CUDA 特定计算等。
- 完全控制 nvidia gpu(实时、统计数据、温度风扇速度……)
我的问题:
nvidia-smi
两者都不起作用nvidia-settings
,我无法控制我的 nvidia GPU(错误在下面列出)
我的故事:
在简要概述我的问题之后,我想深入探讨这个话题;自 Ubuntu 16.04 发布以来,我一直在修修补补,但未能实现以下目标:
- 我希望我的英特尔 GPU(i7 6700K)能够驱动我的 Xserver 及其相关的一切。
- 我希望我的专用 nvidia GPU 仅用于基于 Cuda 的计算等。
- 解决问题后,我将向系统添加多个 nvidia GPU。
我的初始状态的简要总结:
我通过 apt-get 安装了 nvidia 和 intel 的专有驱动程序(intel-microcode 和 nvidia-361.42),并通过 mokutul --disable-validation 禁用了安全启动。
然后我将 nvidia-prime 设置为使用 intel 卡。
然后我编辑了我的 xorg.conf,使其仅包含一个带有 intel gpu 和 intel 驱动程序的屏幕。(如果需要,请询问详细信息)
使用 Blender 测试 GPU 进行渲染,一切似乎都很好,只是我无法获取我的 gpu 的任何统计数据,并且 nvidia-settings 显示为空。
错误:
sudo nvidia-smi
NVIDIA-SMI couldn't find libnvidia-ml.so library in your system. Please make sure that the NVIDIA Display Driver is properly installed and present in your system:
Please also try adding directory that contains libnvidia-ml.so to your system PATH.
自发布以来,通过我的所有尝试和研究,我迄今为止学到了什么(简短版本,可随时询问详细信息):
我的两个问题相关但不相同:
Nvidia-settings 为空:
- 这是因为只有当 Xserver 连接到 nvidia GPU 时,这些设置才会显示
- 解决方案是在 xorg.conf 中添加一个新屏幕,强制未使用的 xserver 在 nvidia GPU 上运行
- 但目前这是不可能的(见其他问题)并且也不是我想要的,因为我纯粹希望 nvidia GPU 专注于 Cuda
Nvidia-smi 不工作:
- bbswitch 不是问题,因为我的 GPU(550ti)不支持它(dmesg 中的错误)
- nvidia prime 将 x86_64-linux-gnu_gl_conf 的条目更改为
/usr/lib/nvidia-361/ld.so.conf
(nvidia GPU selected) 或/usr/lib/nvidia-361-prime/ld.so.conf
(intel GPU selected) - 英特尔选择的配置缺少基本 nvidia 模块的基本路径,而这些路径均存在于 nvidia 选择的配置中
- 当通过 prime-select 切换到 nvidia 时,我没有 Xserver,因为显示器连接到集成 GPU,但在虚拟控制台 nvidia-smi 上登录可以工作
我的假设:
- Nvidia prime 很糟糕,不符合我的要求。
- 我必须以某种方式克服主要问题并配置系统(甚至手动编写新的配置?)
我的尝试:
- 我尝试卸载 nvidia-prime,但事后才意识到,这根本行不通。删除 x86_64-linux-gnu_gl_conf 的 conf 文件后,结果一片混乱……
- 我甚至尝试手动将缺失的路径添加到 x86_64-linux-gnu_gl_conf 文件中,但我并不真正知道自己在做什么,而且没有成功。
我的问题:
1) 我该如何解决 nvidia-smi 问题?我的方法正确吗?有人能告诉我该怎么做吗?
2) 是否可以在 gpu 上没有 Xserver(xorg.conf 中没有 gpu 屏幕)的情况下启用风扇控制和 nvidia gpu 的进一步控制(xorg.conf 中的 coolbits)?
在此先非常感谢大家的回复。我确实仔细搜索了网络,但搜索是我的问题所在。
如果我遗漏了任何重要信息,请告诉我,并随时索取日志文件等。
谢谢
答案1
我(这篇文章的创建者)自己找到了我需要的解决方案!
我现在将为处于类似情况并需要帮助的人解释解决方案!
解决方案:
通过提供的运行文件安装 NVIDIA 驱动程序http://www.nvidia.com/object/unix.html使用标志“--no-opengl-files”!!
这不仅可以防止 nvidia opengl 文件覆盖现有的 mesa 文件,还可以安装没有 nvidia prime 的驱动程序!!
所以我的所有问题都解决了,只需手动安装驱动程序,而不是从存储库安装。存储库中的软件包是“Optimus-Friendly”,因此捆绑了所有无用的麻烦制造者。
第二
xorg.conf 必须通过另一个屏幕扩展专用 GPU,以便它/它们在 nvidia-settings 中具有条目。
我的看起来像这样
Section "ServerLayout"
Identifier "Layout0"
Screen 0 "intel" 0 0
Screen 1 "nvidia550ti" 3000 0
EndSection
Section "Device"
Identifier "intel"
Driver "intel"
BusID "PCI:0@0:2:0"
EndSection
Section "Device"
Identifier "nvidia550ti"
Driver "nvidia"
BoardName "GeForce GTX 550ti"
BusID "PCI:2@0:0:0"
EndSection
Section "Screen"
Identifier "intel"
Device "intel"
EndSection
Section "Screen"
Identifier "nvidia550ti"
Device "nvidia550ti"
Option "AllowEmptyInitialConfiguration" "on"
Option "Coolbits" "4"
Option "ConstrainCursor" "on"
EndSection
答案2
我按照上述解决方案重新安装了不带 opengl 的 nvidia 驱动程序,但对我不起作用。此外,这些解决方案并不令人满意,因为它们意味着删除驱动程序(opengl)的某些功能。
我发现了一个更简单的解决方案,您不需要重新安装驱动程序:
- 我正常安装了 nvidia 驱动程序
- 在 nvidia-settings gui 中,在 PRIME 配置文件下,我选择英特尔显卡作为主 GPU
- 重启后,nvidia-smi 不起作用,但我通过添加解决了这个问题/usr/lib/nvidia-387到库路径:
export LD_LIBRARY_PATH=/usr/lib/nvidia-387:$LD_LIBRARY_PATH
请注意,根据安装的驱动程序,您可能需要在库路径中添加另一个文件夹,例如/usr/lib/nvidia-384。
您可以将此命令添加到文件~/.bashrc在加载新的 bash 时自动导出路径。
答案3
可接受的答案使用 X 服务器来启用 Nvidia 设备。这不是必需的,这意味着 X 服务器将使用卡的一些内存。
而nvidia-modprobe
应该按照驱动程序常见问题解答中所述进行安装(可在下面的链接中找到)。
因此我推荐的解决方案是:
1)通过运行文件安装最新的 Nvidia 驱动程序ftp://download.nvidia.com/XFree86/Linux-x86_64/使用--no-opengl-files
和--dkms
标志。2
)通过和安装相应的nvidia-modprobe
版本make all
sudo make install
ftp://download.nvidia.com/XFree86/nvidia-modprobe/
该--dkms
标志确保在升级内核时重新编译内核模块。
答案4
我获得了您想要的配置(我也想要它;)):
- 英特尔 GPU 将运行 xserver 和我的显示器,该显示器连接到板载 DP
- nvidia GPU 只能用于 CUDA 特定计算等。
- 完全控制 nvidia gpu(实时、统计数据、温度风扇速度……)
通过使用bumblebee
。
但在详细介绍之前,我应该提醒您,在更改 nvidia-settings 或 xorg.conf 或 nvidia prime 的配置时,您必须重新启动系统(也许您已经知道)。不重新启动可能会导致系统处于不一致的状态。
在我的配置中我没有触碰xorg.conf
。对我来说,这样做总是很痛苦。请将其保留为原始状态。如果您不想执行全新安装,您可以在/etc/X11/
( ls /etc/X11/xorg.conf*
) 中找到一些备份。
第一步是尝试工作nvidia-settings
。如果成功,您可以使用 nvidia PRIME 切换到英特尔 GPU,正如您提到的那样。如果您只想将 NVIDIA GPU 用于 CUDA 计算,则需要让 nvidia prime 指向英特尔 GPU(如果您想使用 cuda 调试器,则尤其需要cuda-gdb
)。
之后你可以尝试安装熊蜂:
sudo apt install bumblebee
重启。你可以使用以下命令监控 bumblebee 的状态
sudo service bumblebeed status
或者
bumblebeed -vv
optirun
bumblebee 的作用是激活 NVIDIA GPU,并仅在需要时尝试将 nvidia 驱动程序插入内核。您可以通过将 bumblebee添加到要运行的命令之前来使用它。
为了使大黄蜂工作,我必须手动编辑/etc/bumblebee/bumblebee.conf
以正确设置 nvidia 驱动程序名称和路径。
[...]
Driver=nvidia
[...]
KernelDriver=nvidia_361
[...]
LibraryPath=/usr/lib/nvidia-361:/usr/lib32/nvidia-361
然后,过了一会儿,sudo service bumblebeed restart
我设法启动了大黄蜂系统。
事实上nvidia-smi
回报
$ nvidia-smi
NVIDIA-SMI couldn't find libnvidia-ml.so library in your system. Please make sure that the NVIDIA Display Driver is properly installed and present in your system:
Please also try adding directory that contains libnvidia-ml.so to your system PATH.
但 optirun nvidia-smi
:
$ optirun nvidia-smi
Fri Jun 17 11:47:48 2016
+------------------------------------------------------+
| NVIDIA-SMI 361.42 Driver Version: 361.42 |
|-------------------------------+----------------------+----------------------+
| 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 970M Off | 0000:01:00.0 Off | N/A |
| N/A 53C P1 18W / N/A | 18MiB / 3071MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 20678 G /usr/lib/xorg/Xorg 4MiB |
+-----------------------------------------------------------------------------+
希望这可以帮助。