Как запустить moderngl в Colab? - PullRequest
2 голосов
/ 28 марта 2020

Я пытаюсь запустить moderngl в Colab. Я установил его и запустил виртуальный дисплей:

!sudo apt-get update --fix-missing && apt-get -qqq install x11-utils > /dev/null
!sudo apt-get update --fix-missing && apt-get -qqq install xvfb > /dev/null
!python3 -m pip install -U -qqq moderngl
!python3 -m pip install -U -qqq moderngl-window
!python3 -m pip install -U -qqq pyvirtualdisplay

from pyvirtualdisplay import Display
display = Display(visible=0, size=(960, 540)).start()

import moderngl
ctx = moderngl.create_standalone_context()
buf = ctx.buffer(b'Hello World!')  # allocated on the GPU
buf.read()

b'Hello World!'

Он распечатался, как и ожидалось, но когда я запускаю пример, я вижу ошибку:

!python3 /content/moderngl/examples/basic_alpha_blending.py --window pyglet

2020-03-28 10:25:48,312 - moderngl_window - INFO - Attempting to load window class: moderngl_window.context.pyglet.Window
Traceback (most recent call last):
  File "/content/moderngl/examples/basic_alpha_blending.py", line 74, in <module>
    AlphaBlending.run()
  File "/content/moderngl/examples/ported/_example.py", line 21, in run
    mglw.run_window_config(cls)
  File "/usr/local/lib/python3.6/dist-packages/moderngl_window/__init__.py", line 185, in run_window_config
    cursor=show_cursor if show_cursor is not None else True,
  File "/usr/local/lib/python3.6/dist-packages/moderngl_window/context/pyglet/window.py", line 54, in __init__
    config=config,
  File "/usr/local/lib/python3.6/dist-packages/pyglet/window/xlib/__init__.py", line 165, in __init__
    super(XlibWindow, self).__init__(*args, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/pyglet/window/__init__.py", line 588, in __init__
    config = screen.get_best_config(config)
  File "/usr/local/lib/python3.6/dist-packages/pyglet/canvas/base.py", line 194, in get_best_config
    raise window.NoSuchConfigException()
pyglet.window.NoSuchConfigException

Я также попытался с другим виртуальным дисплеем , но результат тот же:

!python3 -m pip install -U -qqq  xvfbwrapper
from xvfbwrapper import Xvfb
display = Xvfb(width=960, height=540).start()

pyglet.window.NoSuchConfigException

1 Ответ

2 голосов
/ 30 марта 2020

В Google Colab вы можете использовать бэкэнд EGL с moderngl 5.6.

ctx = moderngl.create_context(standalone=True, backend='egl')
print(ctx.info)

Вывод (частичный):

{
    'GL_VENDOR': 'NVIDIA Corporation',
    'GL_RENDERER': 'Tesla P100-PCIE-16GB/PCIe/SSE2',
    'GL_VERSION': '3.3.0 NVIDIA 418.67',
    ....
}

moderngl по умолчанию создает базовый контекст OpenGL 3.3. Если вам нужна версия с более высоким контекстом, вы можете передать, например, require=430 для OpenGL 4.3. Я не знаю, что поддерживают эти карты Тесла.

Для этого есть стандартный пример в moderngl. Можно было бы создать стандартный треугольник RGB: https://github.com/moderngl/moderngl/blob/master/examples/headless_egl.py

Основной библиотекой, создающей контексты, является glcontext (https://github.com/moderngl/glcontext).

если вы используете пакет moderngl-window, вы должны использовать headless.Window, потому что pyglet в настоящее время не может работать в режиме без головы (возможно, в будущем: https://github.com/pyglet/pyglet/issues/51)

Если вы столкнулись с проблемой, создайте проблему в проекте moderngl: https://github.com/moderngl/moderngl или вторгайтесь на их дискорд сервер.

...