1. 写在前面

这次记录下今天安装百度的自动驾驶框架Apollo的时候,在硬件环境上采的一些坑,花费了5个多小时的时间,才把Apollo框架装上且能正常使用GPU,通过今天的摸索,让我对Cuda升级和显卡驱动等有了一定的了解。

关于Apollo框架的安装过程,可以直接见官网

我直接按照这个步骤来的,一开始是直接按照官网上说的步骤来的,不过之前由于实验室服务器上都装好了cuda等,所以这步跳了过去。从docker这里开始。 把前面的基础工作弄完之后,然后开始安装Apollo,这个也没费多大劲,装完。

然后apollo项目主目录,通过命令./apollo.sh拉镜像建容器然后启动,本以为大功告成,结果到最后告诉我Failed to start docker container "apollo_runtime_standalone_wu,也就是容器启动失败,由于我这是第一次接触这个东西,对于docker更是只知道皮毛,所以到这里就懵逼了下,百度也没出个结果,那就自己摸索了。

既然./apollo.sh命令直接这样报错,也不说原因,那我就想单独启动下这个容器试试。

# 先看看当前有哪些容器
docker ps -a# 启动上面失败的容器
docker start apollo_runtime_standalone_wu

结果依然是启动失败,但这次报了原因 nvidia-container-cli: requirement error: unsatisfied condition: cuda>=11.1, please update your driver

这里就说cuda版本太低了,匹配不上当前容器需要的cuda版本,于是我nvidia-smi了下,发现当前的cuda=10.4

于是乎我就差不多知道解决办法了。于是乎就想着,升级驱动呗。

2. 更新显卡驱动

升级驱动,我了解过之前,必须要把之前的驱动卸载掉,所以这里就使用了下面几行命令:

sudo /usr/bin/nvidia-uninstall
sudo apt-get --purge remove nvidia-\*  # 有的不需要加-\
sudo apt-get purge nvidia-\*   # 有的不需要加-\
sudo apt-get purge libnvidia-\*  # 有的不需要加-\

这样完事之后,输入

sudo dpkg --list | grep nvidia-*

正常的话,是没有出现任何内容,算是驱动卸载干净了,但是我这里还出现了一些内容,于是

sudo apt-get autoremove

这样才清理干净。

清理干净之后, 那就装驱动呗, 但是装什么版本呢? 升级到什么版本呢? 这个我就不知道了,因为之前对这块不了解, 也不知道究竟当前cuda适合啥驱动版本,没注意,于是开始就无脑根据apollo官网给的:

sudo apt-get update
sudo apt-add-repository multiverse
sudo apt-get update
sudo apt-get install nvidia-driver-455

安装了个455版本,装完之后,输入nvidia-smi,结果可想而知:Failed to initialize NVML: Driver/library version mismatch, 我就知道肯定不会这么顺利。

出现了个版本不匹配,大致上我能猜到,就是当前cuda与装的这个455版本对应不上吧。 于是乎,百度搜了下,根据这篇博文,了解到NVIDIA 内核驱动版本与系统驱动不一致,那就先看下当前内核驱动版本是多少:

cat /proc/driver/nvidia/version-->
NVRM version: NVIDIA UNIX x86_64 Kernel Module  440.34  Wed Jun 26 12:19:48 CDT 2019
GCC version:  gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~18.04.12)

哦,系统内核是440,结果装了个455的,故出现了这个问题。

那怎么解决呢? 那你可能说,我再装个440的驱动不就行了? 果真,我还就这么尝试了,这里倒是行了, 那我折腾这么一圈的意义是啥呢? 本质上我不是为了解决Apollo框架里面不支持10.x版本吗? 这么倒腾了一圈这个问题并没有解决。

所以,问题的正解是NVIDIA系统内核版本的升级,也就是Cuda版本的升级。

3. Cuda版本升级

首先,可以来这个目录下目前安装的cuda版本:


之前的话我这里只有一个10.1版本的。所以接下来就是在这个版本的基础上重新整一个11.x的版本,参考的这篇博文。

这里还是先按照上面的方法把旧的驱动给卸载掉,因为我发现新的cuda安装的时候,会自带驱动,所以,我这里就直接把cuda11.2的安装包下载了下来。

wget https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda_11.2.0_460.27.04_linux.run

下载完了之后,开装:

sudo sh cuda_11.2.0_460.27.04_linux.run

结果报驱动安装失败,所以这里就打算,单独去官网下载驱动。参考上面博文的方式,选择了470.82版本,下载。完事之后,安装:

sudo chmod a+x NVIDIA-Linux-x86_64-470.82.runsudo ./NVIDIA-Linux-x86_64-470.82.run -no-x-check -no-nouveau-check -no-opengl-files

这里,sudo ./xx.run 命令后面必须添加选项-no-x-check -no-nouveau-check -no-opengl-files,否则会报错。

–no-opengl-files 只安装驱动文件,不安装OpenGL文件
–no-x-check 安装驱动时不检查X服务
–no-nouveau-check 安装驱动时不检查nouveau

单独安装了驱动, 在启动上面Cuda的安装程序,此时把驱动这里的叉号去掉,即不用它装了。

再次安装,就出现了

An NVIDIA kernel module ‘nvidia-drm’ appears to already be loaded in your kernel. This may be because it is in use (for example, by an X server, a CUDA program, or the NVIDIA Persistence Daemon), but this may also happen if your kernel was configured without support for module unloading. Please be sure to exit any programs that may be using the GPU(s) before attempting to upgrade your driver. If no GPU-based programs are running, you know that your kernel supports module unloading, and you still receive this message, then an error may have occured that has corrupted an NVIDIA kernel module’s usage count, for which the simplest remedy is to reboot your computer.

这个问题解决办法,关闭所有装置,并停止载入NVIDIA驱动程序

sudo systemctl isolate multi-user.target
sudo modprobe -r nvidia-drm

完事之后,一路ok,算是把Cuda给升级好了。由于这次装的驱动也和这个Cuda的版本匹配,所以此时再输入nvidia-smi, 奇迹出现。

成功把Cuda的版本从10.4升级到11.4。

4. 安装NVIDIA Container Toolkit

这里是默认已经装好了docker,如果想让容器使用服务器的GPU的话,需要运行下面命令来安装NVIDIA Container Toolkit

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get -y update
sudo apt-get install -y nvidia-docker2

安装完成后,重启下docker就可以了, 如果不执行这个命令,在启动Apollo的时候,会提示找不到GPU驱动,自动开启一个cpu的。

sudo systemctl restart docker

5. 进入Apollo

此时再次回到apollo/的主目录, 重启docker,把之前的容器删除掉,

docker rm -f apollo_runtime_standalone_qiao

然后再运行命令

就进来了。

这样就能愉快的进行后面的学习啦。

6. 小总

这次采坑的两点收获:

  1. 更新显卡驱动的时候,一定要把之前的驱动删干净,另外不要乱更新,一定要和当前的cuda版本匹配上
  2. 升级cuda的正确姿势

7. 后记

在学习框架的时候,发现必须要使用浏览器,因为dreamview是界面交互的那种形式,而我目前是xshell远程连接的服务器,一些基础命令还可以测试,但遇到了各种界面交互操作,服务器上的浏览器没法在本地xshell打开。所以后续还需要去解决这块问题才行。

今天探索了下,第一种方法就是在xshell的基础上,再装一个Xmanager,在这里面

有个Xstart,可以按照下面方法配置命令(事先保证存在),这样一运行:

可以先从Xshell里面运行下这个命令,有没有,如果报错说$DISPLAY没有存在,就用下面代码指定:

export DISPLAY='219.216.65.179:0.0'

这里的这个ip地址就是我们本机的ip地址。这里的原理就相当于把服务器上的浏览器界面转到本机上进行运行,所以需要本机的IP。这时候点击上面的运行,就出来一个新的命令行代码。 此时在里面输入firefox,就能在本机上打开火狐浏览器了。

当然,这个方法发现打开相关页面会非常慢,所以就探索了第二种方式, VNC viewer软件。这里只说使用:

  1. 首先Windows上安装Vnc viewer客户端

  2. 其次,在Linux上安装Vnc viewer服务器端, 命令如下:

    # Unbuntu安装  这时候会涉及到设计密码,这个密码当客户端连接的时候会用到
    sudo apt-get install vnc4server# 启动   后面的:2是进程号,具体连接的时候需要指定
    vncserver :2
    # 杀掉
    # vncserver -kill: 2# 如果忘了之前设置的密码,可以重新修改密码
    vncpasswd
    
  3. 客户端连接,这时候只需要输入服务器端的ip+进程号即可。


    这样就能直接连接远程的Linux桌面了,前提是远程Linux是安装了桌面的。如果没有的话,可以看这篇文章,如何打开。 我实验室服务器默认之前装了图形界面的。所以到了这一步就直接能显式远程的Linux桌面了。

此时,apollo容器里面输入

./scripts/bootstrap.sh

就能开启DreamView了。

打开谷歌浏览器(火狐我这边竟然显式不出界面来), 输入localhost:8888就能见证奇迹:

Ubuntu更新显卡驱动与升级cuda版本“采坑“小记相关推荐

  1. ubuntu更新显卡驱动到460.84,升级cuda版本到11.2

    目录 查看当前显卡驱动和cuda版本 下载和安装 显卡适合的驱动版本 0. 禁用nouveau 1. 进入中文版官网查询 2. 卸载旧驱动 3. 安装新驱动 4. 查看新驱动 安装cuda 11.2版 ...

  2. 【详细】Ubuntu18.04安装更新显卡驱动、安装CUDA及cuDNN、CUDA版本切换

    CUDA安装官方教程:官方教程 cuDNN安装官方教程:官方教程 在配置Pytorch环境的时候,想着尝试一下新版本的pytorch版本Stable(1.10.1)时,发现这个pytorch版本仅支持 ...

  3. 显卡驱动对应的cuda版本

    上图中是每个cuda版本对应的最低显卡驱动, 换句话说显卡驱动版本只要高于或等于对应的最低显卡驱动都可以. 显卡的驱动版本可以通过命令查询:nvidia-smi

  4. Ubuntu配置显卡驱动,CUDA及cuDNN

    Ubuntu配置GPU驱动,CUDA及cuDNN CUDA和cuDNN的安装网上有许多教程,但每一个教程都没能让我简洁有效地安装成功,尤其一些帖子忽视了某些重要细节,让整个安装过程更复杂. 我尝试用先 ...

  5. win11怎么升级更新显卡驱动

    现在很多用户都安装了最新的Win11系统,很多时候我们需要更新升级显卡驱动才能正常使用,那么win11怎么升级更新显卡驱动,我们一起来看看win11升级更新显卡驱动的方法吧. 工具/原料: 系统版本: ...

  6. NVidia 3060/1650S 独显笔记本 HDMI外接屏幕有输出,笔记本屏幕无输出/ubuntu 更改显卡驱动后无法进入图形界面的处理方法 以及禁止内核自动更新

    这里写自定义目录标题 NVidia 3060/1650S 独显笔记本 HDMI外接屏幕有输出,笔记本屏幕无输出/ubuntu 更改显卡驱动后无法进入图形界面的处理方法 结论 关于操作系统 deepin ...

  7. ubuntu安装显卡驱动和cuda

    文章目录 前言 1. 卸载原始的驱动 2. 下载新显卡驱动 2.1 安装显卡驱动 3 安装cuda 4. 安装cudnn 5. 安装anaconda 前言 最新的版本不一定是好的,合适的才是最好的,建 ...

  8. 【已解决】ubuntu双显卡驱动安装失败

    骤然降到零下11度,心凉了一下. 本文主要讲ubuntu双显卡驱动安装失败的情况,目前已解决. 欢迎此情况下Nvidia显卡驱动安装成功的网友在此文留言提供方法,谢谢! 注意:如果在ubuntu 14 ...

  9. Ubuntu18.04重启后内核自动更新显卡驱动失效

    Ubuntu18.04重启后内核自动更新显卡驱动失效 最近一次重启服务器,发现显卡驱动不见了.网上找了很多办法,原因就是因为重启后内核更新,导致内核版本和Nvidia显卡驱动版本不一致造成的.大致整理 ...

  10. Ubuntu 重启显卡驱动失败解决办法

    Ubuntu 重启显卡驱动失败解决办法 开机的时候发现显卡驱动失效了,直接导致循环登录 其实问题就在于,自己装好显卡驱动之后,直接,因为内核的更新.导致计算机在开机的时候直接启动新的内核.然而新的内核 ...

最新文章

  1. 计算机科学与技术专业认证研讨,信息学院召开计算机科学与技术专业IEET认证暨人才培养方案修订研讨会...
  2. python【蓝桥杯vip练习题库】ADV-304矩阵转置
  3. 使用ServiceStackRedis链接Redis简介
  4. Fully Convolutional Networks for Semantic Segmentation (FCN)论文翻译和理解
  5. 中班游戏电子计算机,幼儿园中班数学游戏:小小快递员
  6. LeetCode() Word Search II
  7. ubuntu mysql5.6_ubuntu安装mysql5.6
  8. 【opencv】【mediapipe】手势检测的有趣玩法
  9. sqlbulkcopy能用于mysql吗_张家界不锈钢螺旋管能用于造船工业吗?
  10. [saiku] 配置saiku实时展现查询数据
  11. 苹果carplay下载_苹果宣布推出CarPlay
  12. SQL进阶教程PDF下载
  13. .net core 创建桌面应用程序(极简流程)
  14. Linux(六)NFS(network file system)服务器实验
  15. Unity3d 双阈值解决临界值跳跃的问题
  16. 使用 Weaviate 矢量搜索为 60 多万篇学术论文构建可扩展的知识图谱搜索
  17. pandas以文本形式读取Excel表数据写法
  18. 抖音弹幕解析过程 PB数据转json 解决乱码 所有语言通用思路
  19. 问题——Word中一级标题离页眉很近
  20. PDF转换成JPG图片怎么转换?这两招轻松搞定

热门文章

  1. 使用树莓派打造家庭监控系统
  2. Linux如何查看CPU温度
  3. Win10完美运行红色警戒2的安装包和补丁
  4. ts视频合并---P站
  5. 怎么样锁定计算机时间,电脑屏幕锁屏设置时间还是锁不了怎么办
  6. 什么是爬虫?你了解吗,能干什么,怎么用,让你了解本质
  7. arccos用计算机,arccos0(arccos在线计算器)
  8. 厘米和磅的转换程序python_在Python中如何将磅转换成公斤
  9. 熊出没机器人光头强_《熊出没》里的温馨时刻,原来光头强和熊大熊二的关系也能这么好...
  10. 机器人三大定律只是人类的一厢情愿 AI可能并不遵守