Подтвердить что ты не робот

Запуск OpenGL на экземплярах GPU AWS с CentOS

Мне нужно выполнить некоторую программу внеэкранного рендеринга на экземпляре GPU AWS EC2 с CentOS. Однако, хотя я обнаружил, что Ubuntu очень прост в настройке, я не могу позволить CentOS работать должным образом.

Цель состоит в том, чтобы запустить некоторый важный инструмент утилиты/теста на экземпляре EC2 GPU (без экрана или X-клиента). В следующей статье я опишу, как Ubuntu может быть настроен и как CentOS/Amazon Linux AMI не работает.

Ubuntu

На ubuntu 12.04 все работает очень гладко. Я использовал среду EC2:

  • Тип экземпляра: оба CG1 и G2 были протестированы и работали правильно.
  • Изображение AMI: сервер Ubuntu 12.04.3 LTS для экземпляров HVM (ami-b93264d0 в US-East)
  • Большинство других настроек по умолчанию.

После запуска экземпляра выполняются следующие команды:

# Install the Nvidia driver
sudo apt-add-repository ppa:ubuntu-x-swat/x-updates
sudo apt-get update
sudo apt-get install nvidia-current
# Driver installation needs reboot
sudo reboot now

# Install and configure X window with virtual screen
sudo apt-get install xserver-xorg libglu1-mesa-dev freeglut3-dev mesa-common-dev libxmu-dev libxi-dev
sudo nvidia-xconfig -a --use-display-device=None --virtual=1280x1024
sudo /usr/bin/X :0 &

# OpenGL programs are now workable. Ex. glxinfo, glxgears
DISPLAY=:0 glxinfo

glxgears также может работать в фоновом режиме без физического экрана или X-клиента:

$ DISPLAY=:0 glxgears
95297 frames in 5.0 seconds = 19059.236 FPS
95559 frames in 5.0 seconds = 19111.727 FPS
94173 frames in 5.0 seconds = 18834.510 FPS

CentOS или Amazon Linux AMI

Оба "CentOS" и "Amazon Linux AMI" взяты из Red Hat Enterprise edition. Однако я не могу заставить их работать.

Несколько дней назад AWS объявил о своем новом экземпляре экземпляра G2. В этой статье рекомендуется использовать Amazon Linux AMI с драйверами NVIDIA для платформы Linux. В этом AMI установлены драйвер Nvidia, окна X и библиотеки OpenGL. Тем не менее, я просто получаю сообщения об ошибках GLX при попытке выполнить программы OpenGL.

Экземпляр EC2 запускается со следующей настройкой:

  • Изображение AMI: Amazon Linux AMI с драйвером NVIDIA GRID GPU (ami-637c220a на US-East)
  • Тип экземпляра: G2
  • Большинство других настроек по умолчанию

После загрузки шаги для воспроизведения этой проблемы очень просты:

sudo X :0 & # Start the X window
glxinfo
glxgears

Вывод:

$ glxinfo
name of display: :0
Xlib:  extension "GLX" missing on display ":0".
Xlib:  extension "GLX" missing on display ":0".
Xlib:  extension "GLX" missing on display ":0".
Xlib:  extension "GLX" missing on display ":0".
Xlib:  extension "GLX" missing on display ":0".
Error: couldn't find RGB GLX visual or fbconfig

Xlib:  extension "GLX" missing on display ":0".
Xlib:  extension "GLX" missing on display ":0".
Xlib:  extension "GLX" missing on display ":0".
Xlib:  extension "GLX" missing on display ":0".
Xlib:  extension "GLX" missing on display ":0".

$ glxgears
Xlib:  extension "GLX" missing on display ":0".
Error: couldn't get an RGB, Double-buffered visual

В /var/log/Xorg.0.log найдена следующая ошибка:

[139017.484] (EE) Failed to initialize GLX extension (Compatible NVIDIA X driver not found)

У меня есть googled и пробовал много возможного решения, например:

  • Использовать чистый CentOS HVM AMI и вручную установить драйвер Nvidia.
  • Пробовал типы экземпляров CG1/G2
  • Восстановить конфигурацию окна X с помощью nvidia-xconfig
  • Используйте Xvfb вместо окна X
  • Переустановите драйвер Nvidia после установки библиотек mesa.

... но никто из них не работает.

Есть ли у кого-нибудь конкретное решение этой проблемы? Все, что я упоминал, должно быть воспроизводимым (я много раз пробовал). Я буду признателен, если вы сможете предоставить воспроизводимые инструкции, чтобы OpenGL (GLX) работал над экземплярами EC2 GPU с CentOS/Amazon Linux AMI.

4b9b3361

Ответ 1

lspci | grep VGA

Вы должны увидеть busID is 0:3:0.

Используя sudo, добавьте это в свой xorg.conf так:

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GRID K520"
    BusID           "0:3:0"
EndSection

Это должно исправить ошибки GLX.

Ответ 2

Еще одна находка:

Я сделал это, чтобы запустить X Server:

sudo /usr/bin/X :0 &

Однако мое приложение OpenGL по-прежнему не использовало графический процессор для рендеринга изображений и поэтому ДЕЙСТВИТЕЛЬНО медленно.

Это то, что меня спасло - настройка переменной среды DISPLAY на один и тот же дисплей (ID: 0), который использует сервер X:

export DISPLAY=:0.0