笔者最开始按照官网autoware.ai源码方式进行安装,但是安装好后运行demo的时候发现特别卡,CPU直接拉升到100%甚至Rviz直接卡死掉。看了下别人在PX2上跑autoware的视频,还是相当流畅的,怎么在自己这就卡成这样了呢?
检查了下原因,主要是因为PX2上的GPU没有用起来,相当与还是在用CPU跑,这种情况下PX2甚至还不如PC。要在Rviz中渲染点云、加载地图等信息这种复杂的渲染工作不是单单靠CPU就能很好完成的。笔者使用的PX2环境是ubuntu16.04的系统,arm64架构,cuda版本为9.2.78。
怎么办呢?网上查了下,看到有人用docker的方式进行安装,尤其是提供了nvidia-docker,这个可以帮助使用PX2的GPU。那就用docker的方式来安装吧。
主要分为以下三步:
1.docker安装。
这个要根据自己系统类型进行选择,笔者是ubuntu16.04,安装方式见链接Install Docker Engine on Ubuntu。按照链接中的步骤来执行,没出现什么问题。
2.nvidia-docker安装。
按照nvidia-docker2安装方式进行nvidia-docker2的安装。
其实笔者的问题就出现在这一步当中。按照nvidia-docker2安装方式指引,我照着下面步骤安装:
nvidia@tegra-ubuntu:~$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
[sudo] password for nvidia:
OK
nvidia@tegra-ubuntu:~$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
deb https://nvidia.github.io/libnvidia-container/ubuntu16.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-container-runtime/ubuntu16.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-docker/ubuntu16.04/$(ARCH) /
nvidia@tegra-ubuntu:~$
但是在执行sudo apt-get update的时候爆出了下面错误信息:
E: Failed to fetch https://nvidia.github.io/libnvidia-container/ubuntu16.04/arm64/Packages 404 Not Found
E: Failed to fetch https://nvidia.github.io/nvidia-container-runtime/ubuntu16.04/arm64/Packages 404 Not Found
E: Failed to fetch https://nvidia.github.io/nvidia-docker/ubuntu16.04/arm64/Packages 404 Not Found
E: Some index files failed to download. They have been ignored, or old ones used instead.
将链接输入到浏览器中查看结果如下:
意思已经很明确了,并不支持该系统架构。进入https://nvidia.github.io/libnvidia-container查看结果如下:
这里对支持的linux系统版本、和体系架构都写清楚了。再联想到笔者的体系架构为arm64,上边写入资源链接的地方/etc/apt/sources.list.d/nvidia-docker.list文件内容如下:
deb https://nvidia.github.io/libnvidia-container/ubuntu16.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-container-runtime/ubuntu16.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-docker/ubuntu16.04/$(ARCH) /
在实际执行过程中会将$(ARCH)替换为arm64,而arm64是不支持的,所以也就出现了上边的链接E: Failed to fetch 和 404 Not Found的问题。
而在我的笔记本上,上边执行步骤是没有问题的,因为是x86_64系统,是支持的ARCH为amd64。
翻看了nvidia-docker的Issues,发现了下面这个issue:
再次印证了,确实在ubuntu16.04-arm64系统上,nvidia-docker2是不支持的。
将https://nvidia.github.io/libnvidia-container/ubuntu16.04/arm64/Packages中的16.04替换成18.04就可以正常下载packages。
联系了Nvidia的国内支持人员,说PX2上的ubuntu16.04是不能升级到18.04的。
我就奇怪了,其他公司在PX2使用docker是怎么来安装autoware的啊?有看到该问题并且知道怎么安装的大佬,还请高抬贵手给我指教一下,谢谢了。
3.从docker官网获取和自己环境匹配的autoware镜像。
这个比较好说,进入docker观望搜索autoware,找到后再从Tag中查找你需要的镜像版本:
比如我要下载这里的bleedingedge-kinetic-base-cuda这个镜像,可以使用下面命令进行下载:
docker pull autoware/autoware:bleedingedge-kinetic-base-cuda
上边一切都妥当之后,使用docker run命令执行就可以了,不清楚的网上找下。
笔者在PX2上使用docker安装autoware是一次失败的经历。