我想在没有 root 权限的服务器上进行无头渲染。因此,我创建了一个 Singularity 容器,如下所示:
Bootstrap: docker
From: nvidia/cuda:9.0-runtime-ubuntu16.04
%post
apt-get update && apt-get -y install \
python3-pip \
python3-tk \
libgtk2.0-dev \
libgl1-mesa-glx \
xvfb \
mesa-utils \
xserver-xorg \
nvidia-settings \
touch /usr/bin/nvidia-smi
touch /usr/bin/nvidia-xconfig # not working
执行容器后:
singularity exec --nv rendering.img bash
我想检查一切是否正常:
export DISPLAY=:99.0
Xvfb :99 -screen 0 640x480x24 &
Xvfb :99 -screen 0 640x480x24 &
[1] 20059
XSERVTransmkdir: ERROR: euid != 0,directory /tmp/.X11-unix will not be created.
glxinfo | grep "OpenGL version"
Error: couldn't find RGB GLX visual or fbconfig
当我这样做时:nvidia-smi
一切正常(驱动程序应该没问题)。我这里遗漏了什么?
答案1
nvidia-smi 执行时不运行 openGL,
目录 /tmp/.X11-unix 具有用于 X 服务器通信的 unix 套接字。
由于某种原因,您没有在 /tmp/.X11-unix 中写入的权限,因为 Xvfb 需要在此目录中创建一个套接字。