w0r*_*t3r 3 x11 ubuntu cuda freeglut nsight
我试图从主机ubuntu机器上运行远程Ubuntu机器上的CUDA粒子样本.我遵循了这个教程:http: //devblogs.nvidia.com/parallelforall/remote-application-development-nvidia-nsight-eclipse-edition/它在我的主机上运行,但不在我的远程机器上运行.
我在Nsight中得到以下输出:
CUDA Particles Simulation Starting...
grid: 64 x 64 x 64 = 262144 cells
particles: 16384
No protocol specified
freeglut (/users/path/particles/Debug/particles): failed to open display ':0'
logout
Run Code Online (Sandbox Code Playgroud)
如果我从终端运行程序,我得到:
CUDA Particles Simulation Starting...
grid: 64 x 64 x 64 = 262144 cells
particles: 16384
CUDA error at ../src/particleSystem_cuda.cu:85 code=79(cudaErrorInvalidGraphicsContext) "cudaGraphicsGLRegisterBuffer(cuda_vbo_resource, vbo, cudaGraphicsMapFlagsNone)"
Run Code Online (Sandbox Code Playgroud)
是否可以在我的主机上显示粒子模拟,而计算是在远程系统上进行的?
它是通过X11Forwarding实现的,还是完全不同的错误?
Rob*_*lla 13
我将提供一个冗长的答案,因为我刚刚完成了这个.但是,在继续这条道路之前,我建议您尝试像NoMachine NX这样的解决方案,它应该已经内置了一些此功能.它可能满足您的需求.
您可以访问远程工作站,甚至是无头工作站,进行图形桌面访问,还可以使用VirtualGL和TurboVNC的组合访问CUDA和OpenGL加速.以下说明对于特定的机器配置(例如Linux操作系统等)非常具体,因此如果您进行更改,它们可能会中断,您将不得不弄清楚有什么不同.对于CentOS 6.x,这应该是一个非常好的配方,对于其他方法,它只是一个指南.这个配方主要假设只添加了一个Tesla/CUDA GPU.如果您要配置多个GPU,则应该可以,但只有一个用于OpenGL加速 - 只需要配置一个xorg.conf
.
这种设置可以使用没有显示输出的Tesla卡完成(例如K40c.但K20型号是特殊情况,但请参阅下面的注释*).在这种情况下,它假定您有另一个显示卡用于初始远程工作站设置步骤.这个其他显示卡可以是任何卡,并且设置后可以将机器转换为"无头"使用.如果您使用不同的显示GPU进行设置,您最初可以将Tesla或CUDA GPU从系统中取出.
安装Linux操作系统.我使用CentOS 6.2进行此测试.如果您使用的是CentOS/RHEL 6.x操作系统,那么事情应该对您有用,就像这里描述的那样.如果您使用其他操作系统,则任何内容都可能不同.如果是这样,这些说明只是一个指南,而不是食谱.在安装CentOS 6.2期间,选择"软件开发工作站"选项,以获得我们需要的大部分图形和开发位.在安装过程中,系统会提示您创建普通用户名(除了root用户).我们称之为myuser
.
禁用Nouveau.在CentOS 6.x上,这些步骤将以root身份执行:
echo -e "blacklist nouveau\noptions nouveau modeset=0" > /etc/modprobe.d/disable-nouveau.conf
dracut --force
Run Code Online (Sandbox Code Playgroud)关闭电源并安装要用于CUDA和/或OpenGL加速的Tesla或其他CUDA GPU.再次打开机器电源.希望linux显示器仍然出现在您在步骤3中使用的同一显示器上.如果您使用特斯拉(即非显示器)卡,但如果您正在使用其他CUDA显示器,则应该没有任何问题有能力的GPU(GeForce/Quadro),X显示器可能会在此时移动到您刚安装的GPU.
安装CUDA 7.我使用了runfile安装程序方法,并为所有问题选择了yes (包括安装OpenGL库)并接受所有默认路径.如果您使用其他一些CUDA版本或其他一些安装方法,您的结果可能会有所不同.
安装VirtualGL和TurboVNC:
wget http://sourceforge.net/projects/virtualgl/files/2.3.3/VirtualGL-2.3.3.x86_64.rpm/download
sudo rpm -i VirtualGL-2.3.3.x86_64.rpm
wget http://sourceforge.net/projects/turbovnc/files/1.2.1/turbovnc-1.2.1.x86_64.rpm/download
sudo rpm -i turbovnc-1.2.1.x86_64.rpm
Run Code Online (Sandbox Code Playgroud)
我不认为这些版本有什么特别之处,但如果你使用不同的版本,你的结果可能会有所不同.
以root身份运行nvidia-xconfig
(从终端会话)建立初始文件,然后修改"设备"部分以添加如下所示的行:/etc/X11/xorg.conf
BusID "PCI:1:0:0"
Run Code Online (Sandbox Code Playgroud)
PCI地址与您的GPU匹配(用lspci
或确认nvidia-smi -a
)对于无头操作,您可以选择在"屏幕"部分添加这样的行,但我认为没有必要(即使是无头操作):
Option "UseDisplayDevice" "none"
Run Code Online (Sandbox Code Playgroud)
xorg.conf
这个答案的最后会出现一个完整的样本.
as myuser
,in ~/.vnc/xstartup.turbovnc
,this line:
unset SESSION_MANAGER
Run Code Online (Sandbox Code Playgroud)
添加以下行:
unset DBUS_SESSION_BUS_ADDRESS
Run Code Online (Sandbox Code Playgroud)as myuser
,使用gnome桌面实用程序(System ... Preferences ... Startup Applications)添加如下的启动应用程序
/opt/TurboVNC/bin/vncserver :5 -depth 24
Run Code Online (Sandbox Code Playgroud)
在:5
这里是有点武断,你可以使用其他数字一样:2
,如果你愿意的话,但不要使用:0
.其余部分假定您已:5
在此处选择.您还希望myuser
从终端会话中运行此行(仅一次,再次作为),以便设置/配置vncserver以供使用.第一次运行它时,它可能会提示您输入密码.记住这个密码 - 您将需要它以便以后访问客户端.
对于无头/无人值守使用,有两种可能的选择.
你可以创建一个自动登录myuser
.以root/etc/gdm/custom.conf
身份编辑以创建/添加:
[daemon]
AutomaticLoginEnable=true
AutomaticLogin=myuser
Run Code Online (Sandbox Code Playgroud)我承认有些人可能会将自动登录视为安全风险.如果是这种情况,您应该使用下面的备用("首选")方法:
vglserver_config
n
所有3个问题(这将有效,但是这里也存在安全问题.您可能希望查阅文档,并展示管理必要的用户组并尝试除了n
所有3个问题之外的其他选择.)如果没有自动登录,您将需要一种方法来启动vncserver以进行远程访问,因为我们在步骤9中添加的启动应用程序将不会生效.一种方法是在启动后通过SSH连接登录到机器,并myuser
启动vncserver:
/opt/TurboVNC/bin/vncserver :5 -display 24
Run Code Online (Sandbox Code Playgroud)
或者,您可以探索在机器启动时自动运行应用程序的各种方法.这里有很多可能的方法,如果你只是做一个与你的操作系统相关的谷歌搜索,那就最好了.
如果您尚未这样做,则可能需要构建CUDA示例.该方法在上面步骤5中链接的入门指南文档中有所介绍.对于某些CUDA图形样本,您可能需要确保安装了合适的过剩提供程序,例如freeglut,例如simpleGL
.
在关闭电源之前,您可能还需要修改远程工作站防火墙.为了我的目的,我只是禁用它(系统...管理......防火墙......禁用).TurboVNC使用默认情况下将被防火墙阻止的特定端口.如果您希望使用防火墙但打开这些端口,它应该是可能的,但不在本配方的范围内.
您的远程工作站现已配置.如果您进行了上述所有更改,则可以切换到"无头"操作,如果添加了xorg no display选项,则实际上可能会在下次重新启动时切换到"无头".在重新启动之前,您可能需要记下远程工作站的IP地址.如果你"无头",用静态IP配置它可能很方便.假设您发现远程工作站的IP地址是192.168.1.104.所以现在是重启远程工作站的时候了.
在客户端计算机上,您应该安装适合您的操作系统的TurboVNC客户端.运行TurboVNC客户端"查看器"应用程序,并提供附加的IP:5作为要连接的机器:
192.168.1.104:5
Run Code Online (Sandbox Code Playgroud)
连接后,系统将提示您输入上面步骤9中提供的密码.此时,与myuser
您关联的图形桌面应在您的客户端计算机上打开.此图形桌面尚未具有与之关联的完整3D图形加速.为了使用GPU进行OpenGL(和CUDA/OpenGL互操作),有必要运行这样的应用程序vglrun
,如下所示:
vglrun -d :0 glxgears
Run Code Online (Sandbox Code Playgroud)
您在:0
此处指定,因为这是与GPU图形加速相关联的实际X显示(对于已登录myuser
).如果您构建了CUDA示例,则可以尝试使用CUDA/OpenGL互操作应用程序:
vglrun -d :0 /usr/local/cuda/samples/bin/x86_64/linux/release/simpleGL
Run Code Online (Sandbox Code Playgroud)
在上面的两个示例中,如果您在步骤10中使用vglserver_config配置了vglserver,那么您应该可以省略-d :0
vglrun命令中的切换:
vglrun glxgears
Run Code Online (Sandbox Code Playgroud)
出于参考目的(仅 - 您很可能不能逐字使用此xorg文件),这里是完整的xorg.conf
(没有任何修改vglserver_config
):
# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig: version 346.46 (buildmeister@swio-display-x86-rhel47-06) Tue Feb 17 19:10:20 PST 2015
Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0"
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
EndSection
Section "Files"
FontPath "/usr/share/fonts/default/Type1"
EndSection
Section "InputDevice"
# generated from default
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/input/mice"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection
Section "InputDevice"
# generated from data in "/etc/sysconfig/keyboard"
Identifier "Keyboard0"
Driver "kbd"
Option "XkbLayout" "us"
Option "XkbModel" "pc105"
EndSection
Section "Monitor"
Identifier "Monitor0"
VendorName "Unknown"
ModelName "Unknown"
HorizSync 28.0 - 52.0
VertRefresh 43.0 - 72.0
Option "DPMS"
EndSection
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BusID "PCI:1:0:0"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
Option "UseDisplayDevice" "none"
SubSection "Display"
Depth 24
Modes "1024x768"
EndSubSection
EndSection
Run Code Online (Sandbox Code Playgroud)
故障排除:
我不打算回答详细的故障排除问题,因为我无法测试每个配置.但是,如果您的客户端根本无法连接到远程工作站,则可能意味着vncserver未正确启动,或者防火墙阻塞了某些内容.对于其他类型的故障排除,/var/log/Xorg.0.log
可能会提供一些线索.使用nvidia-smi
以建立您的CUDA驱动是否安装正确.通常,无头操作很难排除故障,因此如果您可以安排具有显示功能的CUDA GPU进行初始设置和测试,则可能更容易.您可以稍后切换到非显示GPU.
注意:*K20m和K20Xm需要使用该nvidia-smi
实用程序正确设置图形操作模式.K20c 不能用于此目的,它仅限计算.AFAIK,大多数其他支持NVIDIA CUDA的GPU都可以用于此目的.但是,具有cc2.0之前的计算能力的GPU不能与本文中描述的CUDA 7驱动程序一起使用.
作为额外的参考,这个nvidia白皮书将是有用的.
归档时间: |
|
查看次数: |
3334 次 |
最近记录: |