1. 程式人生 > 其它 >【模擬】Carla之Docker 執行 及 渲染相關 [6]

【模擬】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

然後看了一下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

總結

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

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