X86下一文带你构建Apollo9.0运行环境(基于Ubuntu20.04避坑版)

时间:2024-09-29 18:23:43

X86下一文带你构建Apollo9.0运行环境基于Ubuntu20.04避坑版

  • 前言
  • 准备
  • 安装基础软件
    • 1.安装Docker19.03+
    • 安装Nvidia驱动
    • 安装配置Nvidia container toolkit
  • 下载Apollo源码(笔者下载的是releases下9.0.0版本,大家可以参考)
  • 编译Apollo9.0
    • 下载资源包 (非40系显卡可以忽略,笔者显卡为RTX4060)
    • 启动Apollo环境容器
    • 进入Apollo环境容器
    • 编译
  • 编译过程中可能出现的问题
    • 出现Socket closed导致编译未完成
  • 总结

前言

书接上文,笔者历经九九八十难之后终于在VM虚拟机上成功将apollo部署成功,然而在用的时候发现VM没法调用虚拟机资源,于是推倒重干,在电脑上装WIN+Linux双系统把性能吃满,现在在x86上重新部署apollo,与虚拟机上有些区别,笔者也是踩了很多坑,现分享给诸位道友们,愿诸位少走点弯路,快速的进入到apollo的世界

准备

  • 一台已经安装ubuntu系统的电脑(Ubuntu系统的版本可以参考Apollo官方文档里面的配置表适配安装,我这里装的是Ubuntu20.04)

安装基础软件

1.安装Docker19.03+

  • 查看本机当前的docker版本
docker version

查询docker版本

  • 安装docker(如果已有docker且版本 > 19.03请忽略,否则需重新安装(如果docker版本小于19.03,则需先卸载当前版本再重新安装))
sudo apt-get update
sudo apt-get install docker.io
  • 安装完成之后可以通过下述命令查看是否安装成功
docker version

docker安装成功

  • docker配置
sudo systemctl start docker
sudo systemctl enable docker

通过上述命令对docker进行配置

安装Nvidia驱动

  • 打开Ubuntu自带的软件更新界面
  • 选择合适的显卡驱动安装显卡驱动(第一个即可)
    安装驱动

安装配置Nvidia container toolkit

  • 安装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
  • 确认Nvidia container toolkit是否安装成功:检测出版本号即为安装成功
    检测nvidia container toolkit 是否安装成功
  • 重启docker
sudo systemctl restart docker

下载Apollo源码(笔者下载的是releases下9.0.0版本,大家可以参考)

  • 执行以下命令克隆 Apollo 源码
# SSH 方式
git clone git@github.com:ApolloAuto/apollo.git
 
# HTTPS 方式
git clone https://github.com/ApolloAuto/apollo.git
  • 切换到最新分支:
cd apollo
git checkout master
git branch -a
  • 切换到最新分支:
cd apollo
git checkout master
git branch -a

切换分支
如上图所示*号在master前面即表示当前已切换到master分支

编译Apollo9.0

下载资源包 (非40系显卡可以忽略,笔者显卡为RTX4060)

链接: https://pan.baidu.com/s/1Z42Zsad8NMqOSScE9pO99w

提取码: r5cn

使用上述链接下载资源包

启动Apollo环境容器

  • 更换docker/scripts/dev_start.sh文件(非40系显卡可以忽略)
    更换刚才所下载的资源包里面的dev_start.sh
    替换dev_start.sh
  • 更换docker源
    修改/etc/docker/daemon.json文件:添加以下源
"registry-mirrors": ["https://dockerproxy.cn"]

更换docker源
然后再执行下面命令

sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker
  • 在 apollo 目录下输入以下命令来启动环境容器
bash docker/scripts/dev_start.sh

操作成功后将会有如下提示输出
启动环境容器成功

进入Apollo环境容器

  • 执行如下的命令进入到apollo容器
bash docker/scripts/dev_into.sh

在这里插入图片描述
如上图所示即为成功进入Apollo环境容器

编译

  • 替换modules/perception/common/inference/tensorrt/rt_legacy.h文件(非40系显卡可以忽略)
    替换刚才所下载的资源包里面的rt_legacy.h
    替换rt_legacy.h
  • 替换third_party/centerpoint_infer_op/workspace.bzl文件(非40系显卡可以忽略)
    替换刚才所下载的资源包里面的workspace.bzl
    替换workspace.bzl
  • 替换third_party/paddleinference/workspace.bzl文件(非40系显卡可以忽略)
    替换刚才所下载的资源包里面的paddleinference/workspace.bzl
    替换paddleinference/workspace.bzl
  • 在容器内的 /apollo 目录下输出以下命令编译整个工程
./apollo.sh build

编译成功
出现如上图所示即为编译成功

编译过程中可能出现的问题

出现Socket closed导致编译未完成

14, error message: 'Socket closed', log file: '/apollo/.cache/bazel/540135163923dd7d5820f3ee4b306b32/server/jvm.out')
  • 解决方案
    这是硬件资源耗尽导致OOM,可以自行修改脚本来控制编译使用的硬件资源:
    在scripts/apollo_base.sh中第755和757行做如下修改,然后重新编译
--jobs=${count} --local_ram_resources=HOST_RAM*0.7"

改为

--jobs=2 --local_ram_resources=HOST_RAM*0.5"

如下图所示
bug解决

总结

以上就是笔者的踩坑避坑经验之享,愿能帮到诸位道友!