AirSim auf Docker unter Linux#
Wir haben zwei Optionen für Docker. Sie können entweder ein Image zum Ausführen von AirSim Linux Binaries erstellen oder Unreal Engine + AirSim aus Quellcode kompilieren.
Binaries#
Anforderungen:#
- Installieren Sie nvidia-docker2.
Bauen Sie das Docker-Image#
- Hier sind die Standardargumente.
--base_image: Dies ist das Image, über das wir AirSim installieren werden. Wir haben Tests mit Ubuntu 18.04 mit CUDA 10.0 durchgeführt. Sie können ein beliebiges NVIDIA cudagl auf eigenes Risiko angeben.--target_imageist der gewünschte Name Ihres Docker-Images. Standardmäßig ist diesairsim_binarymit demselben Tag wie das Basis-Image.
$ cd Airsim/docker;
$ python build_airsim_image.py \
--base_image=nvidia/cudagl:10.0-devel-ubuntu18.04 \
--target_image=airsim_binary:10.0-devel-ubuntu18.04
- Überprüfen Sie, ob Sie ein Image haben, indem Sie:
$ docker images | grep airsim
Ausführen einer Unreal-Binary in einem Docker-Container#
- Holen Sie sich eine Linux-Binary oder verpacken Sie Ihr eigenes Projekt in Ubuntu. Nehmen wir die Blocks-Binary als Beispiel. Sie können sie herunterladen, indem Sie
$ cd Airsim/docker;
$ ./download_blocks_env_binary.sh
Passen Sie es an, um die spezifische erforderliche Binary abzurufen.
- Ausführen einer Unreal-Binary in einem Docker-Container Die Syntax lautet
$ ./run_airsim_image_binary.sh DOCKER_IMAGE_NAME UNREAL_BINARY_SHELL_SCRIPT UNREAL_BINARY_ARGUMENTS -- headless
Für Blocks können Sie $ ./run_airsim_image_binary.sh airsim_binary:10.0-devel-ubuntu18.04 Blocks/Blocks.sh -windowed -ResX=1080 -ResY=720 ausführen.
DOCKER_IMAGE_NAME: Wie der Parametertarget_imageim vorherigen Schritt. Geben Sie standardmäßigairsim_binary:10.0-devel-ubuntu18.04ein.UNREAL_BINARY_SHELL_SCRIPT: für die Blocks-Umgebung ist diesBlocks/Blocks.sh.-
UNREAL_BINARY_ARGUMENTS: Für AirSim am relevantesten wären-windowed,-ResX,-ResY. Klicken Sie auf den Link, um alle Optionen anzuzeigen. -
Ausführung im Headless-Modus: Hängen Sie
-- headlessam Ende an.$ ./run_airsim_image_binary.sh Blocks/Blocks.sh -- headless
Quelle#
Anforderungen:#
- Installieren Sie nvidia-docker2.
- Installieren Sie ue4-docker.
Unreal Engine in Docker bauen:#
-
Um auf den Quellcode von Unreal Engine zugreifen zu können, registrieren Sie sich auf der Website von Epic Games und verknüpfen Sie sie mit Ihrem GitHub-Konto, wie hier im Abschnitt
Erforderliche Schritteerklärt.Beachten Sie, dass Sie
Schritt 2: UE4 unter Linux herunterladennicht durchführen müssen! -
Bauen Sie das Unreal Engine 4.19.2 Docker-Image. Wir werden in unserem Beispiel CUDA 10.0 verwenden.
$ ue4-docker build 4.19.2 --cuda=10.0 --no-full- [Optional]
$ ue4-docker clean, um etwas Speicherplatz freizugeben. Details hier. ue4-dockerunterstützt alle CUDA-Versionen, die auf dem NVIDIA cudagl Dockerhub hier aufgeführt sind.- Weitere Informationen zu fortgeschrittenen Konfigurationen mit
ue4-dockerfinden Sie auf dieser Seite.
- [Optional]
-
Festplattenspeicher
- Die Unreal-Images und -Container können viel Speicherplatz beanspruchen, insbesondere wenn Sie mehr als eine Version ausprobieren.
- Hier ist eine Liste nützlicher Links, um den von Docker belegten Speicher zu überwachen und zwischengespeicherte Builds zu bereinigen.
AirSim in UE4-Docker-Container bauen:#
- Bauen Sie das AirSim-Docker-Image (das auf dem gerade erstellten Unreal-Image aufbaut). Hier sind die Standardargumente.
--base_image: Dies ist das Image, über das wir AirSim installieren werden. Wir haben Tests mitadamrehn/ue4-engine:4.19.2-cudagl10.0durchgeführt. Weitere Versionen finden Sie unter ue4-docker.--target_imageist der gewünschte Name Ihres Docker-Images. Standardmäßig ist diesairsim_sourcemit demselben Tag wie das Basis-Image.
$ cd Airsim/docker;
$ python build_airsim_image.py \
--source \
----base_image adamrehn/ue4-engine:4.19.2-cudagl10.0 \
--target_image=airsim_source:4.19.2-cudagl10.0
AirSim-Container ausführen#
- Führen Sie das erstellte AirSim-Source-Image mit folgendem Befehl aus:
./run_airsim_image_source.sh airsim_source:4.19.2-cudagl10.0
Die Syntax lautet ./run_airsim_image_source.sh DOCKER_IMAGE_NAME -- headless -- headless: Hängen Sie dies an, um im optionalen Headless-Modus auszuführen.
- Im Container finden Sie
UnrealEngineundAirSimunter/home/ue4. - Starten Sie die Unreal Engine im Container:
ue4@HOSTMACHINE:~$ /home/ue4/UnrealEngine/Engine/Binaries/Linux/UE4Editor - Angeben einer AirSim settings.json
- Fahren Sie mit den Linux-Dokumenten von AirSim fort.
[Sonstiges] Unreal-Umgebungen in airsim_source-Containern verpacken#
- Nehmen wir die Blocks-Umgebung als Beispiel. Geben Sie im folgenden Skript den vollständigen Pfad zu Ihrer Unreal-Projektdatei mit
projectund das Verzeichnis, in dem die Binaries platziert werden sollen, mitarchivedirectoryan.
$ /home/ue4/UnrealEngine/Engine/Build/BatchFiles/RunUAT.sh BuildCookRun -platform=Linux -clientconfig=Shipping -serverconfig=Shipping -noP4 -cook -allmaps -build -stage -prereqs -pak -archive \
-archivedirectory=/home/ue4/Binaries/Blocks/ \
-project=/home/ue4/AirSim/Unreal/Environments/Blocks/Blocks.uproject
Dadurch wird eine Blocks-Binary in /home/ue4/Binaries/Blocks/ erstellt. Sie können sie testen, indem Sie /home/ue4/Binaries/Blocks/LinuxNoEditor/Blocks.sh -windowed ausführen.
Angeben von settings.json#
airsim_binary Docker-Image:#
- Wir mappen den
PFAD/ZU/Airsim/docker/settings.jsondes Host-Rechners auf den/home/airsim_user/Documents/AirSim/settings.jsondes Docker-Containers. - Daher können wir jede beliebige Einstellungsdatei laden, indem wir einfach
PFAD/ZU/IHREM/settings.jsonändern, indem wir die folgenden Snippets inrun_airsim_image_binary.shmodifizieren.
nvidia-docker run --runtime=nvidia -it \
-v $PATH_TO_YOUR/settings.json:/home/airsim_user/Documents/AirSim/settings.json \
-v $UNREAL_BINARY_PATH:$UNREAL_BINARY_PATH \
-e SDL_VIDEODRIVER=$SDL_VIDEODRIVER_VALUE \
-e SDL_HINT_CUDA_DEVICE='0' \
--net=host \
--env="DISPLAY=$DISPLAY" \
--env="QT_X11_NO_MITSHM=1" \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
-env="XAUTHORITY=$XAUTH" \
--volume="$XAUTH:$XAUTH" \
--rm \
$DOCKER_IMAGE_NAME \
/bin/bash -c "$UNREAL_BINARY_COMMAND"
Hinweis: Docker-Version >=19.03 (prüfen mit docker -v) unterstützt nativ Nvidia-GPUs, daher die Ausführung mit dem Flag --gpus all wie angegeben.
docker run --gpus all -it \
...
airsim_source Docker-Image:#
- Wir mappen den
PFAD/ZU/Airsim/docker/settings.jsondes Host-Rechners auf den/home/airsim_user/Documents/AirSim/settings.jsondes Docker-Containers. - Daher können wir jede beliebige Einstellungsdatei laden, indem wir einfach
PFAD/ZU/IHREM/settings.jsonändern, indem wir die folgenden Snippets inrun_airsim_image_source.shmodifizieren.
nvidia-docker run --runtime=nvidia -it \
-v $(pwd)/settings.json:/home/airsim_user/Documents/AirSim/settings.json \
-e SDL_VIDEODRIVER=$SDL_VIDEODRIVER_VALUE \
-e SDL_HINT_CUDA_DEVICE='0' \
--net=host \
--env="DISPLAY=$DISPLAY" \
--env="QT_X11_NO_MITSHM=1" \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
-env="XAUTHORITY=$XAUTH" \
--volume="$XAUTH:$XAUTH" \
--rm \
$DOCKER_IMAGE_NAME