r9 - 14 Jun 2011 - 13:47:35 - Main.amorosYou are here: TWiki >  Atlas Web  >  GridComputing > GridHowTo

GridHowTo -Como usar el GRID

Se presupone que el usuario tiene un certificado y está dado de alta en una VO.
En la explicación siguiente se usará la VO ific como ejemplo.

Puede ser de utilidad el siguiente enlace con algunos casos de uso: http://www.eu-egee.org/fileadmin/documents/UseCases/Index.html

Modo 1

Veamos como usar el GRID con un ejemplo de GEANT4. Suponemos que hemos compilado el ejemplo de GEANT4 y que por tanto necesitamos los siguientes ficheros para su ejecución:

  • libCLHEP2.0.3.3.so (librería CLHEP)
  • libiAIDA.so (librería para análisis)
  • visualisationMacro.mac (macro de comandos GEANT4)
  • Hadrontherapy (el ejecutable)
Entramos en la Interfaz de Usuario y creamos el proxy:
>ssh ui04
 bash2.05b$ voms-proxy-init -voms ific

Necesitaremos tener ciertas variables de entorno correctamente iniciadas si ya no están por defecto (¡ojo! los valores siguientes son simplemente ilustrativos, consulta cuales deben ser las que tu uses de acuerdo a tu VO):

export LFC_HOME="/grid/ific/users/amoros"
export LFC_CATALOG_TYPE=lfc
 export LFC_HOST="lfc.ific.es"

Si no lo tenemos, nos creamos un directorio accesible desde el GRID:

bash2.05b$lfc-mkdir /grid/ific/users/amoros
Como veis aquí estamos usando el espacio de lustre. Si no os funciona recordad que primero tenéis que crear el proxy y tened en cuenta que los nombres de las máquinas y los directorios pueden sufrir cambios. No abuséis de este espacio y recordad que es un directorio temporal y puede ser limpiado cada cierto tiempo.

Podéis listar el contenido con

bash2.05b$lfc-ls   /grid/ific/users/amoros
Ahora pasamos los ficheros a este directorio:
bash2.05b$lcg-cr --vo ific -v -s SPACETOKEN -P users/amoros/HadronTherapy/libCLHEP2033 -l lfn:libCLHEP2.0.3.3.so -d srmv2.ific.uv.es file:libCLHEP2.03.3.so
 bash2.05b$lcg-cr --vo ific -v -s SPACETOKEN -P users/amoros/HadronTherapy/Hadrontherapy -l lfn:Hadrontherapy -d srmv2.ific.uv.es file:Hadrontherapy
 bash2.05b$lcg-cr --vo ific -v -s SPACETOKEN -P users/amoros/HadronTherapy/libiAIDA -l lfn:libiAIDA.so -d srmv2.ific.uv.es file:libiAIDA.so
 bash2.05b$lcg-cr --vo ific -v -s SPACETOKEN -P users/amoros/HadronTherapy/visMacro -l lfn:visualisationMacro.mac -d srmv2.ific.uv.es file:visualisationMacro.mac
 bash2.05b$lfc-ls /grid/ific/users/amoros/
libCLHEP2.03.3.so
 Hadrontherapy
 libiAIDA.so
 visualisationMacro.mac
Con el comando lcg-cr lo que hacemos es copiar y registrar en el catálogo el fichero. SPACETOKEN es el espacio de disco sobre el cual estarán situados los ficheros; depende del instituto y del experimento. Por ejemplo en ATLAS se podría usar "-s ATLASSCRATCHDISK". La opción -P nos indica uno de los nombres con los cuales se podrán recuperar los ficheros a través del GRID (lo que se llama "Destination SURL"). La opción -l lfn:<fichero> es un "Logical File Name", un nombre sencillo de identiifcación del fichero. La opción -d indica el servicio SRM con el cual operamos, el gestor encargado de estas operaciones (ya que puede ser que queramos operar con discos de otros institutos). Finalmente file:<filename>;

No he indicado la respuesta de los comando lcg-cr, que puede ser algo como:

-bash-3.00$ lcg-cr --vo atlas -v -s ATLASSCRATCHDISK -P users/amoros/Hadrontherapy/job.jdl -l lfn:jobTestToDelete -d srmv2.ific.uv.es file:job.jdl
 Using grid catalog type: lfc
 Using grid catalog : lfcatlas.pic.es
 SE type: SRMv2
 Destination SURL : srm://srmv2.ific.uv.es/lustre/ific.uv.es/grid/atlas/atlasscratchdisk/users/amoros/Hadrontherapy/job.jdl
 Source SRM Request Token: d9ab1a6e-b8a0-4393-84f9-c90378ab141b
 Source URL: file:/afs/ific.uv.es/user/a/amoros/HadronTherapy/job.jdl
 File size: 248
 VO name: atlas
 Destination specified: srmv2.ific.uv.es
 Destination URL for copy:
gsiftp://tux4u01.ific.uv.es:2811/lustre/ific.uv.es/grid/atlas/atlasscratchdisk/users/amoros/Hadrontherapy/job.jdl
# streams: 1
          248 bytes      0.29 KB/sec avg      0.29 KB/sec inst
 Transfer took 1030 ms
 Using LFN: lfn:/grid/atlas/users/amoros/jobTestToDelete
 Using GUID: guid:af0f6e92-3022-42f9-a030-041d38a447c5
 Registering LFN: /grid/atlas/users/amoros/jobTestToDelete (af0f6e92-3022-42f9-a030-041d38a447c5)
Registering SURL:
srm://srmv2.ific.uv.es/lustre/ific.uv.es/grid/atlas/atlasscratchdisk/users/amoros/Hadrontherapy/job.jdl
(af0f6e92-3022-42f9-a030-041d38a447c5)
guid:af0f6e92-3022-42f9-a030-041d38a447c5
-bash-3.00$

SURL, LFN y GUID son diferentes formas de llamar al mismo fichero en el GRID.

Ahora creamos un script que acceda a estos ficheros desde el GRID y que enviaremos con el fichero JDL de descripción del trabajo GRID.

hadrontherapySet.sh
#
# set of variables for the examples
#
echo "Start HT environment set"
DIRE=`pwd` 
# Geant4 Variables
# CLHEP
 lcg-cp srm://srmv2.ific.uv.es/lustre/ific.uv.es/grid/atlas/atlasscratchdisk/users/amoros/Hadrontherapy/libCLHEP2033 file://$DIRE/libCLHEP2.0.3.3.so
 echo $LD_LIBRARY_PATH
# AIDA
 lcg-cp srm://srmv2.ific.uv.es/lustre/ific.uv.es/grid/atlas/atlasscratchdisk/users/amoros/Hadrontherapy/libiAIDA file://$DIRE/libiAIDA.so
 lcg-cp srm://srmv2.ific.uv.es/lustre/ific.uv.es/grid/atlas/atlasscratchdisk/users/amoros/Hadrontherapy/Hadrontherapy file://$DIRE/Hadrontherapy 
export LD_LIBRARY_PATH=.:${LD_LIBRARY_PATH}
echo $LD_LIBRARY_PATH
 source /opt/exp_software/gfim/geant4/geant4.9.0.p02/env.sh
 echo "=========Start Macro====================="
chmod +x Hadrontherapy
./Hadrontherapy visualisationMacro.mac
 echo "=========End Macro======================="
echo "End HT"

Este script es el que pasaremos con el JDL al nodo grid por lo tanto, debemos saber donde estamos, de aquí la variable DIRE, y debemos copiar a ese nodo los ficheros que necesitamos que como ya los hemos copiado antes a un entorno GRID, son accesibles desde el nodo. Las demás líneas son de ajustes del entorno para GEANT4 (usaremos el GEANT4 instalado por el grupo de Imagen Médica: /opt/exp_software/gfim/geant4/geant4.9.0.p02/env.sh) y la ejecución una vez hemos cambiado los permisos.

Ahora tenemos que pasar este script al GRID. Lo hacemos con el jdl siguiente:

jobHT.jdl
Type = "job";
JobType = "normal";
Executable = "hadrontherapySet.sh";
StdOutput = "jobHT.out";
StdError = "jobHT.err";
InputSandbox = {
"hadrontherapySet.sh",
"visualisationMacro.mac"
};
OutputSandbox = {
"jobHT.err",
"jobHT.out",
"hadrontherapy.hbk"
};
Rank = other.GlueCEPolicyMaxRunningJobs other.GlueCEStateRunningJobs;
Requirements = true ;
virtualorganisation = "ific";

Aquí hemos incluido los ficheros hadrontherapySet.sh y visualisationMacro.mac como ficheros necesarios para la ejecución de los cuales hadrontherapySet.sh es el que debe correr en el nodo. Estos ficheros deben estar en el directorio desde el que se llama a la operación de edg-job-submit. Debes tener en cuenta el nombrar los ficheros que recojan los errores, e.g. jobHT.err, y la salida jobHT.out; estos ficheros se generarán en el nodo junto con el resultado de la ejecución, en este caso el fichero hadrontherapy.hbk.

Resumiendo: el envío de trabajos al GRID necesita de un fichero jdl que describe los parámetros para esa ejecución en el GRID; este jdl indica que en el nodo se debe ejecutar el script hadrontherapySet.sh que se encarga de copiar los ficheros/datos necesarios al nodo de ejecución y de ejecutar el binario que nos interesa Hadrontherapy que generará el fichero hadrontherapy.hbk como su resultado. También tendremos los ficheros jobHT.err y jobHT.out como resultado de la ejecución en GRID.

Enviamos el trabajo al GRID:

bash2.05b$edg-job-submit -r ce01.ific.uv.es:2119/job-manager-pbs-short -o listId jobHT.jdl
Aquí hemos preferido elegir un gestor de nodos (CE) del IFIC (ce01.ific.uv.es:2119/job-manager-pbs-short), si no fuese así el trabajo podría ir a cualquier otro instituto y no se ejecutaría (recordemos que estamos usando GEANT4 con parámetros locales). Además le pedimos que nos guarde el identificador del trabajo en el fichero listId. Así podemos ir comprobando la situación del trabajo con la instrucción
bash2.05b$edg-job-status -i listId

Cuando hayamos comprbado que el trabajo ha finalizado (Status: Done), podemos obtener el resultado con

bash2.05b$edg-job-get-output -i listId --dir Results
donde le hemos indicado que los guarde en el directorio local Results. Allí encontraremos los jobHT.err, jobHT.out y el hadrontherapy.hbk. Si no ha habido ningún problema el jobHT.err debe estar vacío y el jobHT.out tendrá la salida tal como aparece en una ejecución interactiva.

Finalmente podemos continuar con nuestro trabajo (en la siguiente línea pasamos los datos de formato hbk a root).

 
bash2.05b$.../bin/h2root Results/amoros_UCpoZuKBcO1BxPzn9ceXfQ/hadrontherapy.hbk

Modo 2

Aquí os mostramos otro proceso de ejecución de trabajos GRID . Hemos separado el proceso en tres partes: preProcesado, procesado y postProcesado usando para ello tres scripts diferentes.

Empecemos con el preProcess.sh, la explicación después:

preProcess.sh
##### GLOBAL VARIABLES #####
# set the environment
 export LCG_CATALOG_TYPE=lfc
 export LFC_HOST=lfc.ific.es
###########################

##### USER VARIABLES #####
# modify to your option
 export TMPDIR=/grid/ific/amoros
# the input files should have been tgz previously
 export FILEINPUT=inputFile.tar.gz
 export RESULTTGZ=resultFile.tgz
###########################

##### TO BE DONE FROM THE USER INTERFACE -- PREPROCESSING #####

# create a temp directory
 lfc-mkdir -p $TMPDIR
 lfc-chmod 744 $TMPDIR

# copy and register the input files
# modify accordintly from your local directory to the directory previously
# created and accesible from the GRID
# VO_ATLAS_DEFAULT_SE is taken by default for vo ATLAS
# here is shown as example for other SE
# (The FILEINPUT is in the current directory)
lcg-cr -v --vo atlas -d $VO_ATLAS_DEFAULT_SE -l lfn:$TMPDIR/$FILEINPUT  file://`pwd`/$FILEINPUT
#################################################
Recordemos que antes de todo esto debemos haber inicado un voms proxy.

NOTA: ¡comprobad las correctas varables de entorno!

Aquí se usa el catálogo; en pocas palabras esta herramienta asocia ficheros accesibles desde el grid con diferentes notaciones de éstos así como con replicas y con los SE (Storage Elements), los almacenamientos físicos de éstos. Para poder usarlo necesitamos fijar las variables de entorno LCG_CATALOG_TYPE, que indica el tipo de catálogo, y LFC_HOST, que indica que catálogo usamos; en este ejemplo, y siempre con VO ific estamos usando el catálogo ficticio lfc.ific.es.

FILEINPUT es un tar.gz con los ficheros necesarios para la ejecución (aquellos que en el Modo 1 copiamos con globus-url-copy), y RESULTTGZ es un tar.gz con con los ficheros resultado de la ejecución (*.err, *.out, ...). La variable TMPDIR=/grid/ific/amoros no es arbitraria, en general sigue la notación /grid/VO/...; la usaremos para copiar los ficheros al GRID y darlos de alta en el catálogo.

Los primeros comandos lfc crean un directorio en el catálogo y le cambian los permisos. El comando lcg-cr copia el fichero FILEINPUT y lo registra en el catálogo. Observad que hemos indicado la VO y además el SE donde queremos que se copie físicamente; en este caso la opción -d $VO_IFIC_DEFAULT_SE no es necesaria ya que por defecto lo copia en la variable $VO_IFIC_DEFAULT_SE de la Interfaz de Usuario, pero os muestra como hacerlo para cualquier otro SE. La opción -l lfn:$TMPDIR/$FILEINPUT indica el lfn (Logical File Name), el nombre con que asociar el fichero en el catálogo (es un nombre de fácil lectura); hay otras formas de buscar/llamar al fichero con el catálago pero con notación menos legible. Por último, file://`pwd`/$FILEINPUT es claramente nuestro fichero en el directorio local.

Desde el interfaz de usuario solo tenemos que ejecutar

./preProcess.sh

Pasemos ahora a la parte de procesado que consiste en enviar un jdl con un script. El jdl es el siguiente

jobHT.jdl
Type = "job";
JobType = "normal";
Executable = "HT.sh";
StdOutput = "HT.out";
StdError = "HT.err";
Environment = {"LFC_HOST=lfc.ific.es"};
InputSandbox = {
        "HT.sh",
        "visualisationMacro.mac"
        };
OutputSandbox = {
        "HT.err",
        "HT.out",
        "Hadrontherapy.hbk"
        };
Requirements = other.GlueCEUniqueID =="ce01.ific.uv.es:2119/jobmanager-pbs-short";
virtualorganisation = "ific";

Es muy parecido al anterior, solo hemos tenido en cuenta la variable de entorno del catálogo y añadido directamente que se ejecute en un nodo del IFIC (esto es reasignable en el momento del envío del trabajo al GRID).

El script que enviamos para la ejecución en el nodo es el siguiente

HT.sh
#!/bin/sh
###########################
##### TO BE DONE FROM THE GRID NODE -- PROCESSING #####

export TMPDIR=/grid/ific/amoros
 export FILEINPUT=inputFile.tar.gz
 export RESULTTGZ=resultFile.tgz
 export DIRE=`pwd`

# copy the input file from the SE to the Grid Node
 lcg-cp --vo ific lfn:$TMPDIR/$FILEINPUT file://$DIRE/$FILEINPUT

tar xzvf $FILEINPUT
 rm $FILEINPUT
# execute the file in this case the name is Hadrontherapy
 export LD_LIBRARY_PATH=.:${LD_LIBRARY_PATH}
mv Hadrontherapy.so Hadrontherapy
 chmod +x Hadrontherapy
# next line has dependency on the software installed
# and accesible within the GRID and only for IFIC

source /opt/exp_software/gfim/geant4/geant4.9.0.p02/env.sh
./Hadrontherapy visualisationMacro.mac

# lets store the results on the SE
 tar czvf $RESULTTGZ *
lcg-cr --vo ific -l lfn:$TMPDIR/$RESULTTGZ file://`pwd`/$RESULTTGZ
#
echo "Done!"

#################################################

Aunque explicado en el script, observad que ejecuta instrucciones del catálogo para copiar ficheros hacia el nodo y desde el nodo y que la última línea copia y registra el resultado del nodo en el catálogo.

Ahora solo queda enviar el trabajo:

edg-job-submit -r ce01.ific.uv.es:2119/job-manager-pbs-short -o listId jobHT.jdl

una vez el trabajo ha acabado nos queda el postProcesado

./postProcess.sh

postProcess.sh
##### GLOBAL VARIABLES #####
# set the environment
 export LCG_CATALOG_TYPE=lfc
 export LFC_HOST=lfc.ific.es
###########################

##### USER VARIABLES #####
# modify to your option
 export TMPDIR=/grid/ific/amoros
# the input files should have been tgz previously
 export FILEINPUT=inputFile.tar.gz
 export RESULTTGZ=resultFile.tgz
###########################
#################################################
##### POSTPROCESSING #####

lcg-cp --vo ific lfn:$TMPDIR/$RESULTTGZ file://$HOME/$RESULTTGZ
 lcg-del --vo ific -a lfn:/grid/ific/amoros/resultFile.tgz

#################################################

que copia el fichero de salida desde el GRID al directorio local y lo borra (la opción -a indica borrar también las réplicas). Este modo de actuar permite usar ficheros accesibles desde cualquier nodo en el GRID una vez decimos que catálogo usar, por otra parte tampoco queremos usar indebidamente estas herramientas así que borrad siempre los ficheros si no los vais a usar de nuevo. Tened cuidado que una vez está copiado y dado de alta en el catálogo si queréis actualizarlo debéis borrarlo primero y después copiar y registrar de nuevo, u os encontréis usando ficheros antiguos.

-- Main.amoros - 31 Mar 2009

Edit | WYSIWYG | Attach | PDF | Raw View | Backlinks: Web, All Webs | History: r9 < r8 < r7 < r6 < r5 | More topic actions
 
Powered by TWiki
This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback