使用 CentOS 在 AWS GPU 实例上运行 OpenGL

Posted

技术标签:

【中文标题】使用 CentOS 在 AWS GPU 实例上运行 OpenGL【英文标题】:Run OpenGL on AWS GPU instances with CentOS 【发布时间】:2013-11-20 07:03:07 【问题描述】:

我需要在带有 CentOS 的 AWS EC2 GPU 实例上执行一些离屏渲染程序。然而,虽然我发现 Ubuntu 很容易设置,但我不能让 CentOS 正常工作。

目标是在 EC2 GPU 实例(无屏幕或 X 客户端)上运行一些基本实用程序/测试工具。在接下来的文章中,我将描述如何设置 Ubuntu 以及 CentOS/Amazon Linux AMI 如何失败。

Ubuntu

在 ubuntu 12.04 上,一切都很顺利。我使用的EC2环境是:

实例类型:CG1 和 G2 都经过测试并且工作正常。 AMI 映像:适用于 HVM 实例的 Ubuntu Server 12.04.3 LTS(美国东部的 ami-b93264d0) 大多数其他设置都是默认设置。

实例启动后,执行如下命令:

# 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 版本。但是,我不能让它们中的任何一个工作。

几天前,AWS announced their new G2 instance type。在本文中,建议在 Linux 平台上使用Amazon Linux AMI with NVIDIA Drivers。在这个 AMI 中,Nvidia 驱动程序、X 窗口和 OpenGL 库都已安装。但是,在尝试执行 OpenGL 程序时,我只会收到 GLX 错误消息。

使用以下设置启动 EC2 实例:

AMI 映像:带有 NVIDIA GRID GPU 驱动程序的 Amazon Linux AMI(美国东部的 ami-637c220a) 实例类型: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)

我已经用谷歌搜索并尝试了很多可能的解决方案,例如:

使用干净的 CentOS HVM AMI 并手动安装 Nvidia 驱动程序 尝试了两种 CG1/G2 实例类型 使用 nvidia-xconfig 重新生成 X 窗口配置 使用 Xvfb 代替 X 窗口 安装 mesa 库后重新安装 Nvidia 驱动

...但它们都不起作用。

有人对此问题有具体的解决方案吗?我提到的一切都应该是可重现的(我尝试了很多次)。如果您能提供可重现的指令以使 OpenGL (GLX) 在具有 CentOS/Amazon Linux AMI 的 EC2 GPU 实例上工作,我将不胜感激。

【问题讨论】:

您可能会发现这很有用:github.com/rncry/gpu-desktop 【参考方案1】:

lspci | grep VGA

您应该看到busID0:3:0

使用 sudo,将其添加到您的 xorg.conf 中,如下所示:

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

这应该可以修复 GLX 故障。

【讨论】:

它就像一个魅力。 AmazonLinuxAMI 和 CentOS 需要明确指定 BusID,但 Ubuntu 不需要。不确定它的根本原因。 难以置信。在内核为 3.5.0-45-generic 的 Ubuntu 12.04 LTS 上运行良好,该内核在 amazon ec2 g2.2xlarge gpu 实例上运行。 配置 xorg - 使用这个cyberciti.biz/faq/… 如果我想在 p2.xlarge 服务器上执行此操作,我需要更改多少? 这也适用于带有 g3.4xl 实例的 Ubuntu 16.04。【参考方案2】:

只是一个额外的发现:

我这样做是为了让 X 服务器运行:

sudo /usr/bin/X :0 &

但是,我的 OpenGL 应用程序仍未使用 GPU 进行图像渲染,因此速度非常慢。

这救了我——将 DISPLAY 环境变量设置为 X 服务器正在使用的相同显示 (ID: 0):

export DISPLAY=:0.0

【讨论】:

以上是关于使用 CentOS 在 AWS GPU 实例上运行 OpenGL的主要内容,如果未能解决你的问题,请参考以下文章

NVidia 驱动程序停止在带有 Ubuntu 16.04 和 Tesla K80 GPU 的 AWS EC2 实例上工作

如何选择/配置 AWS GPU 实例以加速 TensorFlow.keras?

AWS EC2 实例在重启后失去 GPU 支持

即使使用 AWS P8 实例,Yolov5 模型训练也因 CUDA 内存不足而失败

基于AWS使用深度学习的10个Linux命令

使用 GPU 在 EC2 实例上训练 Keras 模型很慢