我使用 GPU ( g4dn.xlarge ) 启动了一个 AWS 实例。我按照本文安装了 NVIDIA 驱动程序 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-nvidia-driver.html 。
nvidia-smi
命令输出:https://i.sstatic.net/uVWBy.jpg
现在,我正在尝试启动使用 Nvidia GPU 的 Xvfb。
Xvfb :0 -screen 0 1024x768x24 +extension GLX +render -noreset
通过这个命令再次检查一下
DISPLAY=:0 glxinfo | head -n 50
name of display: :0
display: :0 screen: 0
direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.4
server glx extensions:
GLX_ARB_context_flush_control, GLX_ARB_create_context,
GLX_ARB_create_context_no_error, GLX_ARB_create_context_profile,
GLX_ARB_fbconfig_float, GLX_ARB_framebuffer_sRGB, GLX_ARB_multisample,
GLX_EXT_create_context_es2_profile, GLX_EXT_create_context_es_profile,
GLX_EXT_fbconfig_packed_float, GLX_EXT_framebuffer_sRGB,
GLX_EXT_import_context, GLX_EXT_libglvnd, GLX_EXT_no_config_context,
GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, GLX_EXT_visual_rating,
GLX_MESA_copy_sub_buffer, GLX_OML_swap_method, GLX_SGIS_multisample,
GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group,
GLX_SGI_make_current_read
client glx vendor string: Mesa Project and SGI
client glx version string: 1.4
client glx extensions:
GLX_ARB_context_flush_control, GLX_ARB_create_context,
GLX_ARB_create_context_profile, GLX_ARB_create_context_robustness,
GLX_ARB_fbconfig_float, GLX_ARB_framebuffer_sRGB,
GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_buffer_age,
GLX_EXT_create_context_es2_profile, GLX_EXT_create_context_es_profile,
GLX_EXT_fbconfig_packed_float, GLX_EXT_framebuffer_sRGB,
GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info,
GLX_EXT_visual_rating, GLX_INTEL_swap_event, GLX_MESA_copy_sub_buffer,
GLX_MESA_multithread_makecurrent, GLX_MESA_query_renderer,
GLX_MESA_swap_control, GLX_OML_swap_method, GLX_OML_sync_control,
GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer,
GLX_SGIX_visual_select_group, GLX_SGI_make_current_read,
GLX_SGI_swap_control, GLX_SGI_video_sync
GLX version: 1.4
GLX extensions:
GLX_ARB_context_flush_control, GLX_ARB_create_context,
GLX_ARB_create_context_profile, GLX_ARB_fbconfig_float,
GLX_ARB_framebuffer_sRGB, GLX_ARB_get_proc_address, GLX_ARB_multisample,
GLX_EXT_create_context_es2_profile, GLX_EXT_create_context_es_profile,
GLX_EXT_fbconfig_packed_float, GLX_EXT_framebuffer_sRGB,
GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info,
GLX_EXT_visual_rating, GLX_MESA_copy_sub_buffer, GLX_MESA_query_renderer,
GLX_OML_swap_method, GLX_SGIS_multisample, GLX_SGIX_fbconfig,
GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group, GLX_SGI_make_current_read
Extended renderer info (GLX_MESA_query_renderer):
Vendor: VMware, Inc. (0xffffffff)
Device: llvmpipe (LLVM 7.0, 256 bits) (0xffffffff)
Version: 18.3.4
Accelerated: no
Video memory: 15749MB
Unified memory: no
显示GPU是LLVM。而且它仍然使用CPU,而不是GPU。
nvidia-smi
仍然显示没有进程正在使用 GPU。
我该如何解决这个问题?
提前致谢。
显示GPU是LLVM
如果您需要硬件加速,这个问题的答案就是正确的方法 - 即使用VirtualGL。
安装后(
apt
和yum
软件包可用),您可以通过vglrun
运行您的进程以强制硬件加速。例如在我的机器上:-
$ Xvfb :1 -screen 0 1440x900x24 &
[1] 141478 #pid
$ DISPLAY=:1 glxinfo -B|grep 'OpenGL renderer string'
OpenGL renderer string: llvmpipe (LLVM 15.0.6, 256 bits) # software acceleration
DISPLAY=:1 vglrun glxinfo -B|grep 'OpenGL renderer string'
OpenGL renderer string: Mesa Intel(R) HD Graphics 6000 (BDW GT3) # vglrun uses h/w driver
如您所见,Xvfb 使用
llvmpipe
(软件加速)。通过 vglrun
运行相同的进程会强制硬件加速 - 当然假设您安装了正确的驱动程序。在我的例子中,使用了适用于我的 Intel GPU 的 Mesa 驱动程序。