POV-Ray on Biowulf
POV-Ray (Persistence of Vision RAYtracer) is a high-quality tool for creating three-dimensional graphics. Raytraced images are publication-quality and 'photo-realistic', but are computationally expensive so that large images can take many hours to create. POV-Ray images can also require more memory than many desktop machines can handle. To address these concerns, a parallelized version of POV-Ray has been installed on the Biowulf system.
There are two versions of POV-Ray available on the Biowulf cluster:
Version 3.1 is available as both a stand-alone executable (povray-3.1), and as an MPI-parallelized executable (MPI-Povray). However, many other applications which generate POV-Ray input do not support version 3.1.
Version 3.6 (the most recent version) is available as a stand-alone executable (povray). There is no MPI-parallelized executable, but there is a wrapper script povray_swarm which allows an image render to be distributed onto the Biowulf cluster using swarm.
POV-Ray output is limited to only .png, .tga, or .ppm image formats. There are number of programs which can convert images from one format to another available on Helix Systems (e.g., convert, gimp, imagemagick, xnview).
POV-Ray options and parameters are available by typing 'povray' at the Biowulf prompt..
Sample POV-Ray v3.6 input: 1ASY.pov (1.4 MB)
Sample POV-Ray v3.6 input: 1AG9.pov (8.6 MB)
Put your POV-Ray input file (plot.pov) and any other required files (e.g. the pov-ribbons-camera.inc file from Ribbons) into /data/username/, and type povray_swarm along with any desired POV-Ray options (this can include any .ini files as well):[user@biowulf ~]$ povray_swarm +H2170 +W1826 -I1ASY.pov -O1ASY.pov.tga +P +A \ +FT --ncpus=16 Distributing render (1826X2170) into 16 tiles (4X4) each of size (457X543) /usr/local/etc/swarmbb --file 1ASY_9633.swarm --ncpus 16 --balance --topdir 9633 --nameNames -S /bin/sh [main] promoting to dual core nodes 138722.biobos swarm1n9637 138723.biobos swarm2n9637 138724.biobos swarm3n9637 138725.biobos swarm4n9637 combining swarm output swarm done POV-Anywhere Tile 0.3 alpha Copyright 2004-2005 by Christoph Hormann <firstname.lastname@example.org> Combining 16 tiles into one image... 99 percent Finished! pamtotga: computing colormap... pamtotga: Too many colors for colormapped TGA. Doing RGB. Total Machine Time: 223 seconds Total Elapsed Time: 100 seconds [user&biowulf ~]$
The image was split into 16 tiles, each tile was rendered independently, and the tiles were stitched together using POV-Anywhere into a final image. Then the image was then converted to .tga format.
The POV-Ray options +P and -D are forcibly added by the povray_swarm script to allow for distributed rendering without complications.
All swarm .out and .err files are concatenated into single files at the end of the run.
Hitting Ctrl-C will trigger swarmdel to delete the swarm run before terminating the script. If povray_swarm in run in background, or to manually stop the script, type 'swarmdel <jobid>' to kill all the individual swarm jobs.
Put your POV-Ray input file and any other required files (e.g. the pov-ribbons-camera.inc file from Ribbons) into /data/username/
Type 'pov' at the Biowulf prompt, and follow instructions.
Sample session, user input in bold:[user@biowulf ~]$ pov PovRay: High-Quality Ray-Traced Images Enter the name of Povray input file: /data/user/povray/purple_helix.pov Checking /data/user/povray/purple_helix.pov for included files ... include file pov-ribbons-camera.inc **ERROR**: Included file pov-ribbons-camera.inc is not in /usr/local/pov/include or /home/user or /home/user Enter directory for pov-ribbons-camera.inc :/data/user/povray/ Enter filename for output: /data/user/test.out Enter desired width of image (pixels) : 1200 Enter desired height of image (pixels) : 800 Output image format - TGA (default), PNG, PPM : Optional: Enter filename of a Povray initialization file : http://biowulf.nih.gov/povray.html has a full list of available parameters. Any additional Povray parameters (e.g. +A0.0 ): Creating job file /data/user/povray.7493 Submitting to 16 nodes. Job number is 536827.biobos Monitor your job at http://biowulf.nih.gov/cgi-bin/queuemon?536827.biobos [user@biowulf]$
Hint: use the 'convert' program on Helix to convert targa files to any other format. The /data/ directories are mounted on helix as well, so you can cd to your /data directory, then type convert test.tga test.jpg on Helix.
Running MPI-Povray on Biowulf -- the details
Create a script file containing the following (or copy runpovray from /usr/local/pov/demo):-----------------------script file runpovray----------------------- #!/bin/tcsh # #PBS -N PovRay #PBS -m be #PBS -k oe date setenv PATH /usr/local/mpich/bin:$PATH mpirun -machinefile $PBS_NODEFILE -np $np /usr/local/bin/mpi-\ x-povray /data/username/POV.INI -i/data/username/input.pov +L/data/username/\ +O/data/username/output.file +w100 +h100 -gw --------------------------------------------------------------------------
/data/username/POV.INI is the Povray parameter file (see below)
/data/username/input.pov is the Povray input file
+L/data/username is the library path. If you have your own include files, such as pov-ribbons-camera.inc, you should point this to the directory where they reside.
/data/username/output.file is the output filename
+w100 describes the width of the output image in pixels (100)
+h100 describes the height of the output image in pixels (100)
-gw is the flag for 'don't print warnings'. It may be useful to see the warnings, so don't use this unless necessary. Some Povray input files produce thousands of warnings and create huge log files, in which case the -gw flag is very useful.
The POV.INI file is not required, but is very useful to keep Povray input parameters reproducible. An example POV.INI file is:---------------------------file POV.INI----------------------------- ; povray .INI file to remember all the flags +J0.5 +A0.1 +MB5 +FT +Q9 +AM2 +V +R3 ; -------------------------------------------------------------------
Submit the Povray job to the batch queue by typing: (you can also put this in a script)biowulf% qsub -v np=# -l nodes=# runpovray
where # are the number of nodes and processors required. For an 8-processor job using 2 processors on each node, you would typebiowulf% qsub -v np=8 -l nodes=4 runpovray
The batch system will send you mail when the job starts and finishes.
Displaying the image as it's built
It is possible to watch your image 'growing', as in the demo above. If you connect to Biowulf using ssh from a Unix workstation, your display variable will automatically be set to something like biowulf.nih.gov:18.0, and the X-windows graphics will be appropriately tunnelled through biowulf to your desktop machine. This is crucial, as the nodes can 'talk' only to biowulf, the login node.
In your script, add the flag -display $DISPLAY. See /usr/local/pov/demo/povfast for an example. When you submit the job, typeqsub -v np=#,DISPLAY=$DISPLAY -l nodes=# /home/username/runpovray
(see /usr/local/pov/demo/fast for a sample script that does this)
Your job will then pop up a window on your desktop machine in which the image will appear as it is calculated by the nodes. You MUST close the window after the image has been generated. As long as the image window is open, your job still has the nodes allocated and they are unavailable to other users. So please use this feature only if you plan to be around until the end of the job.
If POV-Ray doesn't find an include file that it needs, it may not exit cleanly. This means that the job will continue to spin and the nodes will still be allocated. If the povray output file is not growing in size, chances are the job is spinning uselessly. You need to kill the job (with 'qdel xxxx.biowulf'), fix the problem, and restart.
If you won't be around to watch the file growing, you can also use the '-l walltime=1:00:00' argument to qsub, which limits the job to a walltime of one hour (use whatever limit you think is appropriate).
MPI-Povray demo for Unix workstations connecting via ssh
From your desktop Unix workstation, use ssh to connect to biowulf. Your display variable should automatically be set to something like biowulf.nih.gov:17.0. (This is crucial for the demo to work!) The demo will create two output files totalling 240 Kb, so run it from a directory (/home/username or /data/username) that has this space available. Typebiowulf% /usr/local/pov/demo/showme
This will start up two runs of Povray, one on a single node using two processors, and one on 8 nodes using 16 processors. It will pop up two windows on your screen, one from each run, and you will be able to see how parallelization dramatically reduces the time taken for Povray image calculation. The image produced is a space-filling model of the pseudomonas exotoxin, as on the right here.
Some POV-Ray jobs may require large amounts of memory, so the nodes and processors should be chosen carefully. See the hardware section of the Biowulf user guide for the current memory configuration of the nodes. Choose the proper nodes by using the appropriate switch on the qsub command, e.g.qsub -v np=8 -l nodes=2:o2600 runpovray
will use 8 processors on 2 dual-core 2.6GHz 4MB nodes, orpovray_swarm +H2170 +W1826 -I1ASY.pov -O1ASY.pov.tga +P +A +FT --ncpus=16 \ --props=nodes=1:p2800:m4096
will use 16 processors on 8 older (but much more available!) Xeon 2.8GHz 4GB nodes.
Many programs can produce POV-Ray input files of molecular structures; here are some examples:
Use RasMol to display your molecule, then export a Povray file.
VMD can display molecules and export Povray input files.
Swiss-PDBViewer can produce Povray input files.