可以使用没有显示输出的Tesla卡(例如K40c)。在这种情况下,它假定您拥有另一张显示卡进行初始远程工作站设置步骤。此其他显示卡可以是任何卡,并且在设置后可以将机器转换为“无头”使用。如果您正在使用其他显示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
关机并安装你想用于CUDA和/或OpenGL加速的特斯拉或其他CUDA GPU。重新启动机器,希望在步骤3中使用的Linux显示屏仍然会出现。如果你使用的是特斯拉(即非显示)卡,则不应该有任何问题,但如果你使用其他CUDA显示能力GPU(GeForce / Quadro),此时可能会移动X显示到刚刚安装的GPU上。
安装CUDA 7。我使用runfile安装程序方法,并对所有问题都选择了“是”(包括安装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
我认为这些版本并没有什么特别之处,但如果您使用不同的版本,结果可能会有所不同。
在终端会话中以root用户身份运行nvidia-xconfig
命令,以建立初始的/etc/X11/xorg.conf
文件,然后修改"Device"部分以添加类似于以下内容的行:
BusID "PCI:1:0:0"
请确认 PCI 地址与您的 GPU 匹配(使用 lspci
或 nvidia-smi -a
命令进行确认)。对于无头操作,您可能想要在 "Screen" 部分添加如下行,但我认为这并非必需(即使是对于无头操作):
Option "UseDisplayDevice" "none"
本答案末尾提供了完整的xorg.conf
示例。
在~/.vnc/xstartup.turbovnc
文件中,以myuser
身份,在该行之后:
unset SESSION_MANAGER
添加以下行:
unset DBUS_SESSION_BUS_ADDRESS
以myuser
的身份,使用GNOME桌面工具(System...Preferences...Startup Applications),添加启动应用程序,如下所示:
/opt/TurboVNC/bin/vncserver :5 -depth 24
这里的:5
有点随意,你可以使用其他数字,比如:2
,但不要使用:0
。余下的内容假设您选择了:5
。您还需要在终端会话中(再次作为myuser
)运行此行,以设置/配置vncserver以供使用。第一次运行它时,可能会提示您输入密码。请记住这个密码 - 您以后需要用到它进行客户端访问。
对于无头/无人值守使用,有两种可能的选项。
我知道有些人可能认为自动登录存在安全风险。如果是这种情况,你应该使用下面的备选方法:
- 停止X服务器
- 以root身份运行
vglserver_config
- 选择选项1
- 对于3个问题都回答
n
(这样可以工作,但是也存在安全问题。你可能希望查阅文档,并探索管理必要用户组和尝试除了n
之外的其他选择。) - 选择X退出
- 重新启动X服务器
没有自动登录,你需要一种启动vncserver进行远程访问的方法,因为我们在第9步添加的启动应用程序将不会生效。一个方法是在启动后通过SSH连接到机器并作为myuser
启动vncserver:
/opt/TurboVNC/bin/vncserver :5 -display 24
您可以探索各种自动运行应用程序的方法。这里有许多可能的方法,最好只需针对您的操作系统进行谷歌搜索。
如果您尚未这样做,您可能需要构建CUDA示例。该方法在上面步骤5链接的入门指南文档中有详细介绍。对于一些CUDA图形示例(如simpleGL
),您可能需要确保安装了合适的glut提供程序,例如freeglut。
在关闭电源之前,您可能还想修改远程工作站防火墙。为了我的目的,我只是禁用了它(System...Administration...Firewall...Disable)。TurboVNC使用的特定端口默认情况下将被防火墙阻止。如果您希望使用防火墙但打开这些端口,则可能是可能的,但超出了此说明书的范围。
现在已配置完成您的远程工作站。如果您执行了以上所有更改,则可以切换到“无头”操作,并且如果添加了xorg无显示选项,则实际上可以在下次重启时切换到“无头”模式。在重新启动之前,您可能需要记下远程工作站的IP地址。如果您正在进行“无头”操作,则配置静态IP可能很方便。假设您观察到远程工作站的IP地址为192.168.1.104。那么现在是重新启动远程工作站的时候了。
在客户机上,您应该安装适合您操作系统的TurboVNC客户端。运行TurboVNC客户端“Viewer”应用程序,并提供附加有:5的IP地址作为要连接的机器:
192.168.1.104:5
连接成功后,系统将提示您输入第9步中提供的密码。此时,与myuser
相关联的图形桌面应该会在客户端机器上打开。然而,这个图形桌面目前还没有完全支持3D图形加速。为了使用GPU进行OpenGL(以及CUDA / OpenGL交互)操作,需要在应用程序前面加上vglrun
来运行。
vglrun -d :0 glxgears
您在此处指定:0
,因为它是与GPU图形加速相关联的实际X显示器(对于已登录的myuser
)。 如果您构建了CUDA示例,则可以尝试CUDA / OpenGL互操作应用程序:
vglrun -d :0 /usr/local/cuda/samples/bin/x86_64/linux/release/simpleGL
在上述两个示例中,如果您已经在第10步中使用vglserver_config配置了vglserver,则应该能够从vglrun命令中省略-d :0
开关:
vglrun glxgears
仅供参考(只能用作参考 - 您很可能不能直接使用此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
故障排除:
我不打算回答详细的故障排除问题,因为我无法测试每个配置。 但是,如果您的客户端完全无法连接到远程工作站,则很可能是vncserver未正确启动,或者防火墙正在阻止一些东西。 对于其他类型的故障排除,/ var / log / Xorg.0.log
可能会提供一些线索。 使用nvidia-smi
来确认您的CUDA驱动程序已正确安装。 总的来说,无头操作很难进行故障排除,因此,如果您可以安排一个具有显示功能的CUDA GPU进行初始设置和测试,可能会更容易。 您可以稍后切换到非显示GPU。
注意:
*K20m和K20Xm需要使用nvidia-smi
实用程序正确设置图形操作模式。 K20c不能用于此目的,它仅限于计算。 据我所知,大多数其他NVIDIA CUDA可用的GPU都应该可用于此目的。 cc2.0之前具有计算能力的GPU不能与本文中描述的CUDA 7驱动程序一起使用。
另外,这个NVIDIA白皮书也会很有用。