Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

{vis}[foss/2022b] Paraview 5.11.1 fat build compatible with hardware rendering, software rendering, headless server mode, as well as interactive mode. #18631

Merged

Conversation

lcniel
Copy link
Contributor

@lcniel lcniel commented Aug 23, 2023

(created using eb --new-pr)

Edit 09-06: With the merging of #18630 and easybuilders/easybuild-easyblocks#2985 this should now function after building more straightforwardly, provided config for EGL exists.

@lcniel
Copy link
Contributor Author

lcniel commented Aug 23, 2023

Test report by @lcniel
SUCCESS
Build succeeded for 1 out of 1 (1 easyconfigs in total)
vera-r07-01 - Linux Rocky Linux 8.7, x86_64, Intel(R) Xeon(R) Gold 6338 CPU @ 2.00GHz, 1 x NVIDIA NVIDIA A40, 525.85.12, Python 3.6.8
See https://gist.github.com/lcniel/31cace7ffb725593ceea899f991d30bc for a full test report.

@lcniel lcniel changed the title Fat build compatible with hardware rendering, software rendering, headless server mode, as well as interactive mode. Paraview 5 fat build compatible with hardware rendering, software rendering, headless server mode, as well as interactive mode. Aug 23, 2023
@lcniel lcniel changed the title Paraview 5 fat build compatible with hardware rendering, software rendering, headless server mode, as well as interactive mode. Paraview 5.11.1 fat build compatible with hardware rendering, software rendering, headless server mode, as well as interactive mode. Aug 23, 2023
@lcniel
Copy link
Contributor Author

lcniel commented Aug 23, 2023

Note that I have tested this build in a few different ways.

  • Interactive mode in ThinLinc session with no VGL. Gives software rendering.
  • vglrun in ThinLinc session. Gives hardware rendering.
  • mpirun pvserver on noninteractive headless node. Can be connected to with interactive client (in thinlinc session or on a local computer) for remote hardware rendering on headless node.

I checked that hardware rendering worked with nvtop.

Note that the libglvnd flag __EGL_VENDOR_LIBRARY_DIRS must be configured such that the path to the nvidia driver json comes before the OSMesa driver json.

One can also exclude OSMesa and even Mesa completely and build it directly off libglvnd, without the OSMesa flag turned on. I am not sure if that would be preferred; I wanted to make a maximally inclusive build but fallback to software rendering can be problematic in many cases. EDIT: Removed OSMesa, its flag was anyway incorrectly written and software rendering was going via EGL to the mesa driver specified by glvnd.

@paulmelis
Copy link
Contributor

Interesting, I'm going to build this and see if it supports all the use cases on our end. My feeling says it should not be possible to get a fat binary like this (as I've looked into it before and even Kitware themselves distribute separate versions for headless EGL and osmesa ;-)).

@paulmelis
Copy link
Contributor

Btw, what kind of EB build time are you seeing for this config? ParaView has always been one of the slowest packages to build for us. On a 72-core Xeon 8360Y 2.4GHz node my build has been chugging away for 90 minutes now, with configure alone already taking 40 minutes. We've had some FS metadata issues in the past causing slow builds and these might be cropping up again, hence a reference data point would be nice to have. ParaView-5.10.1-foss-2022a-mpi.eb took 3 hour 31 min on a similar node a few months ago, looking at the EB log file.

@lcniel
Copy link
Contributor Author

lcniel commented Aug 24, 2023

Interesting, I'm going to build this and see if it supports all the use cases on our end. My feeling says it should not be possible to get a fat binary like this (as I've looked into it before and even Kitware themselves distribute separate versions for headless EGL and osmesa ;-)).

I believe that it didn't use to be possible not that long ago, but is now - they've changed their guidelines. Maybe it used to depend directly on Glew builds which were exclusive. Of course, it will only use one driver at a time. Headless just means that it doesn't support X.

Btw, what kind of EB build time are you seeing for this config? ParaView has always been one of the slowest packages to build for us. On a 72-core Xeon 8360Y 2.4GHz node my build has been chugging away for 90 minutes now, with configure alone already taking 40 minutes. We've had some FS metadata issues in the past causing slow builds and these might be cropping up again, hence a reference data point would be nice to have. ParaView-5.10.1-foss-2022a-mpi.eb took 3 hour 31 min on a similar node a few months ago, looking at the EB log file.

This package alone (I had everything else built already) took less than an hour in total on 16 cores Intel(R) Xeon(R) Gold 6338 CPU @ 2.00GHz, which is consistent with my experience of VTK builds on various systems.

ETA: according to the TR I uploaded it took abour 28 minutes.

@paulmelis
Copy link
Contributor

28 minutes for full the ParaView build (with all deps already built) on a 16-core machine? 👀

@lcniel
Copy link
Contributor Author

lcniel commented Aug 24, 2023

28 minutes for full the ParaView build (with all deps already built) on a 16-core machine? 👀

Yes. For reference - that's similar to what I used to get when I built VTK from scratch in Apptainer for a Mayavi install I used to do on my 12-core Ryzen 3900X workstation, so it doesn't seem that crazy to me. @Micket knows better than me if there are any special hardware quirks that speeds the whole thing up on those nodes.

@Micket
Copy link
Contributor

Micket commented Aug 24, 2023

@paulmelis you can view build reports in all merged PRs. Like taking this recent one on our test cluster via boegelbot
Like https://gist.github.com/boegelbot/bd96f540fc6c6cd7ca0ec7afb7a0b946
8 cores, 45minutes
Multiple cores wouldn't likely not affect the configure step at all, so i assume it's all filesystem bottlenecks in your case.

I believe that it didn't use to be possible not that long ago, but is now - they've changed their guidelines. Maybe it used to depend directly on Glew builds which were exclusive. Of course, it will only use one driver at a time. Headless just means that it doesn't support X.

I happened to see this very much related issue though: https://gitlab.kitware.com/vtk/vtk/-/issues/18547

Maybe we are getting away without using GLEW for extensions? Or maybe the GLX part is actually not working properly here and software rendering is picked up, or.. maybe EGL rendering is used on the frontend part as well somehow and we just aren't seeing it?

(I look forward to the glorious future when osmesa and glx can both go die in a fire and we welcome our new EGL overlords)

Comment on lines 4 to 5
version = '5.11.1'
versionsuffix = '-mpi-egl-osmesa'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we can make a fat build i think we can exclude the suffices completely. I think we should just drop the -mpi one as well (if someone wants to make a mpi-less version, let them add -nompi instead!)

We can combine this with bumping it to 2022b toolchain instead, which doesn't yet have a ParaView, and just treat it as the default build henceforth

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, if we bump it to 2022b I will have to check all of the versions of the dependencies so that will take some more time, but I think there are GCC 12.2.0 easyconfigs of all the deps so that should be OK.


sanity_check_commands = ['python -c "import paraview"']

patches = ['ParaView-5.11.1-remove_glew_init_warning.patch']
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please move this right below sources

@lcniel
Copy link
Contributor Author

lcniel commented Aug 24, 2023

Maybe we are getting away without using GLEW for extensions? Or maybe the GLX part is actually not working properly here and software rendering is picked up, or.. maybe EGL rendering is used on the frontend part as well somehow and we just aren't seeing it?

(I look forward to the glorious future when osmesa and glx can both go die in a fire and we welcome our new EGL overlords)

There's definitely pretty heavy GPU usage going on on the frontend, and the CPU usage is comparatively modest. But the GLEW error message we patched out seems to suggest there is indeed some kind of issue with GLX, so I also wonder what exactly is happening.

…i-egl-osmesa.eb

Co-authored-by: Mikael Öhman <micketeer@gmail.com>
@paulmelis
Copy link
Contributor

Justed tested the build on one of our GPU nodes. These have four A100s, each configured as an X screen. We don't have EGL configured on these nodes (no access to /dev/dri/...), so only GLX will work.

Some background: for 5.10 I've provided our users with 2 different builds:

  • The standard ParaView/5.10.1-foss-2022a-mpi for interactive GUI work
  • A custom ParaView-server-osmesa/5.10.1-foss-2022a-mpi for headless software-rendering-only, either batch on client-server

Running 5.11.1-foss-2022a-mpi-egl-osmesa under VirtualGL in a VNC desktop works, but does print these warning messages related to Mesa, which I haven't seen before. It doesn't show up when using ParaView/5.10.1-foss-2022a-mpi. Since the warning comes from libEGL it must be related to the EGL support in the 5.11.1 build, as that's not in our 5.10.1 module.

snellius paulm@gcn25 09:59 ~$ vglrun paraview
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/gpfs/scratch1/nodespecific/gcn25/paulm.3492237/runtime-paulm'
libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

(   4.212s) [paraview        ] vtkEGLRenderWindow.cxx:351   WARN| vtkEGLRenderWindow (0x58abf10): EGL device index: 0 could not be initialized. Trying other devices...
libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

Rendering within the GUI seems okay and the connection info reports the NVIDIA GPU being used, and I see load in nvidia-smi, so that's good.

Since we don't have EGL any headless non-X rendering should fall back to OSMesa, and it does (showing the same libEGL warnings). I've been using a small Python script over the years to check what OpenGL and rendering capabilities ParaView reports itself:

snellius paulm@gcn25 10:32 ~$ cat pv_opengl_info.py 
# Check OpenGL support of ParaView
# Paul Melis, SURF (paul.melis@surf.nl)
# Info from https://discourse.paraview.org/t/is-egl-enabled-in-any-of-the-kitware-paraview-binaries/5247
from paraview.simple import *

o = GetOpenGLInformation()
print('OpenGL')
print('vendor   :', o.GetVendor())
print('version  :', o.GetVersion())
print('renderer :', o.GetRenderer())
# Too much output
#print('capabilities', o.GetCapabilities())

from paraview.modules.vtkRemotingViews import *
renInfo = vtkPVRenderingCapabilitiesInformation()
renInfo.GetCapabilities()
renInfo.CopyFromObject(None)
print()
print('Support')
print('onscreen rendering              :', renInfo.Supports(vtkPVRenderingCapabilitiesInformation.ONSCREEN_RENDERING))
print('headless rendering using OSMESA :', renInfo.Supports(vtkPVRenderingCapabilitiesInformation.HEADLESS_RENDERING_USES_OSMESA))
print('headless rendering using EGL    :', renInfo.Supports(vtkPVRenderingCapabilitiesInformation.HEADLESS_RENDERING_USES_EGL))
print('OpenGL                          :', renInfo.Supports(vtkPVRenderingCapabilitiesInformation.OPENGL))

When running this with pvpython 5.11.1 (stripped out the libEGL warnings) it indeed falls back to Mesa for software-OpenGL, however it also reports it can't do headless OSMesa rendering:

snellius paulm@gcn25 10:31 ~$ pvpython pv_opengl_info.py
OpenGL
vendor   : Mesa/X.org
version  : 4.5 (Compatibility Profile) Mesa 22.0.3
renderer : llvmpipe (LLVM 14.0.3, 256 bits)

Support
onscreen rendering              : True
headless rendering using OSMESA : False
headless rendering using EGL    : True
OpenGL                          : True

Checking to see what happens if we try to rendering something simple shows a number of issues.

snellius paulm@gcn25 10:36 ~$ cat pv_cone_shrink.py
from paraview.simple import *

# Create a cone and assign it as the active object
Cone()

# Set a property of the active object
SetProperties(Resolution=32)

# Apply the shrink filter to the active object
# Shrink is now active
Shrink() 

# Show shrink
Show() 

# Render the active view
Render() 

WriteImage('cone_shrink.png')
print('Wrote image')

# This actually opens a window in the VNC desktop...
snellius paulm@gcn25 10:38 ~$ pvpython pv_cone_shrink.py 
libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

(   2.305s) [paraview        ] vtkEGLRenderWindow.cxx:351   WARN| vtkEGLRenderWindow (0x4df0220): EGL device index: 0 could not be initialized. Trying other devices...
libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

(   2.537s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
Mesa: User error: GL_INVALID_VALUE in glTexImage2D(internalFormat=GL_NONE)
(   2.537s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
(   2.537s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
(   2.537s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
(   2.537s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
(   2.538s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
(   2.538s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
Mesa: 3 similar GL_INVALID_VALUE errors
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glClear(incomplete framebuffer)
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
(   2.604s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
(   2.604s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glCopyTexImage2D(invalid readbuffer)
(   2.604s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
Mesa: User error: GL_INVALID_VALUE in glUniform1i(invalid sampler/tex unit index for uniform 0)
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawArrays
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glClear(incomplete framebuffer)
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
(   2.610s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
(   2.610s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glCopyTexImage2D(invalid readbuffer)
(   2.610s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
Mesa: User error: GL_INVALID_VALUE in glUniform1i(invalid sampler/tex unit index for uniform 0)
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawArrays
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glBlitFramebuffer(incomplete draw/read buffers)
(   2.611s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
Mesa: User error: GL_INVALID_VALUE in glUniform1i(invalid sampler/tex unit index for uniform 0)
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glBlitFramebuffer(incomplete draw/read buffers)
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glClear(incomplete framebuffer)
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
(   2.663s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glCopyTexImage2D(invalid readbuffer)
(   2.663s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
Mesa: User error: GL_INVALID_VALUE in glUniform1i(invalid sampler/tex unit index for uniform 0)
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawArrays
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glClear(incomplete framebuffer)
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
(   2.664s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glCopyTexImage2D(invalid readbuffer)
(   2.664s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
Mesa: User error: GL_INVALID_VALUE in glUniform1i(invalid sampler/tex unit index for uniform 0)
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawArrays
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glBlitFramebuffer(incomplete draw/read buffers)
(   2.664s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
Mesa: User error: GL_INVALID_VALUE in glUniform1i(invalid sampler/tex unit index for uniform 0)
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glBlitFramebuffer(incomplete draw/read buffers)
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glClear(incomplete framebuffer)
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
(   2.690s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glCopyTexImage2D(invalid readbuffer)
(   2.690s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
Mesa: User error: GL_INVALID_VALUE in glUniform1i(invalid sampler/tex unit index for uniform 0)
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawArrays
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glClear(incomplete framebuffer)
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawRangeElements
(   2.691s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glCopyTexImage2D(invalid readbuffer)
(   2.691s) [paraview        ]     vtkOpenGLState.cxx:1795  WARN| Hardware does not support the number of textures defined.
Mesa: User error: GL_INVALID_VALUE in glUniform1i(invalid sampler/tex unit index for uniform 0)
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glDrawArrays
Mesa: User error: GL_INVALID_FRAMEBUFFER_OPERATION in glReadPixels(incomplete framebuffer)
Wrote image

The resulting image is black.

When trying to force offscreen rendering I think it still attemps to open a window (and fails on that):

snellius paulm@gcn25 10:38 ~$ pvpython --force-offscreen-rendering pv_cone_shrink.py
snellius paulm@gcn25 10:39 ~$ pvpython --force-offscreen-rendering pv_cone_shrink.py 
libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

(   2.395s) [paraview        ] vtkEGLRenderWindow.cxx:351   WARN| vtkEGLRenderWindow (0x4c4fdb0): EGL device index: 0 could not be initialized. Trying other devices...
libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

(   2.592s) [paraview        ] vtkEGLRenderWindow.cxx:351   WARN| vtkEGLRenderWindow (0x4b80630): EGL device index: 0 could not be initialized. Trying other devices...
libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

X Error of failed request:  BadWindow (invalid Window parameter)
  Major opcode of failed request:  3 (X_GetWindowAttributes)
  Resource id in failed request:  0x0
  Serial number of failed request:  8
  Current serial number in output stream:  9

So for me the current 5.11.1 build would only provide a working GUI version.

Node GPU info (first screen only, other 3 are the same):

snellius paulm@gcn25 10:04 ~$ DISPLAY=:0.0 glxinfo -B
name of display: :0.0
display: :0  screen: 0
direct rendering: Yes
Memory info (GL_NVX_gpu_memory_info):
    Dedicated video memory: 40960 MB
    Total available memory: 40960 MB
    Currently available dedicated video memory: 40355 MB
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: NVIDIA A100-SXM4-40GB/PCIe/SSE2
OpenGL core profile version string: 4.6.0 NVIDIA 520.61.05
OpenGL core profile shading language version string: 4.60 NVIDIA
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile

OpenGL version string: 4.6.0 NVIDIA 520.61.05
OpenGL shading language version string: 4.60 NVIDIA
OpenGL context flags: (none)
OpenGL profile mask: (none)

OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 520.61.05
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20

@lcniel
Copy link
Contributor Author

lcniel commented Aug 25, 2023

@paulmelis Thank you for highlighting this use-case and providing your script. I didn't consider the specific use-case of headless software rendering (my motivation for working on headless rendering has always been to access high-powered GPU:s).

I don't currently have access to our building environment to mess with the building configurations, but I get the same result as you report (no Mesa offscreen rendering), although I don't get any warnings even on a node without any GPU. My guess is that your use-case would work if we set

configopts += '-DVTK_USE_X=OFF '

Since as far as I can see the main use-case for this would be when EGL is not available, it might make sense to then also set

configopts += '-DVTK_OPENGL_HAS_EGL=OFF '

I would have to check which combinations of these work and which do not to be sure, however, about which is the most appropriate, but an offscreen OSMesa only build sounds like a reasonable option.

@lcniel
Copy link
Contributor Author

lcniel commented Aug 28, 2023

OK, so I went over everything again.

  • I had specified the OSMESA flag incorrectly, so that's why it was ignored. Software rendering on-screen and offscreen works with EGL. Since EGL can be made to work with or without an actual GPU, it would make the most sense to me to have the EGL-X-MPI build be the default one. An OSMesa build is more of a special-case build, when EGL is not available and you only want to render offscreen, since it is incompatible with both EGL and X.
  • I have updated to 2022b. I have also included support for XDMF2 and XDMF3 files in the "default" build.
    - I am also working on a separate build which includes CUDA support, and support for Nvidia IndeX volume rendering and Nvidia OptiX ray tracing. Seems like ParaView assumes a pretty old CUDA version, something like 11.2, which doesn't support GCC 12 compilation, so I will set this aside for now. A bit of a pity.

@paulmelis
Copy link
Contributor

paulmelis commented Aug 29, 2023

I had specified the OSMESA flag incorrectly, so that's why it was ignored. Software rendering on-screen and offscreen works with EGL.

This I don't get. EGL does not provide software-based rendering by itself, only OSMESA does. Unless you have your OpenGL environment set up in such a way that the software implementation from the Mesa package is used as a fallback when NVIDIA can't be used (which kind of defeats the purpose of the OSMESA alternative). I really need to play around with your latest easyconfig to get my head around this stuff.

Btw, isn't one of the main reasons to go for an EGL build so you won't need an X server and therefore have less of a security and configuration hassle? Making EGL-X-MPI the default would force those use cases to still go through X, right (i.e. headless EGL isn't possible)? Apparently, EGL can only be used for headless operation, so does not involve X. Especially this line from https://kitware.github.io/paraview-docs/nightly/cxx/Offscreen.html makes me think enabled EGL and X will still always require an X server for display.

If VTK_OPENGL_HAS_EGL or VTK_OPENGL_HAS_OSMESA is ON, the build supports headless rendering, otherwise VTK_USE_X must be ON and the build does not support headless, but can still support offscreen rendering.

With regards to CPU-based OpenGL rendering, how often would you envision that happens in the standalone GUI versus in the Paraview server? For us the software-rendering server is merely a fallback option for really large datasets that don't fit on our GPU nodes. Most uses fit on a single GPU node and so can use a set of GPU-rendering server processes (through X, although I still need to configure EGL to get rid of X).

I wish we had some more data on use cases to make a good choice among all the combinations :) I also don't really know how many sites have (only) EGL enabled versus X.

@boegel boegel changed the title Paraview 5.11.1 fat build compatible with hardware rendering, software rendering, headless server mode, as well as interactive mode. {vis}[foss/2022b] Paraview 5.11.1 fat build compatible with hardware rendering, software rendering, headless server mode, as well as interactive mode. Aug 30, 2023
@paulmelis
Copy link
Contributor

Managed to build a 2022a version (as that's what we're running) of your ParaView-5.11.1-foss-2022b.eb.

GUI version runs fine with NVIDIA OpenGL rendering, no surprise there.

Offscreen rendering (i.e. avoiding a window getting created) does not seem to work, though. E.g. pvpython --force-offscreen-rendering pv_cone_shrink.py fails with a X Error of failed request: BadWindow (invalid Window parameter). The current ParaView/5.10.1-foss-2022a-mpi we run on our system does not show this error. I don't fully understand why, perhaps something was changed in this area in 5.11.

The 5.11 version also seems to need an X server for all different modes of operation. DISPLAY= pvpython --force-offscreen-rendering pv_cone_shrink.py fails in vtkXRenderWindowInteractor::Initialize() and so still needs an X window.

@paulmelis
Copy link
Contributor

paulmelis commented Aug 30, 2023

Looking a bit closer into EGL support on our GPU nodes it is available, as I wasn't aware the device-file configuration for /dev/dri/card* was updated already. So testing EGL a bit more with the 5.11 build it seems the Mesa/22.0.3-GCCcore-11.3.0 module is interfering. When loaded, it adds $EBROOTMESA/share/glvnd/egl_vendor.d as the first entry to __EGL_VENDOR_LIBRARY_DIRS, and that dir only contains 50_mesa.json. It seems like that EGL config is accepted, causing the Mesa warnings, but also fails to intialize EGL:

snellius paulm@gcn60 17:44 ~$ pvpython pv_opengl_info.py 
libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /sw/arch/RHEL8/EB_production/2022/software/Mesa/22.0.3-GCCcore-11.3.0/lib/dri, suffix _dri)

(   1.665s) [paraview        ] vtkEGLRenderWindow.cxx:381    ERR| vtkEGLRenderWindow (0x3ad7ae0): Only EGL 1.4 and greater allows OpenGL as client API. See eglBindAPI for more information.
(   1.665s) [paraview        ]vtkOpenGLRenderWindow.c:493    ERR| vtkEGLRenderWindow (0x3ad7ae0): GLEW could not be initialized: Missing GL version

Loguru caught a signal: SIGSEGV
Stack trace:
0       0x14782f68cb20 /lib64/libc.so.6(+0x4eb20) [0x14782f68cb20]
(   1.666s) [paraview        ]                       :0     FATL| Signal: SIGSEGV
Segmentation fault

If I override the EGL ICD search path to /usr/share/glvnd/egl_vendor.d, which contains 10_nvidia.json and 50_mesa.json, it correctly picks up the NVIDIA config:

snellius paulm@gcn60 17:45 ~$ ls -l /usr/share/glvnd/egl_vendor.d
total 2
-rw-r--r--. 1 root root 107 Sep 29  2022 10_nvidia.json
-rw-r--r--. 1 root root 105 Jan 25  2022 50_mesa.json

snellius paulm@gcn60 17:45 ~$ __EGL_VENDOR_LIBRARY_DIRS=/usr/share/glvnd/egl_vendor.d pvpython pv_opengl_info.py 
OpenGL
vendor   : NVIDIA Corporation
version  : 4.6.0 NVIDIA 520.61.05
renderer : NVIDIA A100-SXM4-40GB/PCIe/SSE2

Support
onscreen rendering              : False
headless rendering using OSMESA : False
headless rendering using EGL    : True
OpenGL                          : True

snellius paulm@gcn60 17:45 ~$ __EGL_VENDOR_LIBRARY_DIRS=/usr/share/glvnd/egl_vendor.d pvpython pv_cone_shrink.py 
Wrote image

@lcniel Don't you see the same issue when Mesa is loaded? Or have you changed the ICD search paths?

@lcniel
Copy link
Contributor Author

lcniel commented Aug 30, 2023

@lcniel Don't you see the same issue when Mesa is loaded? Or have you changed the ICD search paths?

See this PR of mine: #18630

As I mentioned above in this PR:

Note that the libglvnd flag __EGL_VENDOR_LIBRARY_DIRS must be configured such that the path to the nvidia driver json comes before the OSMesa driver json.

@lcniel
Copy link
Contributor Author

lcniel commented Aug 31, 2023

With regards to CPU-based OpenGL rendering, how often would you envision that happens in the standalone GUI versus in the Paraview server? For us the software-rendering server is merely a fallback option for really large datasets that don't fit on our GPU nodes. Most uses fit on a single GPU node and so can use a set of GPU-rendering server processes (through X, although I still need to configure EGL to get rid of X).

@paulmelis

Personally, the only thing I would ever need is headless EGL without X, in GPU mode, to run pvserver. Very large datasets can be streamed over multiple GPUs (and I think maybe even nodes) with NVidia Index, but I am still working on a separate build for that (there are CUDA dependencies).

In practice, I suspect a chunk of users will want to run ParaView interactively through a virtual desktop client using VirtualGL. Because they find pvserver to be a hassle, or don't have the right version of Paraview, or have occasionally unstable connections and don't want to risk Paraview crashing from that, or they just want to do a quick sanity check. You get the idea.

What I'd like is thus for there to be a single build that supports at minimum both of these "typical" options. Software rendering I see more as a bonus or fallback, like you say. If I have to choose between EGL + X and EGL + Headless Software Rendering I would choose EGL + X any day of the week. But as you seem to note I don't think that choice really needs to be made - EGL supports software rendering on GPU-less nodes.

If there are very specialized pvpython or pvweb (the latter of which is AFAIK heavily undersupported/abandoned atm, but has promising uses, see Trame) users that need special builds, I would say that is also a separate issue.

(It's unfortunate that the various Paraview web client-server apps are so underdeveloped, I tried writing an applet in Trame for simple volume rendering, it was awesome but the lack of an interactive color bar/opacity editor, or the ability to load regular Paraview color maps, kills it. I guess Lockheed Martin Sandia National Laboratories doesn't find it useful for, y'know, 🚀⚛️💥☢️)

@kosl
Copy link
Contributor

kosl commented Sep 3, 2023

On our NVidia VirtualGL login node while starting ParaView I am getting

libEGL warning: MESA-LOADER: failed to open nouveau: ...

(   1.636s) [paraview        ] vtkEGLRenderWindow.cxx:351   WARN| vtkEGLRenderWindow (0x5dcbc20): EGL device index: 0 could not be initialized. Trying other devices...

and for

$ pvpython pv_opengl_info.py
libEGL warning: MESA-LOADER: failed to open nouveau: /opt/pkg/ITER/software/Mesa/22.2.4-GCCcore-12.2.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /opt/pkg/ITER/software/Mesa/22.2.4-GCCcore-12.2.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /opt/pkg/ITER/software/Mesa/22.2.4-GCCcore-12.2.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /opt/pkg/ITER/software/Mesa/22.2.4-GCCcore-12.2.0/lib/dri, suffix _dri)

(   2.052s) [paraview        ] vtkEGLRenderWindow.cxx:351   WARN| vtkEGLRenderWindow (0x1ce9f40): EGL device index: 0 could not be initialized. Trying other devices...
OpenGL
vendor   : Mesa/X.org
version  : 4.5 (Compatibility Profile) Mesa 22.2.4
renderer : llvmpipe (LLVM 15.0.5, 256 bits)
libEGL warning: MESA-LOADER: failed to open nouveau: /opt/pkg/ITER/software/Mesa/22.2.4-GCCcore-12.2.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /opt/pkg/ITER/software/Mesa/22.2.4-GCCcore-12.2.0/lib/dri, suffix _dri)

libEGL warning: MESA-LOADER: failed to open nouveau: /opt/pkg/ITER/software/Mesa/22.2.4-GCCcore-12.2.0/lib/dri/nouveau_dri.so: cannot open shared object file: No such file or directory (search paths /opt/pkg/ITER/software/Mesa/22.2.4-GCCcore-12.2.0/lib/dri, suffix _dri)

(   3.244s) [paraview        ] vtkEGLRenderWindow.cxx:351   WARN| vtkEGLRenderWindow (0x4de4bf0): EGL device index: 0 could not be initialized. Trying other devices...


Support
onscreen rendering              : True
headless rendering using OSMESA : False
headless rendering using EGL    : True
OpenGL                          : True

while for older ParaView we get cleaner output

$ ml ParaView/5.10.1-foss-2022a-mpi
$ pvpython pv_opengl_info.py

OpenGL
vendor   : NVIDIA Corporation
version  : 4.5.0 NVIDIA 515.65.01
renderer : NVIDIA A100-PCIE-40GB/PCIe/SSE2

Support
onscreen rendering              : True
headless rendering using OSMESA : False
headless rendering using EGL    : False
OpenGL                          : True

I would say that this FAT build is not correct for now since it shows only Mesa rendering and disregards LD_PRELOADed VIrtualGL imposter libraries. Anyway, I could use it for PR #18711

@lcniel
Copy link
Contributor Author

lcniel commented Sep 11, 2023

Test report by @lcniel
SUCCESS
Build succeeded for 2 out of 2 (2 easyconfigs in total)
vera-r07-03 - Linux Rocky Linux 8.7, x86_64, Intel(R) Xeon(R) Gold 6338 CPU @ 2.00GHz, 4 x NVIDIA NVIDIA A40, 525.125.06, Python 3.6.8
See https://gist.github.com/lcniel/47d6b19161412bbf866edb63d18d95ee for a full test report.

@lcniel
Copy link
Contributor Author

lcniel commented Sep 12, 2023

Test report by @lcniel
SUCCESS
Build succeeded for 2 out of 2 (2 easyconfigs in total)
vera-c1 - Linux Rocky Linux 8.7, x86_64, Intel Xeon Processor (Skylake), Python 3.6.8
See https://gist.github.com/lcniel/2d3354d453bc41a4f5418a2da0d91175 for a full test report.

@akesandgren
Copy link
Contributor

Test report by @akesandgren
SUCCESS
Build succeeded for 2 out of 2 (2 easyconfigs in total)
b-cn1603.hpc2n.umu.se - Linux Ubuntu 22.04, x86_64, AMD EPYC 7313 16-Core Processor, 1 x NVIDIA NVIDIA A100 80GB PCIe, 525.125.06, Python 3.10.12
See https://gist.github.com/akesandgren/f16a26269c90b3c08cb97d6ebc5b6cb7 for a full test report.

configopts += '-DPARAVIEW_ENABLE_XDMF2=ON '
configopts += '-DPARAVIEW_ENABLE_XDMF3=ON '
configopts += '-DPython3_ROOT_DIR=$EBROOTPYTHON '
configopts += '-DCMAKE_CUDA_ARCHITECTURES=70 72 80 86 87 89 90 90a '
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This does not work, it would need " around the list which should be ";" separated, and the list should not be hardcoded but taken from the cuda_compute_capabilities parameter like this
-DCMAKE_CUDA_ARCHITECTURES="%(cuda_cc_cmake)s"

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We're also beginning to use this construct instead of the "+=" stuff:

_copts = [
 '-Dparam1',
 '-Dparam2',
]
configopts = ' '.join(_copts)

to reduce the risk of missing a " " between the arguments.

@lcniel
Copy link
Contributor Author

lcniel commented Sep 27, 2023

Test report by @lcniel
SUCCESS
Build succeeded for 2 out of 2 (2 easyconfigs in total)
vera-c1 - Linux Rocky Linux 8.7, x86_64, Intel Xeon Processor (Skylake), Python 3.6.8
See https://gist.github.com/lcniel/91bbbd6c302fe3054aa7a69d8b5799fe for a full test report.

]

_copts = [
'-DPARAVIEW_INSTALL_DEVELOPMENT_FILES=ON -DPARAVIEW_BUILD_SHARED_LIBS=ON',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be split into two lines

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Anfd it is ok to keep relevant comments from the "configopts += " version

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will have to see if the style tests accept comments (I know e.g. flake8 is quite touchy about them).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

]

_copts = [
'-DPARAVIEW_INSTALL_DEVELOPMENT_FILES=ON -DPARAVIEW_BUILD_SHARED_LIBS=ON',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Split into two lines here too

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

@akesandgren
Copy link
Contributor

Test report by @akesandgren
SUCCESS
Build succeeded for 2 out of 2 (2 easyconfigs in total)
b-cn1603.hpc2n.umu.se - Linux Ubuntu 22.04, x86_64, AMD EPYC 7313 16-Core Processor, 1 x NVIDIA NVIDIA A100 80GB PCIe, 525.125.06, Python 3.10.12
See https://gist.github.com/akesandgren/ed61204fc3b0a0fa2e52245f610c16e9 for a full test report.

Copy link
Contributor

@akesandgren akesandgren left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@akesandgren
Copy link
Contributor

Going in, thanks @lcniel!

@akesandgren akesandgren merged commit 9a45ceb into easybuilders:develop Sep 28, 2023
5 checks passed
@lcniel
Copy link
Contributor Author

lcniel commented Sep 28, 2023

Test report by @lcniel
SUCCESS
Build succeeded for 2 out of 2 (2 easyconfigs in total)
vera-c1 - Linux Rocky Linux 8.7, x86_64, Intel Xeon Processor (Skylake), Python 3.6.8
See https://gist.github.com/lcniel/ab83ee52999ba757ca03ef543bbe7034 for a full test report.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants