【仿真】Carla之Docker 運行 及 渲染相關 [6]


參考與前言

  1. carla官方對於docker 運行的描述:

    CARLA in Docker

  2. Docker的使用:[暫時沒貼]

  3. 相關已知issue,歡迎補充

    https://github.com/carla-simulator/carla/issues/4834

使用的初衷是:因為收集數據的時候,想開多個carla,但是一個carla 3-4G顯存,奈何我的電腦就僅僅6G顯存 1660Ti,所以就萌生了這個想法。但是呢 途中發現:

  1. Carla 0.9.10.1 的版本 docker可以運行 但是必須有DISPLAY的設備 不然如果DISPLAY給空的話 就會沒有 → 但是呢 你在本地運行的時候 可以DISPLAY為空 也可以正常運行
  2. Carla 0.9.12 的版本 就可以運行做到offscreen (后面會解釋這個詞)

回到開始,所以呢 主要就是介紹怎樣在docker中運行carla,以及這些的作用,好處等,前面介紹了較多關於渲染的東西,要是覺得煩,直接目錄跳轉docker處

1. 渲染 Rendering

off-screen & no-rendering

官方文檔:

Rendering options

首先我們要知道 off-screen 和 no-rendering各自的意義是什么,從字面上,一個是離屏但是渲染繼續,一個是直接不做圖形渲染

  • No-rendering mode: 虛幻引擎不會做任何渲染,圖形學方面的計算都是沒有的,所以基於GPU的所有傳感器返回的是空數據

    它有助於在非常高的頻率下進行大量的交通模擬和道路行為。

  • Off-screen mode: 虛幻引擎還是正常工作,渲染都在計算中,傳感器也會返回值,只是沒有display 顯示選項了而已

那什么時候用什么呢?正常其實如果還在debug 調試階段,其實一般都是需要display 做上帝俯視視角掌控一下全局的

  • 對於你不需要傳感器數據,只是用來做交通流的仿真的時候,no-rendering mode是一個不錯的選擇,例如:我只是看看我基於ground truth (不基於傳感器感知) 的agent的整體運行路徑的表現效果,比如撞車等,可以使用這種模式,十分迅速
  • 對於off-screen呢 主要是覺得顯示界面有的煩,就可以配合 tmux 進行搭配,這樣主機只要不關機/ 服務器不關機 這都在繼續運行 終端退出了也不礙事,也不會出現誤觸關掉

所以,了解了原理后,如何開啟各個所需模式呢?

off screen

0.9.12及之后的版本 只有有renderoffscreen,也就是離屏模式:

./CarlaUE4.sh -RenderOffScreen

0.9.11及之前的 就可以使用opengl,把DISPLAY 給空就行(但這步在docker並不適用)

# Linux
DISPLAY= ./CarlaUE4.sh -opengl

vulkan的步驟請見官方文檔,需要安裝驅動等其他sudo所需權限apt install等

no rendering

可以在py代碼里讀取到world后設置:

settings = world.get_settings()
settings.no_rendering_mode = True
world.apply_settings(settings)
...
settings.no_rendering_mode = False
world.apply_settings(settings)

也可以單獨開一個終端窗口 通過官方提供的 config.py 進行設置

cd PythonAPI/util && python3 config.py --no-rendering
cd PythonAPI/util && python3 config.py --rendering
cd PythonAPI/examples && python3 no_rendering_mode.py

前兩種應該知道在說什么,如圖所示(1是帶渲染的,2是不帶渲染的 注意這種模式下界面也會變黑,傳感器也都沒有數據):

在這里插入圖片描述

后一種是一種鳥瞰圖形式,也是無渲染 節約型的,如下圖所示:

在這里插入圖片描述

渲染質量

首先 如果你不追求收集的圖片傳感器的質量的話,為了提高效率 使用低質量渲染也是一種不錯的選擇,注意 這點會影響天空的渲染,更多可以自己嘗試一下

在這里插入圖片描述

左邊是低質量,右邊是正常epic質量

./CarlaUE4.sh -quality-level=Low
./CarlaUE4.sh -quality-level=Epic

另外在Carla 0.9.12之前的版本,還有opengl和vulkan的選擇,我記得我在哪個issue里讀到過 opengl的渲染沒有vulkan的好,有時候屏幕/傳感器收到的數據會出現黑點

而0.9.12之后就只留下了vulkan的渲染模式

2. Docker 中運行

首先 docker 安裝,基本指令等等等 就不講了 前面的部分放了參考鏈接,很多教程也可熟悉

大概是這樣一幅圖,感覺還是看圖一目了然在干什么事:

在這里插入圖片描述

摘自 carla github 官方的老0.8版本的repo

https://github.com/carla-simulator/data-collector

pull/build

此處先以官方為准,講簡潔型pull方案,build等后面補充吧

因為可以兩個docker net對上了 就能連上,所以carla完全作為多個容器開着,對好自己的另一個運行的環境的端口就行

docker pull,其實和 git clone 異曲同工之處

# Pull the latest image
docker pull carlasim/carla:latest

# Pull a specific version
docker pull carlasim/carla:0.9.12
  • carlasim 用戶名
  • carla 用戶名下有的repo名
  • 0.9.12 打上了tag的版本,latest 直接拉取最新的(現在是0.9.13)

版本與渲染

根據前面介紹過了,我們知道各個版本支持的渲染模式,在docker中 主要影響可以運行的條件

  • 0.9.12 supports only Vulkan
  • 0.9.7+ supports both Vulkan and OpenGL.

帶顯示 0.9.10.1

僅老版本 如0.9.10.1,我測試了一下carla 0.9.12不太行... 同0.9.10.1無法做offscreen一致,也沒啥報錯就是不運行而已

比如,注意--net一定要連回來,不然rpc port對不上號,可自定義

# 源於官網指令
docker run -e DISPLAY=$DISPLAY --net=host --gpus all --runtime=nvidia carlasim/carla:<version> /bin/bash

docker run -e DISPLAY=$DISPLAY -it --net=host --gpus all carlasim/carla:0.9.10.1 /bin/bash
。、CarlaUE4.sh -opengl -world-port=2000

這一條就是 用現在所運行docker的機子的屏幕,比如你電腦運行的docker,那顯示就在你電腦上,如圖:

在這里插入圖片描述

關於端口映射更多可見docker 官網文檔:

Docker run reference

關於gpu對容器可視選擇等,也可見官網文檔:

Runtime options with Memory, CPUs, and GPUs

不帶顯示 0.9.12

僅新版本 如0.9.12,我測試了一下carla 0.9.10.1 不太行... 同0.9.12無法做offscreen一致,也沒啥報錯就是不運行而已

docker run --privileged --gpus all \
					--net=host -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
					carlasim/carla:0.9.12 /bin/bash \
					./CarlaUE4.sh -RenderOffScreen

docker run --privileged -it --gpus all --net=host -v /tmp/.X11-unix:/tmp/.X11-unix:rw carlasim/carla:0.9.12 /bin/bash
./CarlaUE4.sh -world-port=2000 -RenderOffScreen

運行實時圖:可以看到docker里開的carla並沒有顯示,但是一般通過顯存可以開出來正在運行中,然后我們在本機上通過port連過去,注意兩邊的carla庫版本要一致... 我是刪了我的0.9.10.1的,又pip3 install了一下才能同上Python API的庫的

在這里插入圖片描述

對於0.9.11及之前的版本:

sudo docker run --privileged --gpus all --net=host -e DISPLAY=$DISPLAY -e SDL_VIDEODRIVER=x11 -v /tmp/.X11-unix:/tmp/.X11-unix:rw carlasim/carla:0.9.11 /bin/bash ./CarlaUE4.sh -vulkan <-additonal-carla-flags>
docker run -e DISPLAY=$DISPLAY --net=host --gpus all --runtime=nvidia carlasim/carla:<version> /bin/bash CarlaUE4.sh -opengl <-additonal-carla-flags>

事實證明 有display確實,但是offscreen不能像在本機運行的那樣... 在docker 容器里直接如下指令會不啟動carla 雖然也沒啥錯誤

# Linux
DISPLAY= ./CarlaUE4.sh -opengl

對了xdg-user-dir: not found 可以就當沒看見說的是你沒有Documents這些文件上啥的 不要緊

在這里插入圖片描述

3. 服務器運行

這個主要針對各自服務器,此處記錄一下遇到的問題:

failed to establish dbus connection

NVIDIA討論區link 如下圖所示

在這里插入圖片描述

然后看了一下5上的 2080Ti emmm,Driver版本:NVIDIA-SMI 495.44 Driver Version: 495.44 CUDA Version: 11.5

解決辦法:換一個其他GPU和driver版本的服務器,我換了一個就沒這個問題了

channel 3: open failed: connect failed: Connection refused

這個得找服務器主管 給你開端口權限了... emmm

container內的2001, 2000口一定要開放

!!!! emmm 由阿偉同學發現的,參考資料官方鏈接 Two TCP ports and good internet connection. 2000 and 2001 by default. Make sure that these ports are not blocked by firewalls or any other applications.】

實時運行效果如下:

https://img-blog.csdnimg.cn/aea0647c27354079a8389a3cf0976ca3.png

整體步驟如下

# 首先打開一個終端 要連到服務器上
# A.0 連接服務器
ssh -L 127.0.0.1:2000:127.0.0.1:2000 -L 127.0.0.1:2001:127.0.0.1:2001 kinzhang@xxx.xxx.xx.xx
# A.1 pull carla image
docker pull carlasim/carla:0.9.12
# A.2 建立一個容器
docker run --privileged -it --gpus all --net=host -v /tmp/.X11-unix:/tmp/.X11-unix:rw carlasim/carla:0.9.12 /bin/bash
# A.3 在容器的bash下運行 打開CARLA
./CarlaUE4.sh -world-port=2000 -RenderOffScreen

# 這是第二個終端要干的事 在自己電腦上
# B.0 添加PYTHON路徑
export PYTHONPATH=$PYTHONPATH:~/CARLA_0.9.12/PythonAPI/carla/dist/carla-0.9.12-py3.7-linux-x86_64.egg
cd ~/CARLA_0.9.12/PythonAPI

# B.1 運行手動腳本
python examples/manual_control.py -p 2000

當然容器外可以使用其他口進行映射並連接,但是容器內只能是2000和2001,所以一定要注意好!比如就可以在外面使用2020 2021來映射容器內的口

docker run --name kin_carla_13 --privileged -it --gpus all -p 2020:2000 -p 2021:2001 -v /tmp/.X11-unix:/tmp/.X11-unix:rw carlasim/carla:0.9.13 /bin/bash

總結

所以這么看來,如果自己機子足夠強,也不用docker,直接不同的rpc port運行起來,然后各個連過去,就是一邊干活一邊運行的時候,一個不小心 就超內存和顯存了,然后就炸了,所以記得設好checkpoint → 別問我咋知道... 都是abort的后文了

另外 版本越新,bug越少... 對於carla PP口頭禪:確實


贈人點贊 手有余香 😆;正向回饋 才能更好開放記錄 hhh


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM