查看原文
其他

开发者说 | 为Apollo项目安装NVIDIA显卡驱动的有效方法

Apollo社区开发者 Apollo开发者社区 2022-07-29


相信使用过Apollo的同学都知道,如果使用传统推荐的方法:


1wget http://us.download.nvidia.com/XFree86/Linux-x86_64/375.51/NVIDIA-Linux-x86_64-375.51.run
2chmod +x ./NVIDIA-Linux-x86_64-375.51.run
3sudo ./NVIDIA-Linux-x86_64-375.51.run --no-opengl-files -a -s


安装NVIDIA显卡驱动,结果一般会令人沮丧。


尤其对于ThinkPad系列笔记本电脑,几乎不可能成功。


社区荣誉布道师—贺博士的本篇文章为我们阐述了为Apollo项目安装NVIDIA显卡驱动的有效方法。

阿波君希望这篇文给感兴趣的同学带来更多帮助。

关于《Apollo 3.5的构建方法》,可参见贺博士的一篇博客。

关于《Apollo 3.5各功能模块的启动过程解析》《Apollo项目代码迁移到Cyber RT框架的方法》可参见其另两篇博客。




到CUDA官网下载所需版本的CUDA安装包,具体如下图所示:




Ubuntu 16.04系统使用第三方驱动程序nouveau支持NVIDIA显卡,为了安装NVIDIA公司的原版驱动程序,需要将其禁用。


具体方法为:使用快捷键Ctrl+Alt+T打开一个终端。

使用vi编辑器在/etc/modprobe.d目录中创建文件:

blacklist-nvidia.conf

(文件名随便起,只要后缀为.conf并且自己觉得有意义就行):


1sudo vi /etc/modprobe.d/blacklist-nvidia.conf


文件内容如下:


1blacklist nouveau
2options nouveau modeset=0


然后使用如下命令更新内核信息:


1sudo update-initramfs -u


注意:更改信息后一定要记得重启电脑!


整个操作如下图所示:



重启电脑后,可能无法进入图形化登录界面,症状类似如下界面,甚至可能完全黑屏:



 解决方法:

按快捷键Ctrl+Alt+F1Ctrl+Alt+F6

选择六个文本终端之间的任意一个,登录文本界面,然后执行第三步。



在命令终端中进入步骤一下载CUDA安装包的目录,使用如下命令安装CUDA程序。因为CUDA安装包会检测更新NVIDIA显卡驱动程序,于是我们可以利用这个特性来安装显卡驱动。


1sudo dpkg -i cuda-repo-ubuntu1604-9-2-local_9.2.148-1_amd64.deb
2sudo apt-key add /var/cuda-repo-9-2-local/7fa2af80.pub
3sudo apt-get update
4sudo apt-get install cuda 



为了顺利应用新安装的NVIDIA显卡驱动,

需要重启电脑并禁用安全启动(其实也可以不禁用安全启动,只不过签名比较麻烦)。


禁用方法如下图所示,

开机后按Enter再按F1键进入BIOS设置,

Secure Boot禁用:







执行完步骤四,重新进入Ubuntu系统后,在命令终端中使用如下方法验证驱动已安装成功:


1# 方法1
2nvidia-smi
3# 方法2
4nvidia-settings


如下图所示:






 1.6.1 安装显卡驱动程序后无法进入图形化界面 


显卡驱动程序安装完毕重启电脑后,可能无法进入图形化登录界面,症状类似如下界面,甚至可能完全黑屏:



 解决方法:


按快捷键Ctrl+Alt+F1Ctrl+Alt+F6

选择六个文本终端之间的任意一个,登录文本界面,然后使用命令:


1sudo nvidia-xconfig


重新生成NVIDIA显卡的配置文件信息,配置文件路径为:

/etc/X11/xorg.conf,文件内容如下。


注意:这个默认生成的文件内容是错误的,如果直接使用,一定不能正常加载NVIDIA显卡驱动程序!


1# nvidia-xconfig: X configuration file generated by nvidia-xconfig
2# nvidia-xconfig:  version 396.37  (buildmeister@swio-display-x86-rhel47-05)  Tue Jun 12 14:50:28 PDT 2018
3
4Section "ServerLayout"
5    Identifier     "layout"
6    Screen      0  "nvidia" 0 0
7    Inactive       "intel"
8    InputDevice    "Keyboard0" "CoreKeyboard"
9    InputDevice    "Mouse0" "CorePointer"
10EndSection
11
12Section "InputDevice"
13    # generated from default
14    Identifier     "Keyboard0"
15    Driver         "keyboard"
16EndSection
17
18Section "InputDevice"
19    # generated from default
20    Identifier     "Mouse0"
21    Driver         "mouse"
22    Option         "Protocol" "auto"
23    Option         "Device" "/dev/psaux"
24    Option         "Emulate3Buttons" "no"
25    Option         "ZAxisMapping" "4 5"
26EndSection
27
28Section "Monitor"
29    Identifier     "Monitor0"
30    VendorName     "Unknown"
31    ModelName      "Unknown"
32    HorizSync       28.0 - 33.0
33    VertRefresh     43.0 - 72.0
34    Option         "DPMS"
35EndSection
36
37Section "Device"
38    Identifier     "intel"
39    Driver         "modesetting"
40    Option         "AccelMethod" "None"
41    BusID          "PCI:0@0:2:0"
42EndSection
43
44Section "Device"
45    Identifier     "nvidia"
46    Driver         "nvidia"
47    BusID          "PCI:6@0:0:0"
48EndSection
49
50Section "Screen"
51    Identifier     "intel"
52    Device         "intel"
53    Monitor        "Monitor0"
54EndSection
55
56Section "Screen"
57    Identifier     "nvidia"
58    Device         "nvidia"
59    Monitor        "Monitor0"
60    DefaultDepth    24
61    Option         "AllowEmptyInitialConfiguration" "on"
62    Option         "IgnoreDisplayDevices" "CRT"
63    Option         "ConstrainCursor" "off"
64    SubSection     "Display"
65        Depth       24
66        Modes      "nvidia-auto-select"
67    EndSubSection
68EndSection


正确的配置文件内容如下所示。

大家一定要在默认文件的基础上,将原文件内容修改为如下正确内容:


1Section "ServerLayout"
2    Identifier "layout"
3    Screen 0 "nvidia"
4    Inactive "intel"
5EndSection
6
7Section "Device"
8    Identifier "intel"
9    Driver "modesetting"
10    BusID "PCI:0@0:2:0"
11    Option "AccelMethod" "None"
12EndSection
13
14Section "Screen"
15    Identifier "intel"
16    Device "intel"
17EndSection
18
19Section "Device"
20    Identifier "nvidia"
21    Driver "nvidia"
22    BusID "PCI:6@0:0:0"
23    Option "ConstrainCursor" "off"
24EndSection
25
26Section "Screen"
27    Identifier "nvidia"
28    Device "nvidia"
29    Option "AllowEmptyInitialConfiguration" "on"
30    Option "IgnoreDisplayDevices" "CRT"
31EndSection


如果重启电脑后还是无法进入图形化登录界面,则进入文本终端后使用如下命令:


1sudo rm /etc/X11/xorg.conf
2sudo touch /etc/X11/xorg.conf


重新生成一个空白的X11显示配置文件,之后再重启电脑。

这样就可以顺利使用系统自带的集成显卡驱动进行显示。

接下来,自然就是重新安装CUDA,以便正确安装NVIDIA显卡驱动程序了。


 1.6.2 突然断电重启电脑后NVIDIA显卡驱动程序损坏 


开发的过程中开发者们还会碰到很多意外情况,再举一个小例子。


有一次突然断电,我重启电脑后,运行tensorflow-gpu程序时,

居然报错说不是NVIDIA显卡驱动。

我一查居然是NVIDIA显卡驱动程序损坏,

操作系统重新启用集成显卡驱动nouveau

甚至还把步骤二中创建的黑名单文件

/etc/modprobe.d/blacklist-nvidia.conf

都给删除了,实在是耽误了不少时间。怎么解决呢?


解决办法:

重新执行步骤二至步骤五,再次安装NVIDIA显卡驱动。



Docker内部安装NVIDIA显卡驱动的步骤比较简单,下面阐述之。


在命令终端内,使用如下命令安装Docker内部的NVIDIA显卡驱动:


1# 启动并进入Docker
2bash docker/scripts/dev_start.sh -C
3bash docker/scripts/dev_into.sh
4# 更新安装源
5sudo apt update
6# 查看并安装NVIDIA显卡驱动
7# 此处的版本号396要与Docker外部一致!
8apt search nvidia-396
9sudo apt install nvidia-396
10# 查看显卡驱动是否安装成功
11nvidia-smi



首先确保当前需要保存的Docker image处于活动状态(未被关闭),使用如下命令保存:


1# 查看当前活动的Docker image
2docker ps
3# 保存本地Docker image
4# -p表示保存时暂停当前Docker image的运行
5# a45572938fcd表示Docker container id,它与你的机器相关,注意更换为你的id
6# registry.docker-cn.com/apolloauto/apollo表示repository(或称image),不需改变
7# davidhopper_dev表示tag,可以自己随意命名
8docker commit -p a45572938fcd registry.docker-cn.com/apolloauto/apollo:davidhopper_dev



使用如下命令加载步骤一中保存的本地Docker image:


1# 启动修改后的Docker
2# -C表示使用国内服务器
3# -l -t davidhopper_dev表示基于本地标签为davidhopper_dev的Docker image拉取
4bash docker/scripts/dev_start.sh -C -l -t davidhopper_dev
5# 进入Docker
6bash docker/scripts/dev_into.sh
7# 查看显卡驱动是否已正确保存
8nvidia-smi



2.4.1 不小心使用

docker/setup_host/install_nvidia_docker.sh

脚本安装nvidia_docker,导致无法进入Docker


之前我在Docker内部安装NVIDIA显卡驱动前,

曾经尝试过在Docker外部使用如下命令安装nvidia_docker:


1bash docker/setup_host/install_nvidia_docker.sh


安装完毕后,重启Docker时发现出问题了,

Docker进不去了,错误截图如下:



解决方法:

在Docker外部使用如下命令缷载nvidia_docker


1sudo dpkg -r nvidia-docker





自Apollo平台开放已来,我们收到了大量开发者的咨询和反馈,越来越多开发者基于Apollo擦出了更多的火花,并愿意将自己的成果贡献出来,这充分体现了Apollo『贡献越多,获得越多』的开源精神。为此我们开设了『开发者说』板块,希望开发者们能够踊跃投稿,更好地为广大自动驾驶开发者营造一个共享交流的平台!



* 以上内容为开发者原创,不代表百度官方言论。

  已获开发者授权,原文地址请戳阅读原文。


﹏﹏﹏﹏﹏﹏﹏﹏   END  ﹏﹏﹏﹏﹏﹏﹏﹏





点击阅读原文,了解更多

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存