1. Introducción - Communicate with and Monitor Your Rocks Cluster

Gu´ıa pr´actica del usuario de aleph.eii.us.es
Faustino Palmero Acebedo
Grupo de F´ısica No Lineal. Universidad de Sevilla
Resumen
Este documento pretende ser una gu´ıa b´asica para el uso del cluster de computaci´on del grupo de
F´ısica No Lineal de la Universidad de Sevilla. No se pretende escribir una gu´ıa exhaustiva donde
se detallen el uso de compiladores, con todas sus opciones, programas como matlab, gesti´on
avanzada de colas, etc.., simplemente se intentar´a, en pocas p´aginas, indicar las “recetas”m´ınimas
necesarias para empezar a trabajar.
1. Introducci´on
El cluster aleph.eii.us.es est´a formado actualmente por seis m´aquinas SUN, cada una de ellas con doble
procesador AMD Opteron, y cada procesador con doble n´ucleo. En definitiva, para el sistema cada m´aquina
aparece como un nodo de cuatro procesadores.
Se ha instalado como sistema operativo una distribuci´on de Linux, basada en Red Hat, espec´ıfica para
cluster HPC (High Perfomance Computing, es decir, en traducci´on libre, Supercomputaci´on), denominada
“Rocks”. A su vez, est´an instalados compiladores de fortran, librer´ıas en paralelo, matlab (en una sola
m´aquina), phyton, octave, y muchas cosas m´as.
En principio una de las m´aquinas act´ua de nodo principal (aleph.eii.us.es), que en la nomenclatura del
sistema operativo utilizado se denomina “frontend”. Esta m´aquina se encarga de gestionar el cluster y dar
acceso desde y hacia el exterior al sistema. Aqu´ı est´a instalado matlab, y aqu´ı es donde se compila y se
ejecutan programas de forma interactiva. Las otras cinco m´aquinas, que se denominan “computer nodes”, y
a las que u´ nicamente se pueden acceder desde aleph, son nodos de computaci´on, denominadas compute-0-0
(o tambi´en c0-0, que es su segundo nombre o alias), compute-0-1 (con alias c0-1), y c0-2, c0-3 y c0-4, y
en principio est´an destinadas a ejecutar programas mediante un sistema de colas. La memoria RAM de tres
m´aquinas es de 4 Gb y de las otras tres 8 Gb. En concreto, aleph, c0-0 y c0-1 tienen ocho y c0-2, c0-3 y
c0-4 tienen cuatro.
En todo el texto, a la hora de indicar alg´un comando, utilizar´e este formato de letra. A su
vez, todos los comandos en el cluter tienen un help, al que normalmente se accede tecleando $ man
nombrecomando.
Figura 1: Im´agenes del cluster en sus primeros tiempos, cuando s´olo ten´ıa tres nodos.
1
2. Acceso al cluster
El nombre completo del cluster es aleph.eii.us.es, y s´olo se puede acceder desde el exterior al frontend.
Una vez dentro es posible acceder a los nodos de computaci´on, aunque no se aconseja. Cada uno de los
usuarios tiene una cuenta que se encuentra en el directorio /home/nombreusuario (es en este directorio
donde uno se sit´ua cuando se accede al cluster). Cada usuario, a la hora de acceder a su cuenta, tiene que
suministrar su nombre de usuario y su contrase˜na (password).
2.1. Acceso desde una m´aquina linux
Supondremos que en la m´aquina local est´a instalado el comando ssh, que normalmente est´a instalado
por defecto en las distribuciones linux. Aunque para acceder s´olo es necesario instalar el cliente ssh, si
queremos copiar ficheros desde el cluster a nuestra m´aquina local hace falta que est´e instalado tambi´en en
modo servidor.
Desde una m´aquina linux es posible acceder al cluster. Simplemente hay que abrir una terminal y teclear
el comando
$ ssh -X [email protected]
Normalmente se puede omitir la opci´on -X, ya que el comando ssh la tiene normalmente el por defecto, aunque no siempre es as´ı. Esto lo que hace es activar el modo gr´afico remoto. Podemos entonces
teclear cualquier comando como $ firefox o $ gnome-session y lo veremos en nuestra pantalla
en modo gr´afico. Evidentemente el sistema pedir´a vuestro password. Este mecanismo hace que el sistema
se sobrecargue de trabajo y la comunicaci´on se hace m´as lenta, de manera que para lanzar unicamente
´
programas se aconseja utilizar
$ ssh -x [email protected]
que no permite el modo gr´afico remoto.
Para copiar ficheros, por ejemplo el fichero pro.f de una m´aquina a otra se puede utilizar el comando
scp. Desde el directorio donde se encuentra el fichero
$ scp pro.f [email protected]:/home/nombreusuario/pro.f
aunque el nuevo nombre, si es el mismo, se puede omitir. Si se pretende cambiar el nombre se puede indicar
(en lugar de pro.f se escribir´ıa nuevonombre.nuevaextension).
Este comando tiene un mont´on de opciones. Simplemente se˜nalar que, si se quiere copiar un directorio
completo con todo lo que tenga dentro, se debe de incluir la opci´on -r.
La copia de ficheros del cluster a nuestro ordenador local responde tambi´en a la misma estructura.
Asumiendo que nuestro directorio de usuario en el nodo local est´a en /home/nombreusuario. $
scp pro.f [email protected]:/home/nombreusuario/pro.f
Para salir, se debe de teclear, desde la terminal, el comando
$ exit
y ya est´a. Este es el procedimiento recomendado, ya que aunque normalmente el sistema desconecta autom´aticamente los procesos interactivos cuando se cierra la terminal, por ejemplo d´andole a la x de la
esquina superior derecha, puede que se quede “colgado” alg´un proceso y evidentemente, muchos procesos
“colgados” hace que la m´aquina vaya m´as despacio.
2.2. Acceso desde Windows
Para acceder desde windows se aconseja utilizar un cliente ssh (se puede descargar desde el servidor de
la Universidad) y, si se quiere utilizar el modo gr´afico un emulador de X (mandadle un correo a Juan, que
os puede recomendar uno). El uso de este programa es bastante intuitivo y no me extender´e m´as en ello.
2
Figura 2: Cliente ssh. Activaci´on del X forwarding
Si se quiere activar el modo gr´afico se tiene que marcar el X forwarding en el cliente ssh. Para ello, en
las opciones del cliente ssh se tiene que se˜nalar la casilla correspondiente. En el emulador que puede descargarse en la Universidad, hay que seleccionar el bot´on de men´us edit − > settings, marcando tunnelling
y su casilla, como aparece en al figura.
En definitiva, para entrar u´ nicamente en modo texto con el ssh es suficiente. Si se quiere gr´aficos, hay
que activar el X, que se quedar´a funcionando en segundo plano, y luego entrar con el ssh. Para comprobar
que funciona, se puede teclear por ejemplo $ xclock, y saldr´a un bonito reloj en la ventana del X. Ya se
pueden llamar a programas que se ejecutan en modo gr´afico.
El cliente ssh tambi´en tiene un sistema para copiar ficheros de un sitio a otro que es muy intuitivo, y
permite abrir m´ultiples ventanas (son las ventanitas que al poner el cursor sobre ellas indican “new terminal
window” y “new file transfer window”).
Para salir, hat que teclear exit en la pantalla de la terminal (procedimiento recomendado)o bien, en el
men´u File elegir “ Disconnect”.
Nota: Si quer´eis un sistema de ventanas similar al escritorio del windows, hay que teclear en la ventana
de texto, con X funcionado en segundo plano: $ gnome-session.
3. Cambio del password
Es importante que la primera vez que se acceda al cluster se cambie la contrase˜na por defecto.
Para cambiar la contrase˜na, hay que teclear el comando $ passwd. Pedir´a el nuevo password y su
confirmaci´on.
4. Comandos muy b´asicos de UNIX
UNIX distingue las may´usculas de las min´usculas. CUIDADO.
Visualizar los contenidos de un directorio: $ ls
3
Moverse por un directorio cd. Por ejemplo $ cd /home/palmero lleva al directorio palmero. El
comando $ cd / nos lleva al directorio ra´ız del sistema. Para subir un nivel $ cd ..
Crear un directorio $ mkdir nombredirectorio. Si uno se encuentra en otro directorio se
debe indicar la ruta, por ejemplo $ mkdir /home/palmero/test crea el subdirectorio test
en el directorio $ /home/palmero
Copiar ficheros $ cp origen destino. Si se quiere u´ nicamente mover, sin guardar copia en el
sitio original $ mv origen destino. Si en destino no se indica nombre se guarda con el nombre
original. El car´acter * sirve como comod´ın, y para copiar por ejemplo un directorio recursivamente,
con todo lo que contiene, se debe incluir la opci´on -r.
Borrar un fichero rm nombrefichero.ext. Se puede indicar tambi´en toda la ruta de directorios
hasta el fichero si uno no se encontra en el directorio del fichero en cuesti´on. Nota: Al entrar como
usuarios, s´olo se pueden borrar los ficheros de ese usuario , los ficheros del sistema y de los otros
usuarios “est´an a salvo” de posibles errores.
Borrar un directorio $ rmdir nombredirectorio. Tambi´en se puede incluir la ruta completa.
Para que se borre el directorio debe de estar vac´ıo. Si se quiere borrar un directorio con todo lo que
contiene, lo primero que hay que hacer es TENER MUCHO CUIDADO CON ESTE COMANDO, y
luego teclear $ rm -r nombredirectorio. Se puede incluir la ruta completa. Si salen muchos
mensajes, se puede utilizar la opci´on -rf y ya no sale nada.
Como editor de textos, se puede usar el vi en modo texto, aunque es bastante engorroso. En modo
gr´afico recomiendo que el gedit. Para invocarlo $ gedit nombrefichero.ext. Por supuesto,
con las X funcionando.
En UNIX, si se tiene que teclear un nombre muy largo, escribiendo las primeras letras y d´andole al
tabulador del teclado normalmente lo completa.
Para ejecutar comandos en segundo plano, se indica al final de la l´ıneal el s´ımbolo &. Por ejemplo,$
gedit & abre el editor de textos y sigue permitiendo utilizar la terminal.
Por supuesto que existen muchos comandos m´as. Recomiendo que se consulte una gu´ıa de linux, en
Internet hay muchas. Por ejemplo, ten´eis una que, aunque antigua, est´a bien, es
http://www.informatica.us.es/ ramon/articulos/IntroLinux.pdf.
5. Matlab
El programa Matlab, en su versi´on 7.3, y junto con algunos toolbox, est´a instalado en la m´aquina aleph.
Para ejecutarlo se puede hacer lo siguiente:
Ejecuci´on en modo cl´asico, con todas las ventanitas, etc.. $ matlab (con o sin &, si quer´eis no
bloquear la ventana).
En modo texto, quitando toda esa parafernalia tan chula pero que consume un mont´on de recursos. $
matlab -nojvm. Tiene la ventaja de que si hac´eis una gr´afica, te la pinta sin problemas (con las
X activadas), pero si no le hace falta no consume recursos generando ventanas gr´aficas que no se van
luego a utilizar.
4
6. Compilaci´on de programas Fortran
Supondremos que tenemos el programa en fortran llamado program.f90 y se quiere construir el
ejecutable, es decir, hay que compilarlo (utilizar la extensi´on f90 para los programas fortran 90 es recomendable, aunque no imprescindible). Supondremos que est´a escrito en fortran90 est´andard, que no hace falta
llamar a ninguna librer´ıa y que nos encontramos en el mismo directorio que el programa en cuesti´on.
Para compilar con el fortran de intel, que parece que es el m´as competitivo de los fortran 90 gratis (y
uno de los m´as competitivos de todos los fortran, incluyendo los de pago) hay que teclear, :
$ ifort -O3 -ipo -no-prec-div -o program.out program.f90
y se genera el ejecutable (binario) program.out, pensando en que el tiempo de computaci´on sea el
m´as peque˜no posible. Las opciones -ipo y no-prec-div no las tengo muy testeadas. La opci´on -O3 es para
optimizarlo en velocidad. Siempre se puede compilar sin opciones de optimizaci´on s´olo con -o. Sugiero que
uno busque por la red “recetas” de opciones de compilaci´on para el tipo de programas que uno est´a usando.
Por supuesto que el compilador tiene un mont´on de opciones, que se pueden consultar tecleando $ man
ifort.
El compilador fortran de intel es gratis para uso personal no lucrativo, y la licencia est´a a mi nombre,
v´alida y renovable por un a˜no.
7. Ejecuci´on de un programa
Supondemos que tenemos un programa ejecutable (binario) program.out, que al ejecutarse lee un fichero de datos input.dat, y que necesita tambi´en el fichero parameters.param. La salida es un fichero de
resultados output.dat y como condici´on adicional, en el programa, se trabaja con la variable de ambiente
del sistema PROGRATMP donde se indica el directorio que el programa va a usar para almacenar informaci´on temporal. Evidentemente e´ ste es un caso muy general, lo normal es que tengamos u´ nicamente el
binario, el input y el output. Supondremos que el binario, el input.dat y parameters.param est´an en el mismo
directorio.
7.1. Lanzamiento de un programa en interactivo
Para ejecutar el programa en interactivo, simplemente hay que hacer
$ export PROGRAMTMP=/tmp
$ ./program.out input.dat
y el programa se ejecuta en el “frontend”. Se puede a˜nadir al final el s´ımbolo & y se ejecuta en segundo
plano. Se recomiendo no cerrar la ventana mientras que se ejecuta, ya que se puede cortar el proceso, aunque
en los tests que he realizado segu´ıa funcionando.
Todo este proceso se puede hacer en cualquier nodo de computaci´on. Desde el frontend se puede entrar
con ssh c0-1 o´ ssh c0-1 (no pide password). Desde all´ı se puede acceder al directorio de usuario (es un
sistema de archivos com´un a todos los nodos del cluster) y ejecutar el programa. No obstante no se aconseja
ejecutar programas de forma interactiva en los nodos de computaci´on.
7.2. Lanzamiento utilizando SUN GRID ENGINE (SGE)
El sistema SGE facilita el trabajo de computaci´on, simplemente preparamos un archivo de lanzamiento
(launching script), similar a los ficheros bat de windows, los mandamos a la cola y el sistema se encarga de
llev´arselo al procesador m´as desocupado de un nodo de computaci´on, lo ejecuta y fin.
Ahora mismo hay cuatro colas definidas:
cola1, donde se encuentran los nodos c0-0 y c0-1, cada uno de ellos con 8 Gb de RAM y 4 n´ucleos.
En total es posible trabajar en esta cola con 8 subprocesos como m´aximo.
5
cola2, donde se encuentran los nodos c0-2, c0-3 y c0-4, cada uno de ellos con 4 Gb de RAM y 4
n´ucleos. En total es posible trabajar en esta cola con 12 subprocesos como m´aximo.
cola3, donde est´an todos los nodos y es posible trabajar con 20 subprocesos como m´aximo. No
obstante, aqu´ı tenemos un sistema de m´aquinas algo distintas y, aunque en los tests que he hecho ha
ido bien, puede ocasionar problamas sobre todo cuando los programas cogen mucha RAM. USAR
´
CON PRECAUCION.
jesus, cola especial dedicada a Jes´us para que sus “inmensamente grandes” matrices no colapsen
f´acilmente el cluster.
Recomiendo utilizar cola1 y cola2. Cuando se tenga experiencia se puede pensar en usar la cola3, pero por
ahora no lo aconsejo.
Los pasos a seguir son los siguientes:
1. Preparaci´on de un archivo de lanzamiento, que llamaremos launch.sh, y que estar´a en el mismo
directorio que el programa, etc.... Debe de contener las siguientes l´ıneas:
#$-S /bin/bash
#$-N program
#$-cwd
export PROGRAMTMP=/tmp
./program.out input.dat
2. Lanzamiento del proceso. Situado en el directorio correspondiente.
$ qsub launch.sh
que devolver´a una l´ınea de texto
Your job 12 ("program") has been submitted
y un n´umero, en este caso 12, que se asignar´a al proceso. Ese n´umero es importante, ya que servir´a para solicitar informaci´on sobre su ejecuci´on.
3. Comprobaci´on que el proceso est´a realmente en la cola
$ qstat
proporciona informaci´on sobre el proceso
4. Finalizaci´on, evaluaci´on y recolecci´on de resultados. Una vez terminado el proceso, se puede consultar informaci´on detallada sobre e´ ste, tecleando
$qacct -j 12
En el directorio donde se encontraban los programas tendremos ahora los ficheros que ten´ıamos
antes, el fichero output.dat y unos ficheros llamados program.e12 y program.o12, donde
el fichero .o contien la salida en pantalla del programa y el .e los errores.
5. Si fuera necesario, para interrumpit un proceso,
$ qdel 12
donde el n´umero es el n´umero del proceso.
Se pueden incluir opciones m´ultiples y variados, incluso de que mande un correo electr´onico uando
termine el proceso (y supongo que no ser´a complicado utilizar un ordenador local para conseguir que te
mande un mensaje al m´ovil...). Recomiendo echar un vistazo al manual del comando qsub.
6
´
8. Lanzamiento de multiples
trabajos
Se pueden lanzar m´ultiples procesos “a lo bruto”, simplemente creando m´ultiples directorios, uno por
cada ejecuci´on, copiando los ficheros correspondientes en cada directorio, y mandando a cola los distintos
procesos. No obstante, es posible lanzar en un solo comando m´ultiples procesos en el cluster. En este
caso los archivos de entrada, par´ametros y de salida deber´an diferenciarse usando mecanismos propios del
programa que se va a ejecutar. Por ejemplo, suponiendo que nuestro programa va a ejecutar un estudio
param´etrico, con tres ficheros de entrada input a.dat, input b.dat y input c.dat, con el mismo fichero
parameters.param y mismo fichero de salida, se puede hacer el siguiente fichero program.sh:
#$-S /bin/bash
#$-N program
#$-cwd
#$-t 1-3:1
export PROGRAMTMP=/tmp
inputs=([1]=input a.dat [2]=input b.dat [3]=input c.dat)
./program.out ${inputs[$SGE TASK ID]}
Un truco para tener ficheros output.dat consiste en escribir la salida por pantalla, de manera que se generan
los diversos ficheros .o. Tambi´en se puede complicar todo en el fichero sh, creand directorios, moviendo
ficheros, etc..., a gusto del usuario.
9. Monitorizaci´on de procesos v´ıa web
En la p´agina web de aleph (aleph.eii.us.es), y a costa de hacer que nuestros procesos sean p´ublicos,
he habilitado el acceso web a las colas de ejecuci´on. Con cualquier navegador se puede acceder al cluster
tecleando en la barra de direcciones http://aleph.eii.us.es/ganglia. Pinchando en cluster status se pueden
monitorizar los procesos en modo gr´afico (hay que recargar de vez en cuando la pantalla ya que si no da
resultados err´oneos). Por mi parte recomiendo seguirlos en una terminal en modo texto, aunque en verdad
verlos en el navegador “impone” un poco m´as.
10. Programaci´on en paralelo
Habr´ıa mucho que hablar... Os aconsejo que busqu´eis por Internet un manual de OpenMP, lenguaje
de programaci´on para paralelizar de forma f´acil sistemas de memoria compartida. Creo que empezar por
˜
aqu´ı ser´ıa lo m´as pr´actico. Los fundamentos de OpenMP se APRENDEN EN UNA MANANA!!!.
11. M´as informaci´on y trabajo pendiente
En la p´agina de alpeh (http://aleph.eii.us.es) voy a ir colocando informaci´on variada del cluster. En
concreto, he colocado ficheros sh modelo para mandar diversos trabajos a cola, esta gu´ıa, etc.
No obstante, todav´ıa queda MUCH´ISIMO............por hacer. .
12. Documentaci´on y contacto
1. Introducci´on a Linux: http://www.informatica.us.es/ ramon/articulos/IntroLinux.pdf.
2. Manual de rocks (bot´on de documentaci´on en la p´agina principal de aleph): http://aleph.eii.us.es/rocksdocumentation/4.2.1/
3. Manual de uso de rocks (en espa˜nol): http://urania.udea.edu.co/facom/facom-products/documentation.php
7
4. P´agina principal de la distribuci´on Rocks: http://www.rocksclusters.org
Contacto: Faustino Palmero Acebedo. E-mail: [email protected]
8