Running CARLA without Display and Selecting GPUs

This tutorial is designed for: - Remote server users that have several nvidia graphical cards and want to effectively use CARLA on all GPUs. - Desktop users who want to use the GPU that is not plugged on the screen for rendering CARLA.

On this tutorial you will learn. - How to configure your server to have nvidia working on rendering without a display attached. - How to use VNC + VGL to simulate a display connected to any GPU you have in your machine. - And Finally, how to run CARLA in this environment

This tutorial was tested in Ubuntu 16.04 and using NVIDIA 384.11 drivers.

Preliminaries

A few things need to be working in your server before. Latest NVIDIA Drivers, OpenGL, VirtualGL(VGL), TurboVNC 2.11, ,

NVIDIA Drivers

Download and install NVIDIA-drivers with typical tutorials http://www.nvidia.es/Download/index.aspx

OpenGL

Openg GL is necessary for Virtual GL. Normally OpenGL can be installed through apt.

sudo apt-get install freeglut3-dev mesa-utils

VGL

Follow this tutorial and install vgl:
Installing VGL

TurboVNC

Follow the tutorial below to install TurboVNC 2.11:
Installing TurboVNC

WARNING: Take care on which VNC you install as it may not be compatible with Unreal. The one above was the only one that worked for me.

Extra Packages

These extra packages were necessary to make unreal to work.

sudo apt install x11-xserver-utils libxrandr-dev

Configure your X

You must generate a X compatible with your nvdia and compatible to run without display. For that, the following command worked:

sudo nvidia-xconfig -a --use-display-device=None --virtual=1280x1024

Emulating The Virtual Display

Run your own Xorg. Here I use number 7, but it could be labeled with any free number.

sudo nohup Xorg :7 &

Run an auxiliary remote VNC-Xserver. This will create a virtual display "8".

/opt/TurboVNC/bin/vncserver :8

If everything is working fine the following command should run smoothly.

DISPLAY=:8 vglrun -d :7.0 glxinfo

Note. This will run glxinfo on Xserver 7, device 0. This means you are selecting the GPU 0 on your machine. To run on other GPU, such as GPU 1 run:

DISPLAY=:8 vglrun -d :7.1 glxinfo

Extra

If you want disable the need of sudo when creating the 'nohup Xorg' go to the '/etc/X11/Xwrapper.config' file and change 'allowed_users=console' to 'allowed_users=anybody'

It may be needed to stop all Xorg servers before running nohup Xorg. The command for that could change depending on your system. Generally for Ubuntu 16.04 you should use:

sudo service lightdm stop

Running CARLA

Now, finally, to run CARLA on a certain gpu_number placed in a certain $CARLA_PATH, run.

DISPLAY=:8 vglrun -d :7.<gpu_number> $CARLA_PATH/CarlaUE4/Binaries/Linux/CarlaUE4