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:#

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_image ist der gewünschte Name Ihres Docker-Images. Standardmäßig ist dies airsim_binary mit 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 Parameter target_image im vorherigen Schritt. Geben Sie standardmäßig airsim_binary:10.0-devel-ubuntu18.04 ein.
  • UNREAL_BINARY_SHELL_SCRIPT: für die Blocks-Umgebung ist dies Blocks/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 -- headless am Ende an.

    $ ./run_airsim_image_binary.sh Blocks/Blocks.sh -- headless

  • Angeben einer settings.json

Quelle#

Anforderungen:#

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 Schritte erklärt.

    Beachten Sie, dass Sie Schritt 2: UE4 unter Linux herunterladen nicht 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-docker unterstützt alle CUDA-Versionen, die auf dem NVIDIA cudagl Dockerhub hier aufgeführt sind.
    • Weitere Informationen zu fortgeschrittenen Konfigurationen mit ue4-docker finden Sie auf dieser Seite.
  • Festplattenspeicher

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 mit adamrehn/ue4-engine:4.19.2-cudagl10.0 durchgeführt. Weitere Versionen finden Sie unter ue4-docker.
    • --target_image ist der gewünschte Name Ihres Docker-Images. Standardmäßig ist dies airsim_source mit 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.

[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 project und das Verzeichnis, in dem die Binaries platziert werden sollen, mit archivedirectory an.
$ /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.json des Host-Rechners auf den /home/airsim_user/Documents/AirSim/settings.json des Docker-Containers.
  • Daher können wir jede beliebige Einstellungsdatei laden, indem wir einfach PFAD/ZU/IHREM/settings.json ändern, indem wir die folgenden Snippets in run_airsim_image_binary.sh modifizieren.
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.json des Host-Rechners auf den /home/airsim_user/Documents/AirSim/settings.json des Docker-Containers.
  • Daher können wir jede beliebige Einstellungsdatei laden, indem wir einfach PFAD/ZU/IHREM/settings.json ändern, indem wir die folgenden Snippets in run_airsim_image_source.sh modifizieren.
   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