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且版本 > 19.03请忽略,否则需重新安装(如果docker版本小于19.03,则需先卸载当前版本再重新安装))
sudo apt-get update
sudo apt-get install docker.io
- 安装完成之后可以通过下述命令查看是否安装成功
docker version
- 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是否安装成功:检测出版本号即为安装成功
- 重启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
- 更换docker源
修改/etc/docker/daemon.json文件:添加以下源
"registry-mirrors": ["https://dockerproxy.cn"]
然后再执行下面命令
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
- 替换third_party/centerpoint_infer_op/workspace.bzl文件(非40系显卡可以忽略)
替换刚才所下载的资源包里面的workspace.bzl
- 替换third_party/paddleinference/workspace.bzl文件(非40系显卡可以忽略)
替换刚才所下载的资源包里面的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"
如下图所示
总结
以上就是笔者的踩坑避坑经验之享,愿能帮到诸位道友!