Running omniverse inside a docker container - no DLSS?

Hi all -

I’m trying to run omniverse inside a docker container. I have managed to get everything working except for DLSS. There is only this cryptic line in the logfile:

2022-02-24 23:22:20 [611ms] [Info] [carb.graphics-vulkan.plugin] Failed to initialize NGX on GPU: NVIDIA GeForce RTX 3070 Ti. Optional DLSS feature will be disabled for it.

I’m running the latest version of almost everything:

Host driver version: 510.47.03
CUDA version: 11.6
Omniverse version: 102.1.2+release.46667.2027b54e.teamcity

(This is being run on an Ubuntu 21.10 host system, with a docker container built from nvidia/vulkan:1.2.170-470. The container is built on Ubuntu 20.04)

Create, Kit, and Omniverse installer all run just fine inside the container. It is only DLSS that’s missing.

I’m at a total loss on this one. Has anyone seen anything like this, or have any pointers? At the very least, can someone tell me a bit more about what is needed to initialize NGX - what libraries it looks for, etc.?

I’d like to fix this, as this problem is resulting in a 50% drop in framerate. I’ve tried the other anti-aliasing techniques (TAA, FXAA), but none look as good, or are as fast.

(One additional possible shred of evidence: for a while Omniverse complained that it couldn’t open the libnvidia-ml.so library. This was because that symbolic link was missing; after linking libnvidia-ml.so to libnvidia-ml.so.1 it stopped complaining about that error.)

Hello @wingated! I reached out to the development team to help answer your questions. I will post back here as soon as I have more information to share!

I heard back from the development team. They said it looked like you are missing the nvidia-ml needed and suggested that you install a proper nvidia-container-toolkit

Please let me know if that information helps!

Hi @wingated -
Can you help me with how you ran omniverse inside a docker container? As, I also want to run Omniverse in a containerized environment, but not able to do it.

Hi @jimit-modi -

Of course. Below are some notes about how I got things working. The basic idea is to start with a container that supports vulkan and all of the necessary X-windows stuff. Then, from within the container, I actually use the OV installer to install kit (or create, or whatever). I haven’t figured out a way to do that from within a Dockerfile, partly because the installer expects a login to nvidia.com, so it’s a pretty manually involved process.

I started by running this container that has basically every permission I can give it:

sudo docker run -it \
  --rm \
  --gpus='all' \
  -e DISPLAY=$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
  -e NVIDIA_DRIVER_CAPABILITIES=compute,compat32,graphics,utility,video,display \
  --cap-add=SYS_ADMIN \
  --privileged \
  --device /dev/fuse \
  --shm-size=1g \
  --net host \
nvidia/vulkan:1.2.170-470 /bin/bash

I then installed all sorts of packages designed to let X windows applications run within the container and display in the host environment. I have no idea if this list of packages is minimal or not, so you could probably trim it somewhat:

apt update
apt install wget fuse

apt install -y libsdl1.2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev libsdl2-dev pkg-config libglvnd-dev libgl1-mesa-dev libegl1-mesa-dev libgles2-mesa-dev libxext6 libx11-6

apt install -y git curl adwaita-icon-theme at-spi2-core dconf-gsettings-backend dconf-service fontconfig fontconfig-config fonts-liberation glib-networking glib-networking-common glib-networking-services gsettings-desktop-schemas gtk-update-icon-cache hicolor-icon-theme humanity-icon-theme libatk-bridge2.0-0 libatk1.0-0 libatk1.0-data libatspi2.0-0 libauthen-sasl-perl libavahi-client3 libavahi-common-data libavahi-common3 libcairo-gobject2 libcairo2 libcolord2 libcroco3 libcups2 libdata-dump-perl libdatrie1 libdconf1 libencode-locale-perl libepoxy0 libfile-basedir-perl libfile-desktopentry-perl libfile-listing-perl libfile-mimeinfo-perl libfont-afm-perl libfontconfig1 libfontenc1 libgdk-pixbuf2.0-0 libgdk-pixbuf2.0-bin libgdk-pixbuf2.0-common libgraphite2-3 libgtk-3-0 libgtk-3-bin libgtk-3-common libharfbuzz0b libhtml-form-perl libhtml-format-perl libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl libhttp-cookies-perl libhttp-daemon-perl libhttp-date-perl libhttp-message-perl libhttp-negotiate-perl libio-html-perl libio-socket-ssl-perl libipc-system-simple-perl libjson-glib-1.0-0 libjson-glib-1.0-common liblcms2-2 liblwp-mediatypes-perl liblwp-protocol-https-perl libmailtools-perl libnet-dbus-perl libnet-http-perl libnet-smtp-ssl-perl libnet-ssleay-perl libnspr4 libnss3 libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libpixman-1-0 libproxy1v5 librest-0.7-0 librsvg2-2 librsvg2-common libsoup-gnome2.4-1 libsoup2.4-1 libtext-iconv-perl libthai-data libthai0 libtie-ixhash-perl libtimedate-perl libtry-tiny-perl libu2f-udev liburi-perl libvulkan1 libwww-perl libwww-robotrules-perl libx11-protocol-perl libxaw7 libxcb-shm0 libxcomposite1 libxft2 libxml-parser-perl libxml-twig-perl libxml-xpathengine-perl libxmu6 libxmuu1 libxpm4 libxtst6 libxxf86dga1 netbase perl-openssl-defaults shared-mime-info ubuntu-mono ucf x11-utils x11-xserver-utils xdg-utils

apt install libgomp1

adduser apps

I then use the “apps” user to launch the OV installer. When it asks for a login, I found that it tried to use the browser to complete the login which doesn’t work (because there was no browser installed in the container); fortunately, in the terminal window that ran the installer, it shows the URL it was trying to redirect to, so I just cut-and-pasted that into my browser to complete the login process.

I hope that helps. Good luck!