Rigel - LofNaDI/Tutorials GitHub Wiki

Conectarse a Rigel

Para conectarnos a Rigel, lo primero es estar conectados a la VPN de la UPV. Cómo hacerlo está explicado en el siguiente enlace para diferentes sistemas operativos: https://www.upv.es/contenidos/INFOACCESO/infoweb/infoacceso/dat/697481normalc.html

Con la VPN activa, debemos establecer una conexión ssh con Rigel. La forma de hacerlo varía según el sistema operativo que estemos usando:

  • Linux: Ya que Rigel opera con Linux, este sistema operativo ofrece la forma más sencilla de conectarse. Tan solo tenemos que abrir una Terminal de comando y escribir: ssh [email protected]. A continuación nos pedirá nuestra contraseña, que será la misma que para la Intranet de la UPV. Cuando la tecleemos no aparecerá nada en pantalla, pero se estará escribiendo. Pulsamos Intro y conectaremos con Rigel.

  • Windows: El programa Putty se utiliza para conectarse a través de protocolos ssh. Visitar su web para aprender a instalarlo y usarlo. https://www.putty.org/

  • Mac: La conexión se establece de la misma forma que con Linux.

Uso de Rigel

El protocolo ssh nos permite manejar la máquina remota a través de comandos, que en este casó serán de Linux, ya que es el sistema instalado en Rigel. Por ello, es importante familiarizarnos con los más esenciales. Aquí dejo un enlace para empezar con esta tarea: https://www.hostinger.es/tutoriales/linux-comandos

Al entrar a Rigel, estaremos situados en nuestro directorio particular: ~/home/usuario/. Este directotorio es privado y nos permite almacenar todo lo que queramos usar en Rigel. Además de este directotio, disponemos de otro: ~/SCRATCH/usuario/. Sus características son:

  • home: Tiene una capacidad máxima de 10Gb y se usa por defecto cuando se lanza un script desde el sistema de colas. Su contenido NO se elimina con el tiempo de forma automática.

  • SCRATCH: Tiene capacidad ilimitada, por lo que se usa para correr trabajos que requieren una gran cantidad de datos. Sin embargo, el contenido que lleve sin usarse un mes será eliminado de forma automática por Rigel.

Podemos ver el espacio ocupado y disponible de cada directorio usando el comando quota.

Recomiendo leer los ficheros de Rigel situados en el directorio help: colas.txt, recursos.txt y discos.txt. Este último es especialmente interesante, porque explica más en detalle como usar los directorios arriba mencionados.

Uso de las colas: subir un trabajo

Los recursos computacionales de Rigel se distribuyen a los usuarios a través de un sistema de colas, en específico el sistema SUN Grid Engine de Oracle. Cualquier trabajo que queramos realizar debe subirse a esta cola para que se le asigne de forma automática los recursos que necesite. Para este fin, utilizaremos tres comando esenciales: qsub, qstat y qdel:

  • qsub: sirve para poner un script en la cola y que se ejecute. Lo normal es subir ficheros con la extensión .sh, dentro de los cuales estará todo lo necesario para ejecutar nuestro programa (ejemplo: qsub file.sh). Véase el ejemplo más abajo.

  • qstat: nos dice el estado de los programas que hemos puesto en la cola.

  • qdel: elimina o aborta trabajos que estén en la cola o ejecutándose.

Dejo un enlace con explicaciones más detalladas de estos comandos: http://docs.adaptivecomputing.com/torque/4-1-3/Content/topics/12-appendices/commandsOverview.htm. También puede verse la web de Rigel, donde además se ecuentra la documentación específica de SUN Grid Engine: https://wiki.upv.es/confluence/display/MANUALES/Uso+del+Cluster+Rigel

Cuando un trabajo termina, la salida y los mensajes de error producidos en la ejecución se guardan en ficheros por defecto filename.sh.e_job_id y run.sh.o_job_id respectivamente. Veremos que el nombre de estos ficheros se puede modificar en el archivo .sh.

Ejemplo de fichero .sh

Vamos a crear un ejemplo típico de script que se utiliza con el comando qsub. Nos situamos en el directotio donde queramos crearlo y utilizamos el comando nano example.sh. El comando nano se utiliza en Linux para abrir ficheros ya existentes o para crear uno nuevo en blanco. Hecho esto, estaremos dentro de un fichero en blanco donde podemos empezar a escribir.

En las primeras líneas podemos escribir comentarios que describan de forma sencilla lo que hace este scrpit. Las líneas comentadas empiezan con el símbolo #. Después escribiremos parámetros que debemos pasar a la orden qsub, tales como la cantidad de RAM necesaria para nuestro trabajo, los nombres de los ficheros donde queremos guardar la salida y los errores, etc. Estas líneas deben empezar con los símbolos #$. Por último escribimos los comandos que ejecutan nuestro programa. Por ejemplo, si quiero ejecutar un programa (programa.py) de python escribiré: python programa.py. Vamos a ver un ejemplo concreto:

#Script de prueba
#Este script me dice la version de python que estoy usando y ejecuta el programa prueba.py

#$ -cwd                         # Ejecutar en directorio actual.
#$ -l h_vmem=1g,h_rt=00:30:00   # Memoria requerida y tiempo maximo de ejecucion default:1gb y 1 hora
                                # es muy importante poner tiempo de sobra para la simulacion, de lo contrario se detendra antes de acabar

#$ -M [email protected]     # Dirección de correo 
#$ -m e                         # Le digo que me mande un correo cuando acabe la ejecución
#$ -o output                    # Nombre del fichero de salida
#$ -e error                     # Nombre del fichero de errores

python --version                 # le pido la version de python
python prueba.py                 # ejecuto el programa prueba.py

Para ver más opciones que se le pueden pasar al comando qsub, recomiendo el siguiente enlace: http://www.softpanorama.org/HPC/Grid_engine/sge_submit_scripts.shtml.

Problemas de versiones: instalando conda

Cuando trabajamos en este tipo de clusters de computación, solemos encontrarnos siempre con el mismo problema: las versiones de los programas que uiliza están anticuadas, no son las que necesitamos o directamente no tiene instalado lo que necesitamos. Para arreglar esto podemos crear un entorno (environment) de trabajo que tenga instalado justo lo que nos hace falta. En mi caso, por ejemplo, la versión de Python instalada en Rigel es demasiado antigua. La mejor solución que he encontrado es instalar miniconda, una versión simplificada de conda, un gestor de entornos que nos facilita mucho su creación y gestión. Una vez instalado miniconda podemos instalar más paquetes otros paquetes que vienen por defecto en conda de forma rápida y sencilla. Para instalar miniconda, nos situamos en nuestro directorio de usuario de home y escribrimos los siguientes comandos en la Terminal:

mkdir -p ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm -rf ~/miniconda3/miniconda.sh
~/miniconda3/bin/conda init bash
~/miniconda3/bin/conda init zsh

Hecho esto, necesitamos salir y volver a entrar a Rigel. Podemos salir con el comando exit. Al volver a entrar nos daremos cuenta de que ahora la terminal muestra el mensaje (base) rigel$ en lugar de tan solo rigel$, como aparecía antes. Esto se debe a que ahora estamos en el entorno base creado por conda. Este entorno trae de por sí, por ejemplo, la última versión de Python, entre otras cosas. Si ahora subimos cualquier fichero a una cola, este se ejecutará usando los recursos de computación de Rigel pero con las versiones de los programas de nuestro nuevo entorno.

El entorno base estará activado por defecto en Rigel siempre que entremos. Si solo necesitamos trabajar con un entorno, lo mejor es dejarlo así, ya que nos ahorra tener que activarlo cada vez que querramos ejecutar un trabajo. Por el contrario, si trabajamos con diferentes entornos, podemos hacer que no se active de forma automática. Esto se hace con el comando: conda config --set auto_activate_base False. Para ver como se ha cambiado, podemos usar el comando conda config --show | grep auto_activate_base.

También podemos dejar el entorno base activado por defecto y simplemente usar el comando conda activate directorio_del_entorno/nombre_del_entorno para cambiar a otro. Cuando hayamo terminado de usarlo, ejecutamos conda deactivate para volver al entorno base. Si usamos este último comando estando en base, desactivaremos todos los entornos y estaremos trabajando con las versiones y programas que tenga Rigel. Más información acerca de esto: https://www.interactivechaos.com/es/conda/command/desactivacion-de-un-entorno

Para activar un entorno concreto en una ejecución concreta, tan solo tenemos que poner el comando conda activate directorio_del_entorno/nombre_del_entorno al principio de nuestro archivo .sh para que se active. El fichero quedaría así:

 # Script de prueba
 
 #$ -cwd                       # Ejecutar en directorio actual.
 #$ -l h_vmem=1g,h_rt=00:30:00 # Memoria requerida y tiempo maximo de ejecucion default:1gb y 1 hora
 
 #$ -M [email protected]
 #$ -m e
 #$ -o output  #Nombre del fichero de salida
 #$ -e error
 
 conda activate base
 python --version     # Me devuelve en el fichero output la version de Python del entorno base

Para aprender a crear y manejar diferentes entornos recomiendo la documentación oficial de conda: https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html