为Apollo项目安装NVIDIA显卡驱动的有效方法

本文提供了一种在ThinkPad P50s笔记本上安装NVIDIA显卡驱动的详细步骤,包括禁用nouveau驱动、安装CUDA、重启禁用安全启动及验证驱动安装成功的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

严正声明:本文系作者davidhopper原创,未经许可,不得转载。
虽然本文仅针对ThinkPad P50s型笔记本电脑进行介绍,但本文方法适用于所有机型,作者已在另外的台式机上进行过成功安装。

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

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

安装NVIDIA显卡驱动,结果一般会令人沮丧,尤其对于ThinkPad系列笔记本电脑,几乎不可能成功。下面介绍一种简单可靠的安装方法,给有需要的同学参考借鉴。

一、Docker外部安装NVIDIA显卡驱动

(一)下载CUDA安装包

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

(二)禁用第三方NVIDIA显卡驱动程序nouveau

Ubuntu 16.04系统使用第三方驱动程序nouveau支持NVIDIA显卡,为了安装NVIDIA公司的原版驱动程序,需要将其禁用,具体方法为:使用快捷键Ctrl+Alt+T打开一个终端,使用vi编辑器在/etc/modprobe.d目录中创建文件:blacklist-nvidia.conf(文件名随便起,只要后缀为.conf并且自己觉得有意义就行):

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

文件内容如下:

blacklist nouveau
options nouveau modeset=0

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

sudo update-initramfs -u

注意:更改信息后一定要记得重启电脑!
整个操作如下图所示:
1
重启电脑后,可能无法进入图形化登录界面,症状类似如下界面,甚至可能完全黑屏:
11
解决方法:按快捷键Ctrl+Alt+F1Ctrl+Alt+F6选择六个文本终端之间的任意一个,登录文本界面,然后执行第三步。

(三)安装CUDA程序

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

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

(四)重启电脑禁用安全启动

为了顺利应用新安装的NVIDIA显卡驱动,需要重启电脑并禁用安全启动(其实也可以不禁用安全启动,只不过签名比较麻烦,我也懒得费神去弄,如果不怕麻烦,可以参考该网页进行签名)。
禁用方法如下图所示,开机后按Enter再按F1键进入BIOS设置,将Secure Boot禁用:
4
5
6
7

(五)验证驱动是否安装成功

特别注意:如果是台式机,其集成显卡和独立显卡的插孔位置不一样,在重启电脑前,需按下图所示,将显示器连接线从集成显卡接口切换到独立显卡,否则显示器将会因为接收不到显示信号而黑屏:
pc_display

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

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

如下图所示:
8
9
10

(六)可能存在的问题

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

笔记本电脑显卡驱动程序安装完毕重启电脑后,可能无法进入图形化登录界面,症状类似如下界面,甚至可能完全黑屏:
11
解决方法:按快捷键Ctrl+Alt+F1Ctrl+Alt+F6选择六个文本终端之间的任意一个,登录文本界面,然后使用命令:

sudo nvidia-xconfig

对于笔记本电脑(台式机不奏效,需要重新安装CUDA,方法见下文),重新生成NVIDIA显卡的配置文件信息,配置文件路径为:/etc/X11/xorg.conf,文件内容如下,注意:如果是ThinkPad笔记本电脑,这个默认生成的文件内容是错误的,如果直接使用,一定不能正常加载NVIDIA显卡驱动程序!

# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig:  version 396.37  (buildmeister@swio-display-x86-rhel47-05)  Tue Jun 12 14:50:28 PDT 2018

Section "ServerLayout"
    Identifier     "layout"
    Screen      0  "nvidia" 0 0
    Inactive       "intel"
    InputDevice    "Keyboard0" "CoreKeyboard"
    InputDevice    "Mouse0" "CorePointer"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Keyboard0"
    Driver         "keyboard"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Mouse0"
    Driver         "mouse"
    Option         "Protocol" "auto"
    Option         "Device" "/dev/psaux"
    Option         "Emulate3Buttons" "no"
    Option         "ZAxisMapping" "4 5"
EndSection

Section "Monitor"
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "Unknown"
    HorizSync       28.0 - 33.0
    VertRefresh     43.0 - 72.0
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "intel"
    Driver         "modesetting"
    Option         "AccelMethod" "None"
    BusID          "PCI:0@0:2:0"
EndSection

Section "Device"
    Identifier     "nvidia"
    Driver         "nvidia"
    BusID          "PCI:6@0:0:0"
EndSection

Section "Screen"
    Identifier     "intel"
    Device         "intel"
    Monitor        "Monitor0"
EndSection

Section "Screen"
    Identifier     "nvidia"
    Device         "nvidia"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "AllowEmptyInitialConfiguration" "on"
    Option         "IgnoreDisplayDevices" "CRT"
    Option         "ConstrainCursor" "off"
    SubSection     "Display"
        Depth       24
        Modes      "nvidia-auto-select"
    EndSubSection
EndSection

正确的配置文件内容如下所示。大家一定要在默认文件的基础上,将原文件内容修改为如下正确内容。特别注意:以下配置项中的BusID一定要使用NVIDIA默认生成的BusID,不然使用我的硬件ID,怎么可能让NVIDIA驱动你的显卡?这也就是要基于默认配置文件修改的原因。

Section "ServerLayout"
    Identifier "layout"
    Screen 0 "nvidia"
    Inactive "intel"
EndSection

Section "Device"
    Identifier "intel"
    Driver "modesetting"
    BusID "PCI:0@0:2:0"
    Option "AccelMethod" "None"
EndSection

Section "Screen"
    Identifier "intel"
    Device "intel"
EndSection

Section "Device"
    Identifier "nvidia"
    Driver "nvidia"
    BusID "PCI:6@0:0:0"
    Option "ConstrainCursor" "off"
EndSection

Section "Screen"
    Identifier "nvidia"
    Device "nvidia"
    Option "AllowEmptyInitialConfiguration" "on"
    Option "IgnoreDisplayDevices" "CRT"
EndSection

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

sudo rm /etc/X11/xorg.conf
sudo 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显卡驱动的步骤比较简单,下面阐述之。

(一)在Docker内部安装NVIDIA显卡驱动

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

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

(二)保存修改后的docker image

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

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

docker_ps

(三)加载修改后的Docker image

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

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

(四)可能存在的问题

2.4.1 不小心使用docker/setup_host/install_nvidia_docker.sh脚本安装nvidia_docker,导致无法进入Docker

之前我急病乱投医,在Docker外部使用如下命令安装nvidia_docker:

bash docker/setup_host/install_nvidia_docker.sh

安装完毕后重启Docker傻眼了,发现Docker进不去了,错误截图如下:
cannot_enter_docker
解决方法:在Docker外部使用如下命令缷载nvidia_docker

sudo dpkg -r nvidia-docker
<think>好的,我需要帮助用户查找Apollo 9.0.0安装过程中的常见问题及解决方法。首先,我应该确认用户需要的具体信息,包括安装教程、常见问题和解决方案。由于用户提到了参考引用中的CyberRT项目,但该引用是针对Apollo 8.0.0的,我需要考虑版本差异可能带来的不同问题。 首先,我需要查找Apollo 9.0.0的官方安装文档。通常,百度Apollo的官方GitHub或文档站点会有详细指南。可能的问题包括依赖项安装错误、Docker配置问题、编译错误等。 接下来,常见问题可能包括: 1. 系统环境不兼容,如Ubuntu版本不符合要求。 2. Docker安装或镜像拉取失败。 3. 构建过程中的依赖包缺失或版本冲突。 4. 网络问题导致下载失败。 5. 硬件驱动问题,如NVIDIA显卡驱动与CUDA的兼容性。 对于解决方案,需要逐一对应问题,例如检查系统版本、重新配置Docker镜像源、安装缺失的依赖项、使用国内镜像加速下载等。同时,可能还需要参考社区或论坛中的讨论,看看其他用户在安装Apollo 9.0.0时遇到的具体问题及解决办法。 另外,需要注意用户提供的引用是关于CyberRT框架的CMake构建问题,可能涉及Apollo 8.0.0,因此在回答时需要指出版本差异,并建议用户查阅Apollo 9.0.0的官方文档以获得最准确的信息。如果官方文档中没有涵盖某些问题,可能需要指导用户如何查找日志文件或寻求社区支持。 最后,生成相关问题需要考虑用户可能进一步的需求,例如性能优化、特定环境下的安装问题,或是与其他软件的兼容性问题等。</think>### Apollo 9.0.0 安装教程及常见问题解决方案 #### 一、安装教程核心步骤 1. **系统要求**:需使用 Ubuntu 20.04/22.04 LTS,内核版本 ≥5.4.0[^1]。 2. **依赖安装**: ```bash sudo apt install -y git curl docker.io nvidia-docker2 ``` 3. **源码拉取**: ```bash git clone https://github.com/ApolloAuto/apollo.git cd apollo && git checkout v9.0.0 ``` 4. **Docker环境配置**: ```bash bash docker/scripts/dev_start.sh -g cn # 国内用户建议使用-g cn加速 ``` 5. **编译与启动**: ```bash bash docker/scripts/dev_into.sh ./apollo.sh build_opt # 优化模式编译 ``` #### 二、常见问题及解决方法 1. **Docker镜像拉取失败** - **现象**:`Error response from daemon` 或超时。 - **解决方案**: 替换Docker镜像源为国内源(如阿里云),编辑 `/etc/docker/daemon.json`: ```json { "registry-mirrors": ["https://<your-mirror-id>.mirror.aliyuncs.com"] } ``` 重启服务:`sudo systemctl restart docker`。 2. **编译错误:缺失依赖项** - **现象**:`Could NOT find Protobuf` 或 `Eigen3 not found`。 - **解决方案**: 在Docker容器内执行: ```bash ./apollo.sh clean && ./apollo.sh build_opt --init ``` 3. **NVIDIA驱动兼容性问题** - **现象**:`CUDA driver version is insufficient`。 - **解决方案**: 升级NVIDIA驱动至 ≥495.29.05,并验证CUDA版本: ```bash nvidia-smi # 检查驱动版本 nvcc --version # 检查CUDA版本 ``` 4. **网络代理导致下载失败** - **现象**:`Failed to connect to github.com`。 - **解决方案**: 在Docker启动脚本中配置代理: ```bash bash docker/scripts/dev_start.sh --network host -e http_proxy=<your-proxy> ``` #### 三、官方资源推荐 - **文档**:[Apollo 9.0.0 官方安装指南](https://github.com/ApolloAuto/apollo/tree/v9.0.0/docs) - **社区支持**:[Apollo开发者论坛](https://discuss.apolloauto.com/)
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值