Una vez obtenida una cuenta de usuario (aquellos usuarios que ya tienen una cuenta activa en los servidores Superdome y HPC320 poseen la misma cuenta en este sistema), con los datos de login y password, se podrá conectar al sistema SVG. El nombre del servidor es svgd.cesga.es y el modo de conexión es mediante un cliente ssh. Un cliente para Windows (Putty) puede encontrarse en este enlace, en caso de utilizar Linux dispone del comando ssh. Se pueden transferir archivos hacia y desde el SVG utilizando un cliente Windows como WinSCP o el comando scp de Linux. Debe tenerse presente que el SVG cuenta con un firewall que restringe las conexiones desde y hacia servidores externos.
Para visualizar a salida gráfica de programas que dispongan de esta posibilidad consulte la sección de FAQ.
El sistema operativo del SVG es Linux (basado en Red Hat Enterprise 4.0). Una vez dentro del sistema, se abrirá una sesión interactiva a través de un shell que por defecto será bash. Este shell tiene impuestos unos límites de tiempo de CPU, memoria y disco que se pueden consultar mediante el comando ulimit -a (actualmente 0,5 horas de cpu y 512MB de memoria). Se recomienda el uso del sistema de colas para la ejecución de trabajos así como el uso de los entornos de compilación para compilar aplicaciones o para ejecutar trabajos interactivos.
SISTEMA DE COLAS
Para trabajos que requieran más recursos (tiempo de cálculo, memoria o espacio en disco) que los limitados por el shell interactivo, se deberá utilizar el sistema de colas o los a href="http://www.cesga.es/content/view/496/42/#Entornos">entornos de compilación. Este sistema es el Sun Grid Engine. El modo de enviar trabajos implica conocer de antemano los valores máximos de cantidad de tiempo, número de procesadores, arquitectura, memoria y espacio en disco que va a requerir el cálculo. Esto permite además un mejor aprovechamiento de los recursos del sistema por parte de todos los usuarios.
El comando para enviar trabajos al sistema de colas en el SVG es qsub, seguido por una lista de los recursos que necesita el trabajo. Por ejemplo, supongamos que queremos enviar un trabajo Gaussian que no precisa más de 500 megabytes de memoria y 10 Gigabytes de scratch, y estimamos un tiempo de ejecución aproximado no superior a 24 horas, utilizando 1 procesador. Si el fichero de entrada para Gaussian se llama script.com y se encuentra en el directorio "pruebas", la forma de enviar este trabajo a cola sería:
qsub -l num_proc=1,s_rt=24:00:00,s_vmem=512M,h_fsize=10G,arch=32
cd $HOME/pruebas
g98 < script.com
control+D
Si no se produce ningún error, obtendremos un mensaje de este tipo:
Your job 492 ("STDIN") has been submitted
El número 492 es lo que se llama identificador de trabajo o JOBID y nos permite identificar nuestro trabajo dentro del sistema de colas (por ejemplo, para utilizar con el comando qstat y saber si se está ejecutando, encolado, etc.). También es importante indicar este número al hacer consultas telefónicas o por correo electrónico (véase el apartado Soporte).
La forma de especificar recursos es con la opción -l, seguida de los recursos que se solicitan separados con una ",". Es imprescindible dejar un espacio en blanco entre la opción "-l" y la lista de recursos. Los recursos deben ser:
Recurso
|
Significado
|
Unidades
|
Valor mínimo
|
Valor máximo
|
num_proc
|
Número de CPUs (procesadores) requeridos por el trabajo
|
Numero entero
|
1
|
16
|
s_rt
|
Tiempo real máximo que puede durar un trabajo
|
TIEMPO
|
00:01:00
|
300:00:00
|
s_vmem
|
Cantidad total de memoria RAM requerida por el trabajo
|
TAMAÑO
|
112M
|
4G
|
h_fsize
|
Máximo espacio requerido por un único fichero creado por el trabajo
|
TAMAÑO
|
1M
|
120G
|
arch
|
Tipo de procesador en la que se desea ejecutar el trabajo
|
Valores posibles: 32, 64, opteron, bw
|
Si necesita utilizar valores superiores a los límites de estos recursos o necesita una priorización de sus trabajos consulte la páxina de Recursos Especiales, allí se indican los pasos a seguir.
El formato de las unidades para los recursos es el siguiente:
- TIEMPO: especifica el período de tiempo máximo durante el que se puede utilizar un recurso. El formato es el siguiente: [[horas:]minutos:]segundos, por ejemplo:
30:00 son 30 minutos
100:00:00 son 100 horas
1200 son 1200 segundos (20 minutos)
- TAMAÑO: especifica el tamaño máximo en Megabytes. Se expresa en la forma entero[sufijo]. El sufijo actúa como un multiplicador definido en la siguiente tabla:
K Kilo (1024) bytes
M Mega (1,048,576) bytes
G Giga (1,073,741,824) bytes
Los nodos disponibles actualmente en el SVG corresponden a los siguientes tipos de máquina:
|
Intel 32 bits
1G / 2G
|
Intel 64 bits
|
Opteron 64 bits
|
num_proc
|
1
|
1
|
4
|
s_vmem
|
1G/2G
|
2G
|
4G
|
s_rt
|
300:00:00
|
300:00:00
|
300:00:00
|
h_fsize
|
120G
|
120G
|
120G
|
arch
|
32 bits
|
32 bits
|
64 bits (opteron)
|
Todos los nodos anteriores disponen de red gigabit y permiten el envío de trabajos paralelos utilizando la citada red. También están disponibles nodos PIII con red Myrynet pero estos quedan reservados para la realización de cálculos paralelos que tengan como objetivo la realización de pruebas o la optimización de algoritmos paralelos.
Debemos tener en cuenta que:
- Es muy importante dejar un espacio en blanco entre la opción "-l" y el siguiente recurso, mientras que después no deberá haber ningún otro espacio en blanco separando los recursos.
- Estos valores son máximos, por lo que no se podrán superar. Esto quiere decir que se creemos que nuestro trabajo durará unas 23 horas, debemos poner como s_rt=24:00:00 para asegurarnos de dejarle un margen. Después de 24 horas el sistema finalizará el trabajo automáticamente, aunque este no finalizase.
- Cuanto más ajustados sean estos valores a los recursos que realmente consume el trabajo, mayor prioridad para entrar en ejecución tendrá este.
- Si estos recursos no son suficientes para el trabajo, este abortará por falta de recursos y será necesario indicar los valores adecuados. En general, recomendamos solicitar recursos lo más próximos, por encima, a los valores que se estimen necesarios. El motivo es que cuantos menos recursos se soliciten, con mayor prioridad entrará el trabajo en ejecución.
Resumiendo, vamos a poner unos ejemplos para distintos trabajos:
- Para un trabajo que requiere poco consumo de memoria y tiempo de ejecución:
qsub -l num_proc=1,s_rt=10:00,s_vmem=200M,h_fsize=100M,arch=32 trabajo.sh
- Trabajo que requiere mucho tiempo de ejecución (80 horas) y poca memoria (es suficiente con 256mb):
qsub -l num_proc=1,s_rt=80:00:00,s_vmem=256M,h_fsize=10M,arch=32 trabajo.sh
- Un trabajo con grandes requerimientos de memoria (1 Gigabyte) pero poco tempo de ejecución:
qsub -l num_proc=1,s_rt=30:00,s_vmem=1G,h_fsize=10M,arch=32 trabajo.sh
- Un trabajo que genera un fichero grande (hasta 20 Gigabytes) de resultados:
qsub -l num_proc=1,s_rt=30:00:00,s_vmem=500M,h_fsize=20G,arch=32 trabajo.sh
- Un trabajo que consume 100 horas de CPU, 1 Gigabyte de memoria e genera un fichero de 5 Gigabytes:
qsub -l num_proc=1,s_rt=100:00:00,s_vmem=1G,h_fsize=5G,arch=32 trabajo.sh
Si necesita utilizar valores superiores a los límites de estos recursos debe realizar una solicitud tal como se explica en la correspondiente FAQ.
Una vez que ejecutamos el comando qsub, y obtenemos el identificador para el trabajo, este pasa a una cola apropiada para a su ejecución. El trabajo esperará a su vez el momento en que estén disponibles los recursos solicitados, para pasar a la ejecución, y finalmente el trabajo terminará y desaparecerá de la cola.
Chequeando el estado de los trabajos
Para comprobar el estado en que se encuentran los trabajos, se puede utilizar el comando qstat. Obtendremos una salida como la siguiente:
job-ID prior name user state submit/start at queue slots ja-task-ID
-----------------------------------------------------------------------------------------------------------------
1134360 2.98007 mm5-11.sh orballo r 10/26/2006 08:19:09 normal@compute-1-27.local 1
El significado de los campos es el siguiente:
- Job-ID: 489 es el valor del JOB-ID que le asignó el sistema de colas SGE. El JobID es un identificador único para cada trabajo y permite realizar el seguimiento del mismo.
- Prior: Indica la prioridad con la que se está ejecutando el trabajo
- Name: STDIN es el nombre del trabajo que se envió a la cola. Si se envío un trabajo desde la entrada estándar (es decir, escribiendo los comandos al enviar el trabajo), aparecerá STDIN. En caso de ser un script, aparecerá el nombre del script.
- User: orballo es el login del usuario que envío el trabajo a la cola
- State: "r" es el estado en el que se encuentra el trabajo e indica que está en ejecución (running). Los otros posibles estados de un trabajo son:
- t: transfiriéndose el trabajo para comenzar su ejecución.
- s: suspendido temporalmente para ejecutar trabajos más prioritarios.
- qw: el trabajo está encolado en espera de que haya suficientes recursos para ser ejecutado o debido a que se excedieron los límites por el usuario.
- Submit/start at: Fecha y hora en la que el trabajo fue enviado a la cola o entró en ejecución.
- Queue: normal@compute-1-27.local es el nombre de la cola a la que se envió el trabajo. La primera parte del nombre indica el nombre de la cola del cluster (normal) y la segunda parte el nodo en el que está corriendo el trabajo (compute-1-27.local). La cola destino dependerá de los recursos que se solicitaran.
- slots: indica el número de nodos en los que se está ejecutando el trabajo. Habitualmente, este número es 1 para trabajos secuenciales y mayor de 1 para trabajos paralelos. En caso de trabajos paralelos se puede usar el comando qstat -t para ver el resto de los nodos en los que se está ejecutando el trabajo.
SISTEMAS DE ARCHIVOS
Existen distintos sistemas de archivos con diferentes características en función de los requerimientos de espacio y velocidad de acceso.
Directorio home
Es el directorio en el que estarán los datos y archivos habituales de trabajo diario, y del que se hacen backups de modo regular. Existen cuotas (límites en su utilización), por lo que su uso deberá ser moderado.
Directorio de scratch
Es un espacio de almacenamiento para datos temporales y que se utiliza en aplicaciones como Gaussian o Gamess que requieren un archivo grande en el que escriben gran cantidad de datos de modo continuado. Solo es posible acceder a este directorio a través del sistema de colas y su nombre es $TMPDIR. Los datos que se encuentren en este directorio desaparecerán al finalizar el trabajo. Si algún archivo contenido en este directorio fose necesario, es responsabilidad de cada usuario copiarlo a su directorio home antes de que remate el trabajo o bien especificar la opción -v COPIA=$HOME/destino cuando se lanza el trabajo co qsub (véase FAQ para más detalles).
Directorio /tmp
En este directorio de acceso común para todo los usuarios se pueden introducir pequeños archivos temporales, aunque su utilización está desaconsejada y su contenido podrá ser eliminado de forma periódica.
Sistema de archivos paralelo
Se trata de un espacio de información común para todo los nodos del clúster y su utilización es recomendable en trabajos que requieran procesamiento masivo de información (data-mining, etc...). Para hacer uso de este sistema de ficheros paralelo, deberá seguir los pasos mencionados en la guía de servicios de almacenamiento.
Directorio compartido
Se trata de un espacio de almacenamiento que es visible desde todo los servidores del CESGA. Su utilización es recomendable para compartir datos entre distintos servidores o para cálculos que requieran información compartida. Para hacer uso de este espacio de almacenamiento, deberá seguir los pasos mencionados en su guía de servicios de almacenamiento.
Muchos de nuestros usuarios utilizan el frontal del SVG para compilar sus programas antes de enviarlos a cola. Esto puede ser un problema tanto por la consiguiente saturación del frontal como para el usuario, ya que por defecto va a compilar en una máquina de 64bits y al enviar el programa a la cola es posible que se ejecute en un nodo de 32bits.
Para ayudar a solucionar este problema y que el usuario no se encuentre con la situación de que tras compilar una aplicación esta no corre bien en los nodos, o que incluso muestra resultados erróneos, están a disposición de los usuarios los entornos de compilación que permiten generar un entorno adecuado a sus necesidades de compilación.
Para iniciar una sesión de compilación es necesario utilizar el siguiente comando:
compilar -arch <arquitectura>
donde <arquitectura> puede ser:
- 32: Arquitectura de 32 bits x86_32
- 64: Arquitectura de 64 bits x86_64
- opteron: Opteron
- bw: Nodos BW con red Myrinet
Debe tenerse en cuenta que cada sesión de compilación está limitada a 30 minutos.
De cualquier forma si tiene alguna duda sobre la compilación o el uso de este script puede ponerse en contacto con nosotros en
Compiladores disponibles y opciones
- Los compiladores GNU están disponibles para compilar en 32 o 64bits: gcc, g++, g77, gcc4, g++4, gfortran (dependiendo del entorno de compilación seleccionado se usarán las versiones de 32 o 64 bits)
- Además de los compiladores de GNU, están disponibles los compiladores de Portland Group, que incluyen soporte para las instrucciones SSE:
- Para entorno de 32 bits: Versión 6.1-3: sólo Fortran (pgf77, pgf90, pgf95 y pghpf)
- Para entorno de 64 bits: Versión 7.1-2: sólo Fortran (pgf77, pgf90, pgf95 y pghpf)
- Está disponible un compilador específico para Opteron (pathscale), para a su utilización es necesario contactar con .
En el caso de los compiladores de Portland de 32 bits se debe tener en cuenta que por defecto se usan los compiladores de Fortran de la versión 6.1-3 (pgf77, pgf90, pgf95 y pghpf) pero también está disponible la versión 6.1-1.
La opción de optimización recomendada para los compiladores de Portland es -fast, que selecciona un conjunto de opciones dirigidas a optimizar el código. Como cualquier otra opción de optimización, se deberá prestar atención a los resultados obtenidos con el código y comprobar que son correctos antes de utilizarla en cálculos definitivos.
UTILIZANDO MPI
MPI es un inferfaz de programación paralela para el envío explícito de mensajes entre procesos paralelos (para el que es necesario haber añadido el código MPI necesario en el programa). Para habilitar la utilización de MPI en los programas, es necesario incluir el archivo de cabecera de MPI en el código fuente y linkar con las librerías de MPI. Además, no es posible utilizar códigos interactivos MPI, si no que es obligatorio utilizar el sistema de colas de estos programas.
La mayor parte de los nodos del cluster SVG disponen de red gigabit y permiten el envío de trabajos paralelos utilizando la citada red. También están disponibles nodos PIII con red Myrynet pero estos quedan reservados para la realización de cálculos paralelos que tengan como objetivo la realización de pruebas o la optimización de algoritmos paralelos.
Guía de uso según necesidades
Existen distintas versiones disponibles de mpi:
- Mpi V1 sobre red Gigabit
- Mpi V1 sobre red Myrinet
- OpenMpi sobre Gigabit
A continuación se explica como utilizar cada una.
Añadir al ~/.bashrc
# mpich_p4
export PATH=/opt/cesga/mpich-1.2.7p1_p4/bin:$PATH
El script del trabajo debe especificar las siguientes opciones del mpirun:
#!/bin/bash
export PATH=/opt/cesga/mpich-1.2.7p1_p4/bin:$PATH
export P4_GLOBMEMSIZE=67303416
export P4_SOCKBUFSIZE=65535
mpirun -np $NSLOTS -machinefile $TMPDIR/machines /home/usuario/programa
Si el valor de P4_GLOBMEMSIZE es demasiado pequeño la aplicación para, dando un mensaje de error y sugiriendo un valor mayor.
Enviar los trabajos a cola con opciones similares a las siguientes:
qsub -cwd -l num_proc=1,s_rt=00:05:00,s_vmem=128M,h_fsize=1G,arch=32 -pe gigabit 4 test.sh
Añadir al ~/.bashrc
# OpenMPI
export PATH=/opt/cesga/openmpi/bin:$PATH
El script del trabajo debe especificarl as siguientes opciones del mpirun:
#!/bin/bash
# Set the environment to the appropiate MPI version
## openmpi
export PATH=/opt/cesga/openmpi/bin:$PATH
# It is important to give the full path to the program
mpirun -np $NSLOTS -machinefile $TMPDIR/machines /home/usuario/programa
Enviar los trabajos a cola con opciones similares a las siguientes:
qsub -cwd -l num_proc=1,s_rt=00:05:00,s_vmem=128M,h_fsize=1G,arch=32 -pe gigabit 4 programa.sh
El script del trabajo debe especificar las siguientes opciones del mpirun:
#!/bin/bash
# It is important to give the full path to the program
mpirun -np $NSLOTS /home/usuario/programa
Enviar los trabajos a cola con opciones similares a las siguientes:
qsub -cwd -l num_proc=1,s_rt=00:05:00,s_vmem=128M,h_fsize=1G,arch=bw -pe mpi 4 programa.sh
Compilación y linkado
Para los códigos Fortran, es necesario incluir la siguiente directiva en el código fuente de cualquier código que utilice MPI:
INCLUDE 'mpif.h'
y compilar con el siguiente comando:
mpif77 miprograma.f -o miprograma.exe
Para los códigos en C, es necesario utilizar la siguiente directiva:
#include <mpi.h>
ycompilar con un comando similar al siguiente:
mpicc miprograma.c -o miprograma.exe
Para compilar usando Pgf90:
mpif77 -fc=”pgf90 -tp p7 -Msecond_underscore /opt/cesga/mpich-1.2.7p1_p4/cesga/farg.o” miprograma.f -o miprograma.exe
Téngase en cuenta que sólo es posible utilizar pgf90 a través del entorno de compilación de 32 bits:
compilar -arch 32
En caso de existir alguna duda consúltese la guía de utilización do sistema de colas.
UTILIZANDO MATLAB
Matlab se ejecuta normalmente desde las colas, pero para evitar que los trabajos que utilicen Matlab fallen al entrar en ejecución por falta de licencias hemos implementado un nuevo recurso para el comando qsub: "matlab"
La forma de uso será añadir a la linea habitual del qsub ",matlab=1" al final.
De esta forma estamos pidiendo una licencia libre para ejecutar nuestro trabajo.
En caso de que la licencia no este disponible en ese momento, el trabajo no entrará en execución hasta que alguna se libere.
SOPORTE
Cómo solicitar ayuda:
- para cualquier aspecto relacionado con los servidores de cálculo, sistemas de colas, almacenamiento, etc.…
- en caso de consultas relacionadas con el uso de aplicaciones, peticiones de nuevas aplicaciones, solicitud de ayuda en la compilación de aplicaciones, etc.…
|