Changes between Version 1 and Version 2 of R


Ignore:
Timestamp:
Jan 16, 2018 11:53:31 AM (4 years ago)
Author:
gutierjm
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • R

    v1 v2  
    1 El acceso al cluster se realiza por `ssh` a '''mar.macc.unican.es''' y los trabajos en Matlab hay que lanzarlos utilizando {{{enviamatlab.sh}}}, que se encarga de mandar el trabajo a la cola `estadistica` (que es la cola por defecto para los trabajos de Matlab; esta cola puede ejecutar hasta 24 trabajos a la vez: nodos WN10, WN11 y WN12, con 8 procesadores cada uno). En la versión 2009  (que es la que usa el cluster actualmente) Matlab puede consumir más CPU de la asignada si no se usa correctamente. Por tanto, sólo debe utilizarse {{{enviamatlab.sh}}} para ejecutar trabajos matlab en el cluster, salvo que se haga en sesiones interactivas con la ayuda de Antonio o Sixto (en este caso hay que habilitar una opción especial de la sesión 'help maxNumCompThreads', que no es trivial utilizar).
     1El acceso al cluster se realiza por `ssh` a '''ui.macc.unican.es''' y los trabajos en R hay que lanzarlos utilizando el comando en la terminal {{{qsub rutadelfichero.pbs}}}, que se encarga de mandar el trabajo a la cola especificada. Un ejemplo de como logearnos y mandar un script de R sería el siguiente:
     2{{{
     3ssh bmedina@ui.macc.unican.es
     4bmedina@ui.macc.unican.es's password:
     5Last login: Tue Jan 16 09:45:53 2018 from ifcapc2.ifca.unican.es
     6[bmedina@ui ~]$ qsub /oceano/gmeteo/WORK/bmedina/enviaR.pbs
     7756142.encina
     8}}}
     9En este caso el script ya estaría enviado con el ID 756142.encina. El archivo enviaR.qsub contiene información como: a qué cola enviar el script, la ruta del script, el número de nodos... Concretamente la pinta que tiene se puede ver abajo:
     10{{{
     11#!/bin/bash
     12### Job name
     13###PBS -N cfs:region
     14### Max run time
     15###PBS -l walltime=72:00:00
     16### Queue name
     17#PBS -q bamd
     18### Number of nodes and processors per node
     19#PBS -l nodes=1:ppn=1
     20#PBS -l mem=2Gb
     21#PBS -M bmedina@ifca.unican.es
     22#PBS -m bea
     23###PBS -W 506119
    224
    3 El script {{{enviamatlab.sh}}} se ha añadido en un directorio del cluster ({{{/software/MachineIndependent/bin/}}}) accesible por todos los usuarios. Por tanto, si os logueais en mar y poneis '{{{which enviamatlab.sh}}}' (es decir, busca la ruta donde está '{{{enviamatlab.sh}}}') todos deberíais ver (sino es así, [/newticket?type=support&component=Cluster&cc=antonio,sixto hablar con Antonio o Sixto]):
     25WORKDIR=/oceano/gmeteo/WORK/bmedina/
     26cd $WORKDIR
    427
    5  {{{
    6 [gutierjm@mar ~]$ which enviamatlab.sh
    7 /software/meteo/bin/enviamatlab.sh
     28R -f ./pruebaR.R >& ./pruebaR.${PBS_JOBID}.log
    829}}}
    930
    10 Para ejecutar cualquier programa de Matlab hay que llamar a este script desde el directorio donde tengáis el {{{script.m}}} que se quiera ejecutar (en el ejemplo de abajo, en el home "~"):
     31En este caso el script de R que mando se llama pruebaR.R que está situado en el directorio WORKDIR = /oceano/gmeteo/WORK/bmedina/. Parámetros como -q, -l mem=2Gb o -M sirven para especificar la cola a la que se manda el script o la memoria requerida o la cuenta de correo asociada al script, respectivamente.
    1132
     33De este modo, se generarán en la carpeta dos ficheros:
     34 * enviaR.pbs.e756142: este fichero lo genera el enviamatlab y será el que arranque matlab y ejecute el  {{{script.m}}}. El final del nombre es la fecha de ejecución.
     35 * ./pruebaR.${PBS_JOBID}.log: en este fichero se recoge la salida por pantalla de R.
     36
     37Al final de la ejecución del  {{{script.R}}} se genera un nuevo fichero 'enviaR.pbs.o756142', donde el número indica el identificador del job ejecutado.
     38
     39Hay que tener en cuenta que dentro del script.R probablemente llamemos a librerías que no estén precargadas por defecto en la versión de R del cluster. En ese caso tenemos que previamente haberlas instalado en un directorio personal y para cargarlas dirigir a R hacia ese directorio personal. Para ilustrar esta situación voy a iniciar una sesión interactiva de R. Para iniciar una sesión interactiva introducimos el siguiente comando:
    1240{{{
    13 [gutierjm@mar ~]$ enviamatlab.sh script.m
     41[bmedina@ui ~]$ qsub -I -q bamd
     42qsub: waiting for job 756144.encina to start
     43qsub: job 756144.encina ready
     44[bmedina@wn037 ~]$ R
    1445}}}
    1546
    16 De este modo, se generarán en la carpeta dos ficheros:
    17  * matlabqsub.20091123T105716: este fichero lo genera el enviamatlab y será el que arranque matlab y ejecute el  {{{script.m}}}. El final del nombre es la fecha de ejecución.
    18  * script.20091123T105716.log: en este fichero se recoge la salida por pantalla de Matlab.
     47Ahora que ya estoy en R en modo interactivo, puedo instalar y cargar librerías nuevas en mi directorio personal:
     48{{{
     49install.packages(“glmnet”, lib = “/vols/abedul/meteo/bmedina/R/mylibs”)
     50library(“glmnet”, lib.loc = “/vols/abedul/meteo/bmedina/R/mylibs”)
     51}}}
     52En este caso estoy instalando el paquete "glmnet". De esta manera en nuestro script de R, cada vez que llamemos a una librería que hemos instalado en nuestro directorio personal habrá que introducir el comando anterior.
    1953
    20 Al final de la ejecución del  {{{script.m}}} se genera un nuevo fichero 'script.o114037', donde el número indica el identificador del job ejecutado.
    21 
    22 Una vez ejecutamos la función nos aparecerá por pantalla una serie de mensajes con la información del trabajo enviado.
     54En nuestro caso podemos querer instalar las librerías transformeR, loadeR, downscaleR o visualizeR que están en github. Para ello primero hay que instalar el paquete devtools:
    2355{{{
    24 [gutierjm@mar ~]$ enviamatlab.sh script.m
    25 + mfile=script
    26 + mlscript=matlabqsub.20111005T182930
    27 + mfilepath=/oceano/gmeteo/users/gutierjm/.
    28 Scientific Linux CERN SLC release 4.6 (Beryllium)
    29 482820.ce01.macc.unican.es
    30 }}}
    31  En la última línea se muestra el identificador del trabajo ('''!JobId''', en el ejemplo '''482820''') seguido del nombre de la máquina {{{ce01.macc.unican.es}}}; esta máquina es el submitting machine, pero no es la que ejecuta el job; para monitorizar los jobs ver la sección de monitorización; por ejemplo, los trabajos que están corriendo en la cola 'estadística' se pueden ver con:
    32 {{{
    33 gutierjm@mar dynamicReservoir_Basic]$ qstat -n1 | grep estad
    34 482820.ce01.macc.uni gutierjm estadist simulation  29340     1  --  750mb   --  R   --    wn011/0
     56install.packages(“devtools”, lib = “/vols/abedul/meteo/bmedina/R/mylibs”)
     57library(“devtools”, lib.loc = “/vols/abedul/meteo/bmedina/R/mylibs”)
    3558}}}
    3659
    37 Por defecto, {{{enviamatlab.m}}} envía los trabajos a '''un sólo procesador (ppn) con un límite de 750mb de memoria (mem)'''. Si el job consume más memoria, la cola lo interrumpe. Si se necesita correr trabajos que consuman más memoria hay una opción para reservar el doble de memoria:
     60Una vez que está cargado devtools utilizar el siguiente comando para descargar transformeR (aunque el mismo procedimiento seguiría para instalar el resto de paquetes de climate4R)
    3861{{{
    39 [gutierjm@mar ~]$  enviamatlab.sh  test.m -l mem=1500mb -l nodes=1:ppn=2
    40 }}}
    41 o cuatro veces más (hasta 3GB de memoria). Si necesitáis ejecutar jobs que requieran más memoria, [/newticket?type=support&component=Cluster&cc=antonio,sixto hablar con Antonio o Sixto].
    42 {{{
    43 [gutierjm@mar ~]$  enviamatlab.sh  test.m -l mem=3000mb -l nodes=1:ppn=4
     62withr::with_libpaths(new = "~/R/myRlibs", devtools::install_github("SantanderMetGroup/transformeR"))
    4463}}}
    4564
    46 Aunque la configuración inicial del script enviamatlab.sh remite los jobs a la cola estadistica, al igual que para el caso de la memoria, existe un flag o modificador que nos permite seleccionar otras colas que puedan disponer de recursos disponibles en algún momento.
     65En el caso de querer un transformeR de una rama que no sea MASTER habría que especificarlo de la siguiente manera:
    4766{{{
    48 [gutierjm@mar ~]$  enviamatlab.sh  test.m -q amd
    49 }}}
    50 En el ejemplo, se modifica la cola enviando el job a la cola amd, en lugar de a estadistica. Aunque existen numerosas colas, en la medida de lo posible los trabajos asociados a la cola estadistica deben derivarse a esta cola. En los casos en que ambos recursos, los de las colas estadistica y amd, no sea suficientes, ponerse en contacto con Jesús (Chus) para ver qué cola podría usarse de las habitualmente utilizadas por los ASNA para realizar las simulaciones y lanzar el operativo del WRF.
    51 
    52 == Configuración de correo para recepción de mensajes (job terminado, etc.) ==
    53 '''__NOTA__: '''La primera (y '''sólo la primera''') vez que queramos enviar un trabajo de Matlab al cluster debemos editar el fichero .bashrc de nuestro home de oceano, incluyendo al final del mismo las líneas:
    54 
    55 {{{
    56 export EMAIL=tuemail[at]unican.es
    57 source /software/etc/bashrc
    58 }}}
    59 El fichero final debería ser tal que así (se ha cogido como ejemplo el {{{.bashrc}}} del home de Rodri):
    60 
    61    {{{
    62 export EMAIL="rmanzanas@ifca.unican.es"
    63 source /software/etc/bashrc
     67withr::with_libpaths(new = "~/R/myRlibs", devtools::install_github("SantanderMetGroup/transformeR@jorge-devel"))
    6468}}}
    6569
    66 Para ello, basta hacer:
    67    {{{
    68 [gutierjm@mar cluster]$ vi .bashrc
    69 }}}
    70 
    71 editar el fichero justo al final "{{{G}}}", incluir "{{{i}}}" las dos líneas anteriores. Luego presionar "{{{escape}}}" y escribir "{{{:x}}}" (comando para salir guardando) y presionar "{{{enter}}}".
    72 
    73 El que no sepa, que me pregute a mi o a Sixto, pero no tengáis copias del script 'enviamatlab' en local porque estaréis generando errores para el resto de usuarios.
    74 
     70De esta manera, el transformeR que se está instalando es el que se encuentra en la rama de transformeR que se llama jorge-devel.
    7571== Observaciones ==
    7672En este apartado podéis escribir las observaciones, dificultades o aclaraciones que encontréis o creáis necesarias a la hora de usar el cluster.
    7773
    78  * Es importante tener en cuenta que el Matlab en el que se arranca el proceso no tiene porque tener inicializada !MeteoLab y que, por lo tanto, debemos añadir al script una orden para que la inicialice. Bastaría con añadir al inicio del script la ruta de acceso al !MeteoLab que utilicemos (es recomendable tenerla siempre actualizada en nuestro home), ejecutar el programa init (que arranca la toolbox) y volver al directorio en el que queremos trabajar. De este modo podremos trabajar con todas las funciones de !MeteoLab.
    79  * A la hora de marcar las rutas en Linux debemos usar los elementos propios de este sistema. En particular debemos usar la '/' en lugar de la '\' usada habitualmente en Windows. Es importante crear los scripts de modo que puedan ser entendidos en Linux. Para consultar dudas podéis [/newticket?type=support&component=Cluster&cc=antonio,sixto,chus preguntar a Chus, Antonio, Sixto, etc].
    80  * Siempre que tengamos algún problema con la sintaxis de un comando o no sepamos exactamente qué es lo que hace podemos acudir a su manual. Por ejemplo, en el caso del comando qstat (monitorización de trabajos) bastaría con teclear man qstat.
    81  * Si teneis algún problema, y necesitais la imperiosa necesidad de enviar un correo, es mejor que useis el sistema de tickets que tenemos, en lugar del correo, ya que así las conversaciones se guardan y pueden servir para el futuro. [/newticket?type=support&component=Cluster&cc=antonio,sixto Pincha aquí para mandar un ticket, o guarda este enlace en tus 'Favoritos' para futuras ocasiones]