Guía de Usuario
Descubra cómo aprovechar al máximo el clúster Kabré para sus necesidades computacionales.
Kabré es una palabra del lenguaje Ngäbe que significa un puñado. Este significado entra dentro de la actual composición del clúster, la cual cuenta con múltiples arquitecturas en paralelo. A lo largo de este tutorial, aprenderá cómo está compuesto Kabré, cómo conectarse al clúster, enviar trabajos, recibir resultados y lo esencial sobre los módulos de entorno.
Para completar este tutorial usted requerirá un cliente SSH. En plataformas Unix y Linux comúnmente existe un emulador de terminal capaz de establecer sesiones SSH. En plataformas Windows usted deberá descargar un programa que funcione como cliente SSH, como PuTTY o similar.
Además, requerirá una cuenta activa en Kabré y credenciales válidas. Si no tiene una, por favor diríjase a la página de registro y llene sus datos para solicitar una nueva cuenta, o escríbanos a cnca@cenat.ac.cr explicando su situación.
La siguiente imagen muestra un diagrama de red de Kabré. A continuación discutiremos un poco sobre sus principales componentes.

Estos nodos, llamados también login, son un tipo de área de trabajo compartido. Cuando usted accede Kabré, se le asigna uno de los nodos login. Algunas tareas comunes que se realizan aquí son:
- Crear y editar archivos
- Crear directorios y mover archivos
- Copiar archivos desde y hacia su computadora
- Compilar código
- Enviar trabajos
- Administrar sus trabajos activos
Código paralelo o tareas pesadas corriendo en los nodos login son considerados comportamientos no deseados.
Nukwä significa pájaro en lenguaje Ngäbe. Hay 11 nodos nukwa, 4 de estos nodos cuentan con una GPU NVIDIA Tesla V100, 24 núcleos a 2.20GHz, 1 hilo por núcleo y 32 GB de RAM. Además, hay otros 7 nodos nukwa que poseen una GPU NVIDIA L40S, 20 núcleos a 2.00GHz, 1 hilo por núcleo y 256 GB de RAM.
Solo las aplicaciones con un uso intensivo de GPU obtendrían una aceleración relevante con nodos nukwa.
Nota: Debido a un cambio de sistema operativo que se está llevando a cabo en los nodos de cómputo, los nodos Nukwa cuentan con el sistema operativo de AlmaLinux 9, lo cual ha traído consigo varias incompatibilidades entre los nodos. Por eso, cuando sea requerido usar estos nodos, junto a los módulos del sistema, es necesario insertar en el script de SLURM la línea “. /opt/Modules/3.2.10/init/sh”, con el punto y el espacio después del punto, para que así los módulos funcionen correctamente.
Dribe significa alacrán en lenguaje Ngäbe. Dribe tiene 7 nodos, uno que cuenta con un Intel Xeon con 36 núcleos a 3,00 GHz, 2 hilos por núcleo y 1024 GB de RAM, y los demás con 18 núcleos a 3,00 GHz, 2 hilos por núcleo y 512 GB de RAM.
Los nodos Dribe funcionan bien para herramientas que requieren una alta demanda de memoria.
Kurá significa tigre en lenguaje Ngäbe. Kurá tiene 12 nodos, los cuales cuentan con un Intel Xeon con 20 núcleos a 2,30 GHz, 2 hilos por núcleo y 256 GB de RAM.
Estos nodos Kurá funcionan bien para múltiples tipos de herramientas, ya sean tareas de bioinformática que no requieren tanta memoria, análisis de datos para Big Data que ocupen una memoria y procesador con suficientes potencia e hilos, así como otras tareas que no necesiten una gran cantidad de recursos.
Nota: Debido a un cambio de sistema operativo que se está llevando a cabo en los nodos de cómputo, los nodos Kurá cuentan con el sistema operativo de AlmaLinux 8, lo cual ha traído consigo varias incompatibilidades entre los nodos. Por eso, cuando sea requerido usar estos nodos, junto a los módulos del sistema, es necesario insertar en el script de SLURM la línea “. /opt/Modules/3.2.10/init/sh”, con el punto y el espacio después del punto, para que así los módulos funcionen correctamente.
| Partición | Número de nodos | Usos principales | Memoria por nodo | Núcleos por nodo | Acelerador por nodo |
|---|---|---|---|---|---|
| Nukwa | 11 | IA, Aprendizaje automático, Simulación | 32-256 GB | 24-20 | NVIDIA-GPU (V100-L40S) |
| Dribe | 7 | Bioinformática | 512-1024 GB | 18-36 | NO |
| Kurá | 12 | Multipropósito | 256 GB | 20 | NO |
Para empezar, abra un emulador de terminal y abra una sesión ssh escribiendo
Recuerde cambiar [user] por su nombre de usuario. Escriba su contraseña cuando se le solicite. Se registrará en algún nodo de inicio de sesión. Este es un terminal típico de Linux, pruebe usted algunos comandos conocidos, como ls, cd, mkdir y otros.
Una clave SSH es un archivo que mantendrá su conexión segura y evita que escriba su contraseña cada vez que inicie sesión. Este archivo está comúnmente vinculado a una computadora; normalmente usted deberá generar una para la computadora que utilizará para interactuar con Kabré.
Para generar una clave SSH, en su computadora local (computadora portátil, estación de trabajo …) abra un terminal, vaya a su directorio de inicio y escriba
y siga las instrucciones. Si elige las opciones predeterminadas, la nueva clave estará en ~/.ssh/, ahora tiene que copiar la clave pública a Kabré, para hacerlo escriba
Ahora, dentro de una sesión ssh en Kabré, escriba:
Alternativamente, puede ejecutar este procedimiento en un solo comando si está disponible en su estación de trabajo, de la siguiente manera:
Ahora, si abre un nuevo terminal y escribe ssh -p 22022 your_user@kabre.cenat.ac.cr se registrará sin solicitar la contraseña. Esto se debe a que Kabré tiene la clave ssh pública de su computadora. También es conveniente para su computadora tener la clave pública de Kabré, simplemente adjúntela a autorized_keys en su computadora local, así:
Contamos con tres directorios: /home, /work y /data.
| Directorio | Cuota | Propósito | Respaldo |
|---|---|---|---|
| /home/userid | 10GB | Scripts y datos importantes | Mensual |
| /work/userid | 100GB | Datos temporales y herramientas | NO |
| /data/userid | 100GB | Bases de datos y datos a analizar | NO |
Para saber la cantidad de espacio disponible que queda en cada directorio, puede usar el siguiente comando:
- El usuario es responsable de administrar sus directorios Home, Work y Data. El primero está destinado a programas y datos confidenciales, el segundo a datos temporales, herramientas y archivos generales y el último está destinado a datos masivos, bases de datos y datos a analizar.
- La capacidad del directorio Work y Data se puede ampliar a petición. Usted debe proporcionar una justificación clara del espacio adicional necesario. Envíe su solicitud a la página de tiquetes tiquetes.kabre.cenat.ac.cr.
- Aunque se realiza una copia de seguridad del directorio Home mensualmente, le recomendamos que trabaje con un sistema de control de versiones (v.g. git) para sus scripts y códigos fuente.
El comando scp es similar al comando cp; copia archivos de un origen a un destino a través de una sesión SSH. Tiene la siguiente sintaxis:
Tenga en cuenta que este comando es solo para un solo archivo; si necesita cargar un directorio completo, agregue la opción -r al comando, como se muestra a continuación:
Los valores por defecto son:
- user: su usuario local
- host: host local
- path: directorio de trabajo actual
El comando scp debe ejecutarse en su máquina local, no en Kabré. Tal vez su aplicación genere muchos archivos de visualización y desee descargar esos archivos a su computadora; recuerde que ~ significa el directorio de inicio y * coincide con cualquier secuencia de caracteres, usando estos conceptos:
O tal vez usted desee cargar un archivo de parámetros para usar en una simulación, debería hacer lo siguiente:
El primer paso es conocer el uid (identificación de usuario) del usuario con el que desea compartir la propiedad; para obtener el uid, ejecute el siguiente comando:
A continuación, una vez que conozca el uid, usted puede proceder a otorgar permisos sobre un solo archivo o directorio; aquí se puede elegir qué permisos otorgar, podrían ser: R (para lectura), W (para escritura) y/o X (para ejecutar).
Si desea otorgar todos los permisos al usuario cuyo uid es “[uid]” sobre el directorio “[/path/directory]” (recuerde sustituir estos valores por los que necesita), puede usar el siguiente comando:
Note que esto daría todos los permisos (ya que usamos RWX) a [uid] solo al directorio [/path/directory], pero no a sus subdirectorios. Tenga cuidado al otorgar todos los permisos a otro usuario, ya que tendrá la capacidad de eliminar y modificar libremente.
Si desea incluir todos los subdirectorios, este mismo comando se puede ejecutar de forma recursiva simplemente agregando -R, así:
Por último, si desea eliminar los permisos RWX a un “[uid]” sobre el directorio “[/path/directory]”, puede usar:
Los nodos de inicio de sesión son adecuados para tareas ligeras, como se mencionó anteriormente: editar archivos, compilar, copiar archivos, etc. Se espera que las tareas pesadas se ejecuten en los nodos Nukwa o Dribe. Para hacer cumplir un reparto justo de recursos entre los usuarios, su tarea debe enviarse a un sistema de cola. Es como formarse en el banco, una vez que su tarea llega al principio de la fila, se le otorgarán todos los recursos solicitados y se ejecutará hasta que se complete o hasta que consuma su franja de tiempo.
Actualmente, hay diferentes colas para cada componente en Kabré, eso significa que no puede mezclar nodos Nukwa y nodos Kurá en un solo trabajo, por ejemplo. La siguiente tabla muestra todas las colas disponibles:
| Partición (Cola) | Plataforma | Número de nodos | Asignación de tiempo |
|---|---|---|---|
| nukwa | GPU | 1 | 24 horas |
| nukwa-debug | GPU | 1 | 4 horas |
| nukwa-v100 | GPU | 1 | 4 horas |
| nukwa-l40s | GPU | 1 | 4 horas |
| nukwa-wide | GPU | 4 | 24 horas |
| nukwa-long | GPU | 1 | 48 horas |
| dribe | Xeon | 1 | 72 horas |
| dribe-long | Xeon | 1 | 744 horas |
| dribe-debug | Xeon | 1 | 744 horas |
| kura | Xeon | 1 | 8 horas |
| kura-debug | Xeon | 1 | 72 horas |
| kura-wide | Xeon | 4 | 8 horas |
| kura-long | Xeon | 1 | 24 horas |
El proceso de envío de un trabajo en Kabré se puede dividir en cuatro pasos: escribir un archivo SLURM, poner su trabajo en cola, monitorear los trabajos y recuperar los resultados.
Este archivo de configuración le dice al sistema de colas todo lo que necesita saber sobre su trabajo, para que pueda colocarse en la cola correcta y ejecutarse. Pruebe con un ejemplo de trabajo mínimo. A continuación se muestra un código C que se aproxima al valor de pi utilizando un método de Montecarlo. Inicie sesión en Kabré, copie el texto en un archivo y guárdelo con el nombre pi_threads.c.
#include <pthread.h>
#include <math.h>
#include <stdlib.h>
void * calc_partial_pi(void * p){
// ... implementation
}
int main(int argc, char * argv[]){
// ...
}Actualmente, se encuentra en un nodo de inicio de sesión, por lo que está bien compilar el código allí, hágalo escribiendo:
El siguiente es un archivo SLURM de ejemplo. Todas las líneas que comienzan con #SBATCH son comandos de configuración para el sistema de colas. Las opciones que se muestran aquí son las más comunes y posiblemente las únicas que necesitará.
| Configuración | Descripción |
|---|---|
| –job-name=<nombre> | Nombre específico del trabajo |
| –output=<nombre> | El nombre con el que sale el trabajo |
| –partition=<partición> | En qué cola debería ejecutarse |
| –ntasks=<numero> | Número de procesos a ejecutar |
| MM.SS> | Duración aproximada del trabajo |
El cuerpo de un archivo SLURM es un código bash. Copie el ejemplo en un archivo llamado pi_threads.slurm.
#!/bin/bash #SBATCH --job-name=pi_threads #SBATCH --output=result.txt #SBATCH --partition=kura #SBATCH --ntasks=1 #SBATCH --time=00:10:00 module load gcc/7.2.0 srun ./pi_threads 64 100000000000
Nota: Los argumentos de la línea de comando 64 y 100000000000 son los parámetros específicos necesarios para ejecutar pi_threads.
Ahora, desde la línea de comando, invoque al remitente de colas:
¡Y eso es todo! Su trabajo se pondrá en cola y se ejecutará, en este caso, en un nodo Xeon Phi.
Una forma pasiva de monitorear sus trabajos es indicarle a SLURM que envíe un correo electrónico cuando haya terminado. Esto se puede configurar en el archivo SLURM usando las siguientes opciones:
| Configuración | Descripción |
|---|---|
| –mail-user=<email> | Dónde enviar alertas de correo |
| –mail-type=<BEGIN|END|FAIL> | Cuándo enviar alertas de correo |
#SBATCH --mail-user=example@mail.com #SBATCH --mail-type=END,FAIL
Una forma pasiva de monitorear sus trabajos es indicarle a SLURM que envíe un correo electrónico cuando haya terminado. Esto se puede configurar en el archivo SLURM usando las siguientes opciones:
| Comando | Descripción |
|---|---|
| squeue -u <username> | Verificar trabajos para un usuario específico |
| sinfo | Mostrar todos los nodos (con atributos) |
| scontrol show job <job_id> | Estado de un trabajo en particular |
| scancel <job_id> | Eliminar trabajo |
Para mostrar detalles sobre el estado de un trabajo:
Para mostrar detalles sobre el estado de un trabajo:
Para comprender los códigos de estado de trabajo que puede encontrar, verifique lo siguiente:
| Código | Estado |
|---|---|
| CA | Cancelado |
| CD | Completado |
| CF | Configurando |
| CG | Completando |
| F | Fallo |
| NF | Fallo de nodo |
| PD | Pendiente |
| R | Corriendo |
| TO | Timeout |
| S | Suspendido |
De forma predeterminada, cada trabajo generará un archivo de salida con un nombre como en el siguiente ejemplo:
Puede copiar este archivo a su computadora local o ejecutar otro script para procesar posteriormente la salida.
A veces desea tener acceso directo a algún nodo. Usar ssh directamente es una mala práctica, porque el sistema de cola podría enviar el trabajo de otra persona para que se ejecute en el nodo que está utilizando actualmente. La forma educada de solicitar acceso directo es a través de un trabajo interactivo que lo pondrá en una ventana interactiva en un nodo de cómputo. Esto le permite experimentar con diferentes opciones y variables que proporcionarán retroalimentación inmediata.
Para solicitar una cola interactiva puede utilizar:
Lo anterior le brindará una ventana a uno de los nodos de la cola que usted elija, ya sea: dribe, kura o nukwa; así como a sus variables: nukwa-wide, nukwa-long, dribe-debug, etc.
Diferentes usuarios tienen diferentes necesidades, y a veces esas necesidades pueden ser conflictivas; por ejemplo, cuando se requieren varias versiones de la misma biblioteca. Estas situaciones se resuelven con módulos de entorno. Un caso típico son las diferentes versiones de Python. Para ejemplificar, consulte la cola en la que debe ejecutar escribiendo:
Luego, escriba $ python. Deberá ingresar al intérprete predeterminado de Python, cuyo encabezado debería verse así:
Python 2.7.5 (default, Nov 6 2016, 00:28:07) [GCC 4.8.5] on linux2 Type "help" for more information. >>>
Además del intérprete predeterminado, puede utilizar Intel Distribution for Python, una compilación optimizada específicamente con paquetes comúnmente utilizados en informática científica. Para obtener Intel Python, escriba:
module load intelpython/3.5
Ahora, escriba nuevamente $ python. Obtendrá un encabezado diferente:
Python 3.5.2 |Intel| (default, Oct 20 2016) Intel(R) Distribution for Python >>>
Para comprobar qué módulos están cargados, escriba
Para obtener una lista de todos los módulos disponibles, escriba
Detrás de escena, el comando module solo configura rutas, alias y otras variables de entorno. Los módulos se cargan únicamente para la sesión de shell actual. Puede solicitar módulos específicos en sus trabajos agregando las líneas “module load module_name” dentro del script SLURM, debajo de todas las líneas #SBATCH y antes de ejecutar su programa.
Solicitamos a todos los usuarios de la plataforma informática Kabré que incluyan un reconocimiento en los documentos (informes, artículos, informes técnicos) de su investigación. Ofrecemos aquí un ejemplo en español e inglés, respectivamente:
Esta investigación contó con el apoyo de una asignación computacional en la supercomputadora Kabré del Centro Nacional de Alta Tecnología de Costa Rica
This research was partially supported by a machine allocation on Kabré supercomputer at the Costa Rica National High Technology Center
