如何正确编译 ParaView 以进行无头离屏渲染?
How to properly compile ParaView for headless offscreen rendering?
我在远程服务器上 运行ning OpenFOAM,基本上设法通过 paraview 的 pvserver
as described here 可视化结果。然而,在连接后,客户端产生
Server DISPLAY not accessible!
Display is not accessible on the server side. Remote rendering will be disabled.
这基本上是正确的,因为服务器 运行 不是 X 服务器。性能当然是次优的,因为没有远程渲染整个几何体被传输(我猜它几乎和直接直接 ssh-copying 文件到 运行 完全本地一样糟糕)。服务器 有一个简单的板载 GPU(c2:00.0 VGA 兼容控制器:ASPEED Technology, Inc. ASPEED Graphics Family (rev 41) lspci
),使用它可能称为计划 B,因为在某些时候我可能会切换到没有 GPU 的服务器或完全不同的服务器。因此,我查看了 https://kitware.github.io/paraview-docs/latest/cxx/Offscreen.html, and using Arch Linux I obtained its paraview PKGBUILD
via asp checkout paraview
并将以下开关附加到其 build() -> cmake
指令中:
-DVTK_OPENGL_HAS_OSMESA=ON \
-DVTK_USE_X=OFF \
-DPARAVIEW_USE_QT=OFF \
编译没有错误(虽然有很多警告,我 可能 必须检查它们在有和没有这些开关的情况下是否不同),但 pvserver
现在出现 SEGFAULT:
$LD_PRELOAD=/usrlib/libGLEW.so pvserver --force-offscreen-rendering
Waiting for client...
Connection URL: cs://xxx:11111
Accepting connection(s): xxx:11111
Client connected.
( 52.668s) [pvserver ]vtkOpenGLRenderWindow.c:565 ERR| vtkOSOpenGLRenderWindow (0x55f0fa7f4b60): GLEW could not be initialized: Missing GL version
Loguru caught a signal: SIGSEGV
Stack trace:
0 0x7f53ca2c8f80 /usr/bin/../lib/libc.so.6(+0x3cf80) [0x7f53ca2c8f80]
( 52.669s) [pvserver ] :0 FATL| Signal: SIGSEGV
Segmentation fault (core dumped)
LD_PRELOAD
按照建议对现有的 libGLEW.so
进行处理,例如here 没有改变,所以现在我被卡住了... /usr/lib/libosmesa.so
和 libOpenGL.so
一样,所以我错过了什么?我该如何正确解决这个问题?
我使用的是 ArchLinux,以下运行正常:
git clone https://gitlab.kitware.com/paraview/paraview.git --recursive
mkdir build
cd build
cmake -GNinja -DVTK_OPENGL_HAS_OSMESA=ON -DVTK_USE_X=OFF -DPARAVIEW_USE_QT=OFF ../paraview
ninja
./bin/pvserver
然后从实际的 ParaView 连接并在服务器上渲染一些东西就可以完美地工作了。
我在远程服务器上 运行ning OpenFOAM,基本上设法通过 paraview 的 pvserver
as described here 可视化结果。然而,在连接后,客户端产生
Server DISPLAY not accessible!
Display is not accessible on the server side. Remote rendering will be disabled.
这基本上是正确的,因为服务器 运行 不是 X 服务器。性能当然是次优的,因为没有远程渲染整个几何体被传输(我猜它几乎和直接直接 ssh-copying 文件到 运行 完全本地一样糟糕)。服务器 有一个简单的板载 GPU(c2:00.0 VGA 兼容控制器:ASPEED Technology, Inc. ASPEED Graphics Family (rev 41) lspci
),使用它可能称为计划 B,因为在某些时候我可能会切换到没有 GPU 的服务器或完全不同的服务器。因此,我查看了 https://kitware.github.io/paraview-docs/latest/cxx/Offscreen.html, and using Arch Linux I obtained its paraview PKGBUILD
via asp checkout paraview
并将以下开关附加到其 build() -> cmake
指令中:
-DVTK_OPENGL_HAS_OSMESA=ON \
-DVTK_USE_X=OFF \
-DPARAVIEW_USE_QT=OFF \
编译没有错误(虽然有很多警告,我 可能 必须检查它们在有和没有这些开关的情况下是否不同),但 pvserver
现在出现 SEGFAULT:
$LD_PRELOAD=/usrlib/libGLEW.so pvserver --force-offscreen-rendering
Waiting for client...
Connection URL: cs://xxx:11111
Accepting connection(s): xxx:11111
Client connected.
( 52.668s) [pvserver ]vtkOpenGLRenderWindow.c:565 ERR| vtkOSOpenGLRenderWindow (0x55f0fa7f4b60): GLEW could not be initialized: Missing GL version
Loguru caught a signal: SIGSEGV
Stack trace:
0 0x7f53ca2c8f80 /usr/bin/../lib/libc.so.6(+0x3cf80) [0x7f53ca2c8f80]
( 52.669s) [pvserver ] :0 FATL| Signal: SIGSEGV
Segmentation fault (core dumped)
LD_PRELOAD
按照建议对现有的 libGLEW.so
进行处理,例如here 没有改变,所以现在我被卡住了... /usr/lib/libosmesa.so
和 libOpenGL.so
一样,所以我错过了什么?我该如何正确解决这个问题?
我使用的是 ArchLinux,以下运行正常:
git clone https://gitlab.kitware.com/paraview/paraview.git --recursive
mkdir build
cd build
cmake -GNinja -DVTK_OPENGL_HAS_OSMESA=ON -DVTK_USE_X=OFF -DPARAVIEW_USE_QT=OFF ../paraview
ninja
./bin/pvserver
然后从实际的 ParaView 连接并在服务器上渲染一些东西就可以完美地工作了。