I managed finding a work around with getting GPU pass-through to work inside a privileged container.
I had to manually map the Nvidia driver, and some libraries from the host to container.
Now I have OpenGL working inside my privileged container. I do not have cuda libraries working, since
my project currently doesn’t utilize cuda at the moment…
I’m able to run glxgears inside it just fine, and my project is able to run as well.
For the readers, I used what I learned from simos in the thread I started a couple weeks ago…
Getting OpenGL to work inside a Ubuntu 16.04 Container
Here is the profile I’m using to get Nvidia pass-through to work for a privileged container.
user@host ~ $ lxc profile show my-profile
config:
environment.DISPLAY: :0
nvidia.driver.capabilities: graphics, compute, display, utility, video
raw.idmap: both 1000 1000
security.privileged: "true"
user.user-data: |
#cloud-config
package_upgrade: true
runcmd:
- 'apt-get update'
packages:
- x11-apps
- mesa-utils
- ros-kinetic-ros-base
- python-catkin-tools
- python-wstool
runcmd:
- 'ln -s /usr/lib/nvidia-418/libGLX_nvidia.so.418.87.01 /usr/lib/x86_64-linux-gnu/libGL.so.1'
- 'ln -s /usr/lib/nvidia-418/tls/libnvidia-tls.so.418.87.01 /usr/lib/x86_64-linux-gnu/libnvidia-tls.so.418.87.01'
- 'ln -s /usr/lib/nvidia-418/libnvidia-glcore.so.418.87.01 /usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.418.87.01'
- 'ldconfig'
- 'rm /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf'
- 'ldconfig'
- 'rosdep init'
- 'echo "source /opt/ros/kinetic/setup.bash" >> /home/ubuntu/.bashrc'
description: GPU-Pass through in Priveleged Container
devices:
Nvidia-driver:
path: /usr/lib/nvidia-418/
source: /usr/lib/nvidia-418/
type: disk
Nvidia-modeset:
bind: container
connect: unix:@/dev/nvidia-modeset
listen: unix:@/dev/nvidia-modeset
security.gid: "1000"
security.uid: "1000"
type: proxy
Nvidia-uvm:
bind: container
connect: unix:@/dev/nvidia-uvm
listen: unix:@/dev/nvidia-uvm
security.gid: "1000"
security.uid: "1000"
type: proxy
Nvidia0:
bind: container
connect: unix:@/dev/nvidia0
listen: unix:@/dev/nvidia0
security.gid: "1000"
security.uid: "1000"
type: proxy
Nvidiactl:
bind: container
connect: unix:@/dev/nvidiactl
listen: unix:@/dev/nvidiactl
security.gid: "1000"
security.uid: "1000"
type: proxy
OpenCL-Libraries:
path: /usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.418.87.01
source: /usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.418.87.01
type: disk
Quadro-M100M:
pci: "0000:01:00.0"
type: gpu
X0:
bind: container
connect: unix:@/tmp/.X11-unix/X0
listen: unix:@/tmp/.X11-unix/X0
security.gid: "1000"
security.uid: "1000"
type: proxy
eth0:
name: eth0
nictype: bridged
parent: lxdbr0
type: nic
root:
path: /
pool: lvm-pool
size: 32GB
type: disk
name: rtk-dev
used_by:
- /1.0/containers/performance-troubleshooting
I really do appreciate your time, in helping me in resolving this issue.
I found that, with my testing, that running my code inside a privileged container does not speed things up like I hoped it would.
Do you have any additional thoughts or ideas, that I could explore??