Академический Документы
Профессиональный Документы
Культура Документы
Hewlett Packard
Table of Contents
1. Important Information ....................................................................................................................... 1 1.1. Intended Audience ................................................................................................................. 1 1.2. Copyright ............................................................................................................................... 1 1.3. Trademarks and Attributions ................................................................................................. 1 1.4. Feedback ................................................................................................................................ 1 2. Document History ............................................................................................................................. 2 2.1. Release 1.1-3 .......................................................................................................................... 2 2.2. Release 1.1-2 .......................................................................................................................... 2 2.3. Release 1.0-2 .......................................................................................................................... 3 2.4. Release 1.0-1 .......................................................................................................................... 4 3. Introduction ....................................................................................................................................... 5 3.1. Usage Scenarios ..................................................................................................................... 5 3.1.1. Remote Visualization "Farms" ................................................................................... 5 3.1.2. Parallel Rendering Applications ................................................................................. 6 3.1.3. Tiled Displays ............................................................................................................. 6 3.1.4. Mixed Usage Scenarios .............................................................................................. 6 3.2. Comparing VizStack to typical Visualization System Setups ............................................... 7 3.2.1. Single System ............................................................................................................. 7 3.2.2. Cluster of Nodes ......................................................................................................... 7 4. Installing VizStack ............................................................................................................................ 8 4.1. Supported Platforms .............................................................................................................. 8 4.2. Modes of Operation ............................................................................................................... 8 4.3. Installation Steps .................................................................................................................... 9 4.3.1. Kernel Setup on Each Node ..................................................................................... 10 4.3.2. Installing nVidia Graphics Drivers ........................................................................... 10 4.3.3. Installing VizStack and Software Dependencies ...................................................... 10 4.3.4. Installing Munge ....................................................................................................... 11 4.3.5. Installing SLURM ..................................................................................................... 12 4.4. Configuring Required Software ........................................................................................... 12 4.4.1. Network Time Protocol (NTP) ................................................................................. 12 4.4.2. Munge ....................................................................................................................... 12 4.4.3. SLURM ..................................................................................................................... 13 4.5. Installing/Configuring Other Software ................................................................................ 14 4.5.1. HP Remote Graphics Software ................................................................................. 14 4.5.2. TurboVNC/VirtualGL ............................................................................................... 15 4.5.3. VizStack Remote Access Tools ................................................................................ 15 4.5.4. Other Application Software ...................................................................................... 16 4.5.5. Configuring password-less SSH ............................................................................... 16 4.6. Configuring VizStack .......................................................................................................... 16 4.6.1. Standalone Configuration ......................................................................................... 16 4.6.2. Configuring on Multiple Nodes ................................................................................ 16 4.6.3. Configuring GPU sharing ......................................................................................... 17 4.6.4. Configuration Files ................................................................................................... 18 4.6.5. Configuring SLI and QuadroPlexes .......................................................................... 19 4.7. Configuring Batch Schedulers for VizStack ........................................................................ 20 4.7.1. Example Configuration of LSF ................................................................................ 20 5. VizStack Administration ................................................................................................................. 22
iii
VizStack Admin Guide 5.1. Managing the SSM .............................................................................................................. 5.2. Checking a VizStack System .............................................................................................. 5.3. Finding information ............................................................................................................. 5.4. Terminating VizStack Jobs .................................................................................................. 5.5. Creating and Deleting Tiled Displays ................................................................................. 5.6. Prioritizing Nodes ................................................................................................................ 5.7. How VizStack Allocates GPUs ........................................................................................... 6. VizStack Numbering Conventions ................................................................................................. 6.1. VizStack GPU Numbering .................................................................................................. 6.2. GPU Display Output Numbering ........................................................................................ 7. Configuring Tiled Displays ............................................................................................................ 7.1. Creating Tiled Displays ....................................................................................................... 7.2. Tiled Display Examples ....................................................................................................... 7.3. Frame Lock Considerations ................................................................................................. 7.4. Tiled Displays with Input Devices ...................................................................................... 7.4.1. Configuring a Keyboard ........................................................................................... 7.4.2. Configuring a Mouse ................................................................................................ 8. Using Display Devices with VizStack ........................................................................................... 8.1. Configuring site-specific Display Devices .......................................................................... 8.1.1. Creating a Display Template Manually .................................................................... 9. VizStack Configuration Files ......................................................................................................... 9.1. Tiled Displays ...................................................................................................................... 9.2. Tiled Display Parameters ..................................................................................................... 9.2.1. block_type ................................................................................................................. 9.2.2. num_blocks ............................................................................................................... 9.2.3. block_display_layout ................................................................................................ 9.2.4. display_device ........................................................................................................... 9.2.5. display_mode ............................................................................................................ 9.2.6. stereo_mode .............................................................................................................. 9.2.7. combine_displays ...................................................................................................... 9.2.8. group_blocks ............................................................................................................. 9.2.9. remap_display_outputs .............................................................................................. 9.2.10. rotate ........................................................................................................................ 9.2.11. bezels ....................................................................................................................... 9.2.12. framelock ................................................................................................................. 9.2.13. A Single Tile .......................................................................................................... 9.2.14. 2x1 Display Layout from one GPU ........................................................................ 9.2.15. 2x2 Layout from two GPUs on one node ............................................................... 9.2.16. 2x2 Layout from two GPUs from two nodes ......................................................... 9.2.17. 2x1 layout from two GPUs on two nodes .............................................................. 9.2.18. Altering the order in which VizStack drives displays ............................................ 10. Troubleshooting ............................................................................................................................ 10.1. SLURM related errors ....................................................................................................... 10.1.1. "unspecified" error while running user scripts ....................................................... 10.1.2. sinfo shows a node marked as "down" ................................................................... 22 22 22 23 23 23 24 25 25 26 28 30 30 32 32 32 33 35 35 36 40 40 40 40 40 40 40 41 41 41 41 41 41 41 42 42 43 44 45 46 47 52 52 52 52
iv
List of Figures
6.1. 7.1. 7.2. 7.3. 7.4. Display Numbering on GPUs ...................................................................................................... Possible Display Layouts for a GPU block ................................................................................. Possible Display Layouts for a QuadroPlex block ...................................................................... Tiled displays using GPU blocks ................................................................................................ Tiled displays using QuadroPlex blocks ..................................................................................... 27 28 29 31 31
List of Tables
9.1. 20`80~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ....... 47
vi
1.2. Copyright
This document is (c) 2009-2010 Hewlett-Packard Development Company, L.P.
1.4. Feedback
If you have any comments about this document, please send email to vizstack-users AT lists.sourceforge.net.
Document History Added : A -x option to viz-tvnc and viz-vgl. This allows users to allocate exclusive GPUs. This would typically be used for applications that stress the GPU, or for benchmarking purposes. Added : A -N option to viz-tvnc and viz-vgl. This allows users to allocate whole nodes. This would typically be used for applications that stress the whole system(as opposed to a single GPU), or when users want to run applications which take up all the resources on a node. Modified : viz-tvnc and viz-vgl scripts allocate shared GPUs by default. If no shared GPUs are available, then they will fail, unless -x or -N are used. Added : The SSM uses Pythons logging package to log messages. The logs are captured in the file /var/log/vs-ssm.log. Logging can be configured by editing the file /etc/vizstack/ssmlogging.conf Added : It is possible to configure bezels on monitors. Some of the supplied display devices come with their bezels defined in the display template. Modified : The vs-manage-tiled-displays tool now lets you specify the display remapping for GPUs, as well as specify whether to enable framelock on the tiled display. Modified : The configure scripts in earlier versions used to bail out if unrecognized GPUs were in a system. Same for display devices. This release creates templates for unrecognized GPUs and display devices(provided they are detected). Documentation : Split the older manual into an administrator guide, and a user guide. The documentation covers more areas of VizStack with this release.
Document History
Chapter 3. Introduction
Most commodity servers and workstations shipping today are capable of hosting multiple Graphics Processing Units(GPUs). Such machines are typically clustered together. VizStack is a software stack that turns one or more machines(with GPUs installed in them) into a shared, multi-user visualization resource. VizStack provides utilities to allocate resources (GPUs), run applications on them, and free them when they are no longer needed. VizStack provides ways to configure and drive display devices, as well as higher level constructs like Tiled Displays. VizStack manages only the visualization resources (GPUs, X servers), and does not provide any utilities to do system management/setup on the nodes. VizStack can dynamically setup the visualization resources to meet any application requirement.
Introduction Note that these solutions are independent of each other, and you can use one or both of them at the same time.
Introduction Parallel rendering applications for one or more users Applications running on tiled displays or display walls for one or more users VizStack allocates GPUs flexibly as needed by applications. GPUs that are not being used to drive displays are assigned for remote visualization or parallel renderin uses if asked for.
VizStack does not work with non-nVidia graphics cards at this time
Installing VizStack nodes other than the master need to have at-least one GPU in them. This mode of operation is termed "sea of nodes". In the sea-of-nodes mode, you will need to configure an "application launcher". The application launcher will be used for operations like starting X servers and for running application components. You have a choice of using these application launchers: . SLURM, an open source resource manager . SSH, with nodes setup for password-less SSH. In the sea-of-nodes configuration, you will need to install & configure Munge on all the nodes. Munge is used for establishing a users identity across the nodes. You may also use VizStack on a single node, called "standalone" mode. In this case, VizStack manages the visualization resources on exactly one physcal node. The node will be the master, and must have atleast one GPU in it. Using this mode instantly converts a single node into a shareable visualization resource. You may also use the node to drive a large display wall or any other display system. This is the easiest way to try out VizStack. VizStack can also be used in another mode, called a "static" configuration. This mode allows one to setup a static configuration of X servers, GPUs, display devices. This mode will be described in later versions of this document.
Installing VizStack Note that VizStack does not provide for node management, golden imaging, installing Infiniband, configuring IP addresses, etc. VizStack can manage the visualization resources on one or more nodes. Before installing VizStack on a group of nodes, you need to ensure that Linux is installed and running on each and every node. If you are using golden imaging techniques to propagate linux to multiple nodes, then it makes sense to install and configure software all required software on one node, capture an image of that node, and propagate it to the rest of the nodes. You could do things this way, but remember to configure VizStack[Section 4.6, Configuring VizStack] after all the nodes have been imaged and booted.
You must stop all X servers before trying to install the driver. Switching to run-level 3 is recommended. If you want to run CUDA applications, then you need to have a way of creating the device files needed by the nvidia driver (/dev/nvidia*) on all the nodes. Steps to do this are documented in the following link on NVIDIA forums : http://forums.nvidia.com/ index.php?showtopic=52629 . Another link http://forums.nvidia.com/index.php? showtopic=49769&pid=272085&mode=threaded&show=0&st=0#entry272085 .
Installing VizStack VizStack depends on the python-xml package. This package is typically installed by default on most linux distributions. If you are running SuSE Enterprise Linux 10 SP2, then you may use the YaST2 tool to install this. If you have an earlier version of VizStack installed, then be sure to remove it from all the nodes using "rpm -e vizstack". At this time, you cannot use the upgrade option with the VizStack RPM. You will need to install the VizStack RPM, as well as all dependencies on all the nodes which you want to use with VizStack. Note that, if you want to use VizStack in a standalone configuration, then you only need to install the VizStack RPM (and its dependencies) on one node. The VizStack RPM includes files in /etc/profile.d . These files set up the environment for proper excecution of the administrative tools as well as the user scripts. After you install the VizStack RPM, you will need to logout and log back in again before you run any other commands. If you need to run VizStack on more than one node, then you will also need to install additional software . Munge (http://home.gna.org/munge/) for user authentication . Optional : SLURM (https:// computing.llnl.gov/linux/slurm/) for application launcher. You could use passwordless SSH for job launching as well. If you use SSH, then proper cleanup of jobs in a clustered environment is not guaranteed to happen, so we strongly recommend SLURM. Munge and SLURM will typically need to be compiled from source. python-xml is available on all linux distributions. VizStack also includes the Remote Access Tools. This is meant to be installed on end user desktop systems. Pre-compiled binaries are available for Windows and Linux. Please see [Section 4.5.3, VizStack Remote Access Tools] for more information on how to install these.
Use the version number corresponding to your download. Ubuntu/Debian have packages for Munge, and you may install munge using the standard methods on those distributions. On other distributions, you will need to compile Munge from source and install. To do this, download the source package (.tar.bz2) package, and then run the following commands
# tar xvjf munge-<version>.tar.bz2
11
Installing VizStack
# # # # cd munge-<version> ./configure --prefix=/usr make make install (run this as root)
Note that you need to install Munge on every node. If you are using an image propagation mechanism, then you could install Munge on the node from which the image is generated, capture the image and then propagate it to all the nodes.
Note that you need to install SLURM on every node. If you are using an image propagation mechanism, then you could install Munge and SLURM on the node from which the image is generated, capture the image and then propagate it to all the nodes.
4.4.2. Munge
Munge is used by VizStack to identify user processes. You need to install Munge if you plan to use VizStack across two or more nodes. Munge needs a secret key to work. To generate the key
# dd if=/dev/urandom bs=1 count=1024 > /etc/munge/munge.key
The above command finishes very quickly, but generates a pseudo-random key. If security is a concern, then consider using the below command line (Note: this will take a long time to finish!)
# dd if=/dev/random bs=1 count=1024 > /etc/munge/munge.key
12
Installing VizStack Next, you need to propagate this secret key to all the nodes of the cluster. You may use scp for this purpose, as in the example below. The example assumes a cluster with 5 nodes named as node1, node2,, node5.
# for node in node1 node2 node3 node4 node5; do scp /etc/munge/munge.key root@$node:/etc/munge; done;
Finally, test if munge is working on every node by running the following command on each node.
# munge -n | unmunge
This command will output the encrypted form of UID and GID credentials. Verify the munge communication accross the cluster by running the following command
# for node in node1 node2 node3 node4 node5; do munge -n | ssh $node unmunge done;
4.4.3. SLURM
If you want to use VizStack on two or more nodes, then you may choose to use the SLURM scheduler as an application launch mechanism. Alternatively, you may use password-less SSH too. If you prefer to use password-less SSH, then you can skip configuring SLURM. Using SLURM makes it easier to dynamically administer a few nodes of the system without affecting the users who may be using the remaining nodes. Also, SLURM configuration is done once and works for all users. If you prefer password-less SSH, then bear in mind that the password-less SSH setup may need to be done individually for each user. First, create a user (and group) named slurm on all the nodes, ensuring that this user has the same user-id and group-id on all nodes.
# for ((i = 1; i <= 5; i++)); do ssh root@node$i /usr/sbin/groupadd -g 666 slurm; ssh root@node$i /usr/sbin/useradd -g 666 -u 666 -M -s /sbin/nologin slurm; done
In this case, the user will have a uid and gid of 666. Next, create the JobCredentialPrivateKey file on the master node
# openssl genrsa -out /etc/slurm/slurm.key 1024
Make a copy of the slurm example file from /etc/slurm/slurm.conf.example (this will be in the etc directory of the SLURM source code if you installed SLURM from source) and edit it in your favorite editor. Assuming that your nodes are named node1, node2,,node5 and the node named node1 is the master/control/head node, your file needs to look like 13
Installing VizStack
ControlMachine=node1 ... SlurmUser=slurm ... JobCredentialPrivateKey=/etc/slurm/slurm.key JobCredentialPublicCertificate=/etc/slurm/slurm.cert ... NodeName=node[1-5] State=UNKNOWN PartitionName=viz Nodes=node[1-5] Default=YES RootOnly=NO Shared=FORCE MaxTime=INFINITE State=UP
After making these changes, copy the slurm.conf, slurm.key and slurm.cert files to all the nodes.
# for ((i = 2; i <= 5; i++)); do scp /etc/slurm/slurm.conf /etc/slurm/slurm.key /etc/slurm/slurm.cert root@node$i:/etc/slurm; done
If everything went well, you should see all the nodes show up as idle, when you type in sinfo:
# sinfo -h viz* up infinite 5 idle node[1-5]
After installing RGS, you will need to do a few manual configuration steps. You need to setup RGS licensing as desribed in the RGS documentation. Also, edit the file /etc/opt/hpremote/rgsender/ rgsenderconfig, and make the following changes
Rgsender.Network.IsListenOnAllInterfacesEnabled=1 Rgsender.IsIloRemoteConsoleEnabled=1 (if the node is a blade workstation) Rgsender.IsBlankScreenAndBlockInputEnabled=0
You also need to create a template /etc/vizstack/templates/gdm.conf file needed for RGS. Instructions for creating this file are in /etc/vizstack/templates/gdm.conf.template. 14
Installing VizStack Note that all these changes are neeeded on every node. We recommend that you make the change once and propagating the changes via tools like scp OR pdcp. The RGS sender (component that remotes the desktop) servers connections on TCP port number 42966. You need to ensure that you configure your network stack to allow incoming connections on this port. This step is crucial. If you miss this, then you will be able to start remote desktop sessions, but users will not be able to connect to them.
4.5.2. TurboVNC/VirtualGL
You will need to install VirtualGL and TurboVNC on all the nodes. The following packages were tested with VizStack 1. turbovnc-0.5.1.i386.rpm 2. turbojpeg-1.11.x86_64.rpm 3. virtualGL-2.1.2.x86_64.rpm The TurboVNC server listens to connections on TCP port 5901, 5902, etc. Ensure that your network stack allows incoming connections to these ports. VizStack, by default configures each node to allow atleast as many TurboVNC sessions as there are GPUs on the system. By default, VizStack configures each GPU to be shared by two users. The administrator can configure each GPU to be shared by upto 8 users. Each such user can use a TurboVNC server to get remote access to the system. If you have two GPUs on the system, then you need to open atleast TCP ports 5901 to 5904, if GPU sharing is enabled. These ports correspond to TurboVNC servers :1 to :4. If you have more GPUs, or if you choose to share GPUs among more users, then you need to open more ports. Note that VizStack configures X servers for each potential user. On a multi-GPU system with GPU sharing, VizStack may need more than 10 X servers. If you allow X11 forwarding over SSH, then you may need to adjust the offset of the X servers used by SSH. This may be done by adjusting the X11DisplayOffset value in /etc/ssh/sshd_config. The configuration commands print out messages when you need to do this. If you do not adjust the X11DisplayOffset value, then you may find that user jobs fail to start, due to inability to use the X server ports. TurboVNC needs another big setup step as well. On every node, for every user that intends to use TurboVNC, you need to ensure that a password file is setup. NFS shared home directories may help reduce setup effort here. If a user runs the TurboVNC script without running the vncpasswd command, then they will be prompted to enter a password. The password will only apply to the node where the session is running at, unless you have a shared home directory set up. Note that this scenario typically occurs in a demo kind of environment rather that in a production environment where you will already have a shared file-system in place.
Installing VizStack For Windows end-users, please download and install VizStackRemoteAccessSetup-v1.0.exe. This is a standard windows installer. For Linux end-users, please download and install vizrt-1.0-noarch.rpm. This RPM has a few dependencies : . The Paramiko library for SSH (http://www.lang.net/paramiko). Prebuilt packages are available for Red Hat and Fedora, as well as for Ubuntu/Debian. . wxPython 2.8 and above. Prebuilt packages for Red Hat/CentOS are available from RPMforge(http://rpmrepo.org/RPMforge)
This command will detect the number and type of GPUs on this node, and configure VizStack. It also sets up VizStack configuration needed for TurboVNC and RGS, irrespective of whether these are installed on the nodes.
Installing VizStack
# /opt/vizstack/sbin/vs-configure-system -s ssh <list of nodes>
Note that <list_of_nodes> may be specified in the SLURM notation, or as multiple names on the command line. If you have GPUs on the machine where youre running this command from, then you need to include the hostname of this node as well. If your nodes are not in the default partition, then you may use the -p command line option and specify the partition name. You may want to create a setup where the nodes communicate over a network, while a separate network carries the traffic for the remote visualization sessions (RGS/TurboVNC). An example : your visualization nodes may be behind a firewall. You may not want to route the network traffic for the remote sessions through the firewall for performance reasons. To carry this traffic, you would need to configure another interface in all the nodes. To configure VizStack to use this alternate network, you may use the following command:
# /opt/vizstack/sbin/vs-configure-system -r <network> -s slurm <list of nodes>
Here, <network> is the TCPv4 network (dotted a.b.c.d) of the alternate network interfaces (i.e. the ones want to use for remote access). vs-configure-system will detect the number and type of GPUs on all the listed nodes, and configure VizStack to use them. It will also set up VizStack configuration needed for TurboVNC and RGS, irrespective of whether these are installed on the nodes. The node from where this command is executed is configured to be the master node. Youll need to run the VizStack System State Manager (SSM) on this node. You need to ensure that the hostnames names of the nodes are resolvable on all the nodes where you intend to use VizStack. This can be achieved in many ways: keeping /etc/hosts in sync, setting up NIS name resolution. Most cluster management utilities automatically do this for you. The SSM, by default, services requests on TCP port number 50000. The other visualization nodes managed by VizStack need to be able to connect to the SSM, i.e. to this port on the master host. If your nodes are in an internal network without restrictions in terms of internal connections, then this is not a concern. Otherwise, you may need to configure your firewall to achieve this.
-i, --ignore-display-device : Tells the configure scripts to ignore a matching display device. This can be used in a scenario where there is a KVM connected to some GPUs in the system. You may use this option multiple times. To ignore a connected HP KVM dongle, use
# /opt/vizstack/sbin/vs-configure-standalone -i "AVO Smart Cable"
Ignoring the dongle will enable sharing on the GPU to which the dongle is connected, if no other display devices are connected to the GPU. -x, --exclude-sharing : Disables GPU sharing on a specific node. Use this option multiple times to disable sharing on multiple nodes. You would use this option if you have displays connected to GPUs on a node, but the configuration script is unable to detect them. The configuration script will fail to detect a display device if the nvidia driver fails to detect it. The nvidia driver could fail to detect a display device if it is unable to get an EDID for the display device. Certain versions of nvidia drivers may have a bug which prevents it from reading the EDID. Also, if you use KVM extenders which dont support DDC, then the nvidia driver will not be able to detect the connected display device.
18
Installing VizStack Many times, these generated templates would be good enough to make your system with VizStack. If you find that the generated templates do not accuratelye reflect the device capabilities, then please modify them. Predefined VizStack files are present in the directory /opt/vizstack/share/templates. Templates present in the /etc/vizstack directory overrride the templates in the /opt/vizstack/share/templates directory.
If you have a server with two graphics cards connected to an SLI connector, then the type of the SLI connector needs to be set to discrete, as follows
... <node> <name>node2</name> ... <gpu> <index>0</index> ... </gpu> <gpu> <index>1</index> ... </gpu> <!-- Configure the SLI connector . Adds an sli resource --> <sli> <index>0</index>
19
Installing VizStack
<type>discrete</type> <gpu0>0</gpu0> <!-- Index of first GPU connected to the SLI --> <gpu1>1</gpu1> <!-- Index of second GPU connected to the SLI --> </sli> </node> ...
This line tells LSF that "gpu" is a resource of type "Numeric" that is "increasing" and "consumable". If you want to use HP RGS, then you may also add another line
rgs Numeric () Y Y (Single usage of RGS)
After this, you need to tell LSF which nodes have how many GPUs. You need to edit your cluster definition file (lsf.cluster.<name>) for this. In the "resources" column for each hostname, add the number of GPUs which are present in the particular host. e.g., the lines in your installation could look like
alpha13 ! ! 1 3.5 () () (gpu=2,rgs=1) alpha14 ! ! 1 3.5 () () (gpu=1,rgs=1) alpha15 ! ! 1 3.5 () () (gpu=4,rgs=1)
Here, alpha13, alpha14 and alpha15 have 2, 1 and 4 GPUs, respectively. Note that this does not differentiate between the kind of GPUs. For now, it is recommended that you have the same kind of GPUs in your system. Also, note that all nodes define "rgs=1". This means that one or zero instances of RGS may be active on the node. This configuration is necessary since only one instance of RGS may be active on a node at a time. 20
Installing VizStack Next, ensure that LSF picks up the changes in your configuration file. Also define any queues for user access, etc. Configure VizStack using the below command. Note that you will need to have password-less SSH setup for root to do this.
# /opt/vizstack/sbin/vs-configure-system -s local -c ssh <list of nodes>
21
For debugging purposes, it is also possile to run the SSM in the foreground
# /opt/vizstack/sbin/vs-ssm nodaemon
Typically, you would want to setup an init script to handle starting and stopping the SSM.
VizStack Administration
$ vs-info -a
When invoked without options, the command prints out a list of running jobs, with their ids.
If you have only one special node which you want to be picked up last, then you may set the weight to 1 to ensure this is picked up last. If you have multiple nodes, and want to prioritize among them, then you need to setup a value for each separately. For the weight to take effect, you need to restart the SSM after saving the file. 23
VizStack Administration
24
VizStack Numbering Conventions 1. Find all the GPUs on the system 2. Order the GPUs by their PCI id. 3. The index of a GPU is its position in the sorted list. While this is fine from a system point of you, you would want to associate the GPU index with a physical GPU. Determining the physical position of a GPU by index is not difficult. First, we will consider the case where you have only Quadro FX GPUs installed on the machine. With the machine in the rack mounted configuration, just count the GPUs from left to right. GPU index 0 is the leftmost GPU, GPU index 1 is the next GPU to its right, GPU index 2 is the next GPU, and so on. Next, consider the case of QuadroPlex D series external graphics boxes. These connect to the machine via a HIC (Host Interface Card) that is plugged into a PCI express slot. For performance reasons, we recommended that you use a PCIe 16x slot where possible. A single machine may have one or more QuadroPlexes connected to it, subject to slot limitations. First locate the HIC corresponding to the QuadroPlex on the system. Next count from left to right again. The index of a GPU is the number of GPUs preceeding it when counting from the left. A HIC is counted equal to the number of GPUs inside the QuadroPlex connected to it. Inside a QuadroPlex, the GPUs are again counted from left to right (when looking from the rear)
26
Figure 6.1, Display Numbering on GPUs shows how VizStack numbers the port numbers on a variety of GPUs. Note that the convention varies across the generation of GPUs. The convention used for the QuadroFX 5600 applies to the GPUs inside the QuadroPlex 2100 D2 as well. Note that the picture shows the GPUs as you would see them from the back of a server/workstation.
27
QuadroPlex blocks can drive two to four displays in the following possible layouts 1. Two displays arranged horizontally (2x1) or vertically (1x2) 2. Four displays in a square configuration (2x2) 3. Three displays arranged horizontally (3x1) or vertically (1x3) 4. Four displays arranged horizontally (4x1) or vertically (1x4)
28
Tiled Displays restrict usage of a single type of display device. It is assumed that the same type of display device is connected to all GPUs. Further, all display devices are setup with the same display mode. VizStack comes defined with a few display devices. Each display device defines a set of modes that are compatible with it. All display may also be physically rotated, in one of the following ways: 1. Portrait (90 degrees to the left) 2. Inverted Portrait (90 degrees to the right) 3. Inverted Landscape (180 degrees) Note that the same rotation setting applies to all the displays. All displays may also be configured for one of the following stereo modes: 1. Active stereo, using Shutter glasses 2. Passive stereo. This mode is compatible only with GPU blocks, and is not available for use with QuadroPlex blocks. 3. Auto-stereoscopic SeeReal DFP, suitable for use with Tridelity SV Displays. 4. Auto-stereoscopic Sharp3D DFP Tiled displays are made by replicating blocks in a rectangular matrix. In general, a tiled display may consist of n\*m blocks, where n is the number of columns, and m is the number of rows. A tiled display thus uses n\*m blocks. Typically, VizStack configures one X server per block. However, with GPU blocks, it is possible to use two or more GPU blocks per X server. X servers can be configured with GPUs in a rectangular 29
Configuring Tiled Displays layout. The number of GPUs per X server is the same across all X servers. The X server can be setup with Xinerama enabled, thus exposing only one X screen covering all GPUs. This is useful in at-least the following two scenarios: 1. Some applications may not be able to use more than one GPU per node (or more specifically, an X screen) . This limitation can partly be overcome by using QuadroPlex blocks, thus enabling the application to run on two GPUs. However, this is not a solution if you need to run your application over more than two GPUs. Also, you may not have a QuadroPlex. One way to get around these limitations is to enable Xinerama on the X server, thus enabling the application to run on all the GPUs. However, this does have drawback : performance with Xinerama degrades as the number of GPUs increases. 2. You may want to configure the X server with input devices, and physically control all the GPUs configured for the X server.
30
31
Configuring Tiled Displays SSH into the node, and look in the file /proc/bus/input/devices. You must see lines like the following corresponding to your connected keyboard
I: N: P: S: H: B: B: B: Bus=0003 Vendor=03f0 Product=0024 Version=0300 Name="CHICONY HP Basic USB Keyboard" Phys=usb-0000:00:07.1-1.4.1/input0 Sysfs=/class/input/input2 Handlers=kbd event2 EV=120003 KEY=1000000000007 ff87207ac14057ff febeffdfffefffff fffffffffffffffe LED=7
Make a note of the "Phys" value. You may now define this keyboard in /etc/vizstack/node_config.xml as follows:
... <node> <name>node1</name> ... <gpu> .... </gpu> <!-- Existing System Keyboard. --> <keyboard> <index>0</index> <type>SystemKeyboard</type> </keyboard> <!-- New keyboard being defined by us --> <keyboard> <index>1</index> <type>USBKeyboard</type> <phys_addr>usb-0000:00:07.1-1.4.1/input0</phys_addr> </keyboard> ... </node> ...
Make a note of the "Phys" value. You may now define this mouse in /etc/vizstack/node_config.xml as follows: 33
34
Using Display Devices with VizStack To use the displays which did not get detected, you have two options Create a template manually. This provides maximum flexibility, but also needs the maximum amount of work. VizStack has a generic template for DFP and CRT monitors. These are identified by the names Generic DFP Monitor and Generic CRT Monitor. You could try to use these; they may work for the resolution and refresh rate you need. Note that these definitions do not provide information about the dimensions of the display device, or information about bezels, since they are not tied to a specific device.
36
2. Select the display device that you connected on the drop down list 3. Select File | Save As and save the file at a convenient location 4. Copy the file over to the master visualization node. If you use FTP, then ensure that you copy the file as a binary file. You can also get the EDID using other methods using a desktop or a laptop with Linux installed on it. Connect the display device to this system. If you have nVidia graphics on this, then you may run the "nvidia-settings" command, and get the EDID file from the GUI. After you have the EDID file, you need to create an XML file that gives VizStack the settings to use for this display device. You could use the file for the HP LP3065 monitor as a base. Create a copy of the file HP-LP3065.xml in the directory /opt/vizstack/share/templates/displays in /etc/vizstack/ templates/displays. The template for the LP3065 looks like
<?xml version="1.0" ?> <display xmlns="http://www.hp.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.hp.com /opt/vizstack/share/schema/displayconfig.xsd" > <model>HP LP3065</model> <!-- Name you want to use --> <input>digital</input> <edid>/opt/vizstack/share/templates/displays/edids/HP-LP3065.bin</edid> <edid_name>HP LP3065</edid_name> <!-- Name as given in the EDID --> <dimensions> <width>640</width> <!-- width in mm of the display area --> <height>400</height> <!-- height of the display area --> <bezel> <left>26</left> <!-- left bezel in mm -->
37
Fill the name of your display device in the model node. You will see this name when you create tiled displays using vs-manage-tiled-displays. Fill the edid node with the path to the EDID binary file. We recommend you keep the EDID file in the directory /etc/vizstack/templates/displays/edids. The dimensions node contains information about the physical dimensions of the device. If your device is a projector, then it makes sense to omit this node. You could measure the width and height of the display area of your monitor and fill them in. In the example, the LP3065 is a 30" monitor, and its display area measures 64 cm by 40 cm. You may configure VizStack to skip pixels over the bezels of your monitor. Define a left, right, bottom and top bezel; each of these values needs to be entered in millimeters. You could physically measure this, or lookup the specs of the monitor. Typically, the left and the right bezels are equal, and so are the top and the bottom bezels. You need to add a mode node for every mode you want to use. You can have one or more alias nodes. The content of each alias node is a generic text string which identifies the display mode. It does not need to be describe the resolution, but doing so will help your users. It is typical to include the refresh rate after the underscore. The width, height and refresh nodes of each mode node need to be the actual values for the mode you want to use. Finally, you need to chose one mode to be a default, and fill one of its aliases in the 'default_mode node. Typically, this will be the best resolution supported by the device, but it could be anything else also. Typically, active stereo modes are not listed in the EDID; if you need to use such modes with your display device, then you need to define a modeline for each such additional mode. 38
39
9.2.1. block_type
The block_type parameter represents the type of block that is used to build the tiled display. Two values are currently recognized, "gpu" and "quadroplex".
9.2.2. num_blocks
num_blocks is a two element list [n,m], where n is the number of columns, and m is the number of rows.
9.2.3. block_display_layout
This parameter defines how each block drives displays. gpu blocks can drive one or two displays with the following possible layout values 1. [1,1] : Single display 2. [2,1] or [1,2] : Two displays arranged horizontally or vertically quadroplex blocks can drive two to four displays with the following possible layout values 1. [2,1] or [1,2] : Two display arranged horizontally or vertically 2. [2,2] : Four displays in a square configuration 3. [3,1] or [1,3] : Three displays arranged horizontally or vertically 4. [4,1] or [1,4] : Four displays arranged horizontally or vertically
9.2.4. display_device
This parameter defines the type of display device connected to each tile. Note that the same type of display device is assumed to be connected to all tiles. 40
9.2.5. display_mode
The display mode to be used on the display device. If this is not specified, then the default display mode for the device is used.
9.2.6. stereo_mode
This parameter defines what stereo mode is used on the tiles. The possible values are 1. active : Active stereo, with stereo glasses 2. passive : Passive stereo. This mode cannot be enabled with a quadroplex block 3. SeeReal_Stereo_DFP : For use with autostereoscopic DFPs. 4. Sharp3D_Stereo_DFP : For use with autostereoscopic DFPs.
9.2.7. combine_displays
This boolean value enables/disables usage of Xinerama on the X servers.
9.2.8. group_blocks
This parameter specifies the arrangement of the GPUs inside the individual X servers : number of columns by number of rows. Use this parameter to group GPUs together, and specify their layout inside an X server.
9.2.9. remap_display_outputs
Causes VizStack to change the order in which it drives the display output ports.
9.2.10. rotate
Use this parameter to define the physical orientation of the display devices. Possible values are 1. none 2. portrait 3. inverted_portrait 4. inverted_landscape
9.2.11. bezels
Use this parameter to specify the default setup of bezels on the tiled display. Note that this option has no effect if your are using a projector. 41
VizStack Configuration Files 1. None or all : Configure bezels on each edge of each display device. This is also the default value. 2. disable : Do not configure bezels on the display devices. 3. desktop : Configure desktop style bezels - i.e. the displays on the top row will not have the top bezel configured, the displays on the bottom row will not have the bottom bezel configured, the displays on the leftmost column will not have the left bezel configured and the displays on the rightmost column will not have the right bezel configured. This ensures a natural interaction with the tiled display and ensures that the user can see the edges of the display which may have important user interface elements.
9.2.12. framelock
This parameter specifies if frameloock can be enabled on this tiled display. The allowed values are 1. False : The default. Framelock is not enabled on the tiled display 2. True : Enable framelock on the tiled display.
42
This XML defines a tiled display called "simple" that drives a single LP3065 monitor using GPU-0 installed on the node named node1. Note that no specific mode is specified for the display device, so it will run at its default resolution and refresh rate i.e. 2560x1600@60 [mailto:2560x1600@60] Hz. Also, note the display is connected to Port 0 of the GPU (see picture). The tiled display is called "simple", you would use it with Avizo by using the command line
# viz_avizovr -t simple
The XML for this resource group defines the handler as tiled_display. Currently this is the only supported value. This means that the current resource group defines a handler of type "tiled display". The string inside handler_params defines the arguments for the tiled display. You have a choice of specifying one/more parameters here. The string is processed as a python code fragment, so you may specify various kinds of values (strings, lists, etc) inside the string. For reasons of security, function calls are not allowed inside the handler parameters. You may specify other parameters for the tiled display as python variables inside handler_params.
43
Note that the only change from the previous example is that block_display_layout is changed to [2,1]. VizStack configures the two display outputs from the GPU to drive a single large framebuffer. This is implemented by configuring the X server is to drive a single "X screen" with the effective resolution of the two displays. Note that changing "block_display_layout" from [2,1] to [1,2] would result in the displays being setup one below the other.
Note that num_blocks gets a new value equal to [1,2]. Note that we also ask for an extra GPU, GPU #1 on "node1".
In this configuration, two nodes node1 and node2 are driving the 4 displays, two each from one GPU on each node. Note that the GPUs on the nodes are not at the same location: GPU0 comes from node1 and GPU1 comes from node2. The XML needed for this would be
<resourceGroup> <name>simple<name>
45
<handler>tiled_display</handler> <handler_params> block_type="gpu"; num_blocks=[1,2]; # We use 1*2 = 2 GPUs block_display_layout=[2,1]; # Each GPU drives two displays side by side display_device="LP3065"; # Each display connected to an LP3065 monitor </handler_params> <resources> <reslist> <res><server><hostname>node1</hostname><server></res> <res><gpu><hostname>node1</hostname><index>0</index></gpu></res> </reslist> <reslist> <res><server><hostname>node2</hostname><server></res> <res><gpu><hostname>node2</hostname><index>1</index></gpu></res> # Note: we'r </reslist> </resources> </resourceGroup>
You may also drive two display devices from two nodes, in a side by side layout. The XML needed is shown below.
<resourceGroup> <name>simple<name> <handler>tiled_display</handler> <handler_params> block_type="gpu"; num_blocks=[2,1]; # We use 2*1 = 2 GPUs block_display_layout=[1,1]; # Each GPU drives one displays
46
Note that block_display_layout is now set to [1,1] to indicate that 1 display will be driven by each GPU. num_blocks is changed to [2,1] to indicate the horizontal layout. Changing num_blocks to [1,2] would convert this into a 1x2 vertical layout.
[1,2]
VizStack Configuration Files a single FX 5800, while still leaving the console free to be used otherwise.Note that port #2 is only available on the FX 5800, 4800, 3800 and 1800 Note that remap_display_outputs can only have as elements as needed for the specified block_display_layout. Alternatively, remap_port_index must have exactly block_display_layout[0]*block_display_layout[1] elements. So, if you have display_block_layout=[2,1], youll need to have exactly two elements in remap_port_index.
Consider a case where you have two systems, each with 1 GPU (more is possible too). You want to use display output port 0 of each of them as a system console. This case could happen on a workstation. Display Port 0 is typically used by the BIOS for output. When the kernel comes up, it also tends to use the same. You would have connected the console output to some low-end device, e.g. a KVM dongle. Naturally you want to avoid using it as a display output. Youd use the parameter "remap_display_outputs" to get around this problem, as shown in the XML below.
<resourceGroup> <name>simple<name> <handler>tiled_display</handler> <handler_params> block_type="gpu"; num_blocks=[2,1]; # block_display_layout=[1,1]; # display_device="LP3065"; # remap_display_outputs=[1]; #
We use 2*1 = 2 GPUs Each GPU drives one displays Each display connected to an LP3065 monitor Map display output 0 to 1
48
49
We have two nodes, each with two GPUs. They are connected to a 4x2 tiled display, consisting of 8 HP LP3065 monitors. The user wants to use the displays in 3 different ways (more are possible, but these 4 are enough to demonstrate the principles). 50
VizStack Configuration Files 1. left-2x2 : Left half using all GPUs on node1 2. right-2x2 : Right half using all GPUs on node2 3. center-2x2: 2x2 tiles in the center, but using all GPUs. Note that the four displays on the right are wired in a slightly different way : output port 0 is connected to the monitor on the right, and ouput port 1 is connected to the monitor on the left. Figure 14 shows the XML & the parameters needed to achieve each different scenario as well. With this arrangement, the whole 4x2 (called "full-4x2") display cannot be addressed together as a large display. Using such layouts is not recommended. However, the whole 4x2 can be used if the user is willing to modify application scripts to address this specific scenario.
51
VizStack expects that all users have the same uid and gid across all nodes in the VizStack system. This error is seen when the user running a job does not exist on all the nodes, or there is a mismatch in a users uid/gid between nodes. To check this on all nodes, run the id command on all of them as follows
# for node in node1 node2 node3; do ssh $node id <username>; done
The UID and GID of the user should be same on all the nodes.
Note that this will yield the right result only if passwordless SSH is setup to the nodes.
52