Dra. Isabel Campos Plasencia Científico Titular del CSIC

1 Middleware Avanzado Soporte a Computación Paralela MPI ...
Author: Valentín Chávez Botella
0 downloads 1 Views

1 Middleware Avanzado Soporte a Computación Paralela MPI Soporte a Interactividad en GridsDra. Isabel Campos Plasencia Científico Titular del CSIC Instituto de Física de Cantabria

2 Temas a tratar Conceptos básicos de computación Grid ✔Middleware de gLite ✔ Introducción y estado del arte La necesidad de ir más allá de glite Soporte a MPI en Grids Intra-cluster MPI Inter-cluster MPI Interactividad glogin / i2glogin Ejercicios prácticos

3 Algunas referencias gLite: Desarrollo de middleware avanzado sobre glite:

4 Soporte a MPI Aspectos Generales sobre MPI y computación paralela enSoporte a MPI en el Grid Ejemplos

5 Ejecución batch monoproceso en GridsJob Inp. files User Interface Grid Scheduler Global Services Middleware Middleware Resource Resource Grids & e-Science UIMP. Santander

6 Grids & e-Science 2009. UIMP. SantanderEjecución batch monoproceso en Grids Job Inp. files User Interface Grid Scheduler Global Services Middleware Middleware Resource Resource Grids & e-Science UIMP. Santander

7 Ejecución batch monoproceso en GridsUser Interface Grid Scheduler Global Services Middleware Middleware Resource Resource Job Inp. files Grids & e-Science UIMP. Santander

8 Ejecución batch monoproceso en GridsOutput files User Interface Grid Scheduler Global Services Middleware Middleware Resource Resource Grids & e-Science UIMP. Santander

9 Grids & e-Science 2009. UIMP. SantanderPero… Los usuarios necesitan más capacidad de computación Usando más de un core por ejecución Usando más de un site por ejecución incluso Ejecución paralela de aplicaciones Los trabajos paralelos usan más de un core ¿Cómo usarlos de manera eficiente? Shared memory: todos los cores acceden a un área común de la memoria para acceder a los datos Message Passing: los cores se intercambian mensajes con los datos Grids & e-Science UIMP. Santander

10 Grids & e-Science 2009. UIMP. SantanderTrabajos paralelos Los trabajos paralelos usan más de un core ¿Cómo usarlos de manera eficiente? Shared memory: todos los cores acceden a un área común de la memoria para acceder a los datos Message Passing: los cores se intercambian mensajes con los datos Cómo especificar cores/procesador en los procesadores multicore Ejecuciones mixtas MPI/OpenMP Grids & e-Science UIMP. Santander

11 Introducción y ContextoHigh throughput computing (HTC) Se utilizan muchos recursos computacionales durante largos periodos de tiempo Acceso a mucho tiempo de cpu promedio durante largos periodos de tiempo (meses) Optimizar el número de trabajos ejecutados por unidad de tiempo. Computación en modo granja, o procesos independientes El Grid se diseñó con la idea de ser una fuente de HTC High performance computing (HPC) Disponer simultaneamente de una gran cantidad de recursos computacionales Lo importante es que la aplicación se ejecute en el menor tiempo posible. Para ello es necesario que los procesadores individuales que participan en el cálculo cooperen ¿Cómo hacer que los procesadores cooperen?

12 Computación paralela Ejecución simultánea de una misma tareaDividida y adaptada al entorno de computación Obtener los resultados de una forma más rápida

13 ¿Cómo hacer que los procesadores cooperen?En principio dependerá de la arquitectura del sistema y del procesador Cada fabricante de hardware tenía su propia forma Librerías específicas Lenguajes específicos: Apesse, Occam, etc… Ventajas Se obtiene el mejor rendimiento posible de cada plataforma Inconvenientes No es portable. Repetir el mismo esfuerzo de programación para cada arquitectura. A veces era necesario un conocimiento profundo del hardware de la máquina

14 Ejemplo INMOS Máquinas basadas en transputers: OccamWHILE next <> EOF SEQ x := next PAR in ? next out ! x * x CHAN OF [36]BYTE message CHAN OF COMPLEX32 imp CHAN OF INT::[]BYTE link message ! “Hello, World!” link ! len::[buffer FROM start]

15 Ejemplo ALENIA TAO para las máquinas APEen DESY

16 Ejemplo ALENIA TAO para las máquinas APE

17 Message Passing Interface (MPI) ForumEn 1992 se creo el MPI Forum para tratar crear una prescripción independiente del sistema y del procesador Ver información en Participan los más representativos fabricantes de hardware (IBM, Intel, HP, AMD,…) junto con investigadores en ciencia computacional de todo el mundo Objetivos del MPI Forum Definir un interfaz de programación (API) uniforme Enfocado a conseguir una comunicación entre procesos lo más eficiente posible Asumiendo que el interfaz de comunicación hardware es fiable Permita la programación en C y en Fortran de forma cómoda para el usuario

18 Evolución del trabajo del MPI Forum1994 release de MPI 1.0 Release inicial 1995 release of MPI 1.1 1997 Release de MPI 1.2 Release de MPI 2.0 Futuro Hacia el MPI 3.0 MPI - 1 MPI - 2 Comunicaciones Point-to-point Operaciones Collectiva Topologías Manejo de las tipologías de datos Input/Output de ficheros Comunicaciones one-sided Extensión de macros para C++ y F90

19 ¿Qué es MPI ? Es la especificación de un interfaz de programación (API): Define la forma del Interfaz y su semántica MPI es vendor neutral y (de facto) Standard MPI lo define el MPI-Forum MPI especifica la forma de los interfaces para C, C++ y Fortran 70/90 MPI no está acabado. Hay un progreso continuado hacia nuevas versiones.

20 ¿Qué NO es MPI ? MPI no es Magia“He instalado XXX-MPI in 4 de mis maquinas y mi aplicación no se ejecuta más rápido !?!” (pregunta típica) MPI no es una implementación de nada, es sólo un estándar OpenMPI, MPICH, LAMMPI son implementaciones del estándar MPI MPI no es el Santo Grial Hay muchos problemas cuya solución no se adecúa al paradigma de paso de mensajes entre procesos Es muy fácil escribir una aplicación MPI cuyo rendimiento sea peor que su versión secuencial MPI funciona bien en sistemas de memoria compartida pero, tal vez Open MP es mejor solución, dependiendo del problema

21 Conceptos básicos Todas las funciones/símbolos MPI functions/symbols contienen el prefijo “MPI_” Para usar MPI en los programa en C hay que incluir mpi.h Para usar MPI en Fortran hay que incluir mpif.h La compilación y linkado es dependiente de la implementación Las implementaciones más populares de MPI ofrecen al usuario compiladores preparados mpicc, mpicxx, mpiCC, mpif70, .... Cargan automaticamente los flags y las librerías necesarias Tipicamente en un Makefile se sustituye el nombre del compilador “mpicc” en lugar de “gcc”

22 MPI: Grupos y procesos En el paradigma MPI la ejecución de un binario (ej. una aplicación) se divide en N partes, denominadas procesos Los procesos a su vez están agrupados en grupos Cada proceso dentro un grupo está identificado por un número, el rango (rank) del proceso Rank = 0,…,(N-1)

23 MPI: Grupos y Procesos Ejemplo: Distribución de 8 procesosen 4 procesadores Notar la diferencia entre Proceso y Procesador Un mismo procesador puede ejecutar varios procesos Cada proceso puede en principio ejecutar un binario diferente MIMD (multiple instruction multiple data) En general es siempre el mismo binario el que ejecuta código diferente basándose en su rango El caso más común es que todos los procesos ejecuten el mismo binario CPU1 CPU2 CPU3 CPU4 mpirun –np 8 –machinefile hostnames.txt ./miprog Genera 8 procesos elementales Distribuídos entre 4 CPUs

24 Grids y e-Ciencia 2008, IFIC ValenciaMPI: Procesos Notar la diferencia entre Proceso y Procesador Un mismo procesador puede ejecutar varios procesos Cada proceso puede en principio ejecutar un binario diferente MIMD (multiple instruction multiple data) En general es siempre el mismo binario el que ejecuta código diferente basándose en su rango El caso más común es que todos los procesos ejecuten el mismo binario Ejemplo: Distribución de 8 procesos en 4 procesadores Master 1 2 3 4 5 6 7 Grids y e-Ciencia 2008, IFIC Valencia

25 MPI: Comunicadores Un comunicador es el objeto que sirve para comunicar (~ socket) Un grupo Un contexto de comunicación Los contextos son únicos Dividen toda la comunicación MPI en espacios disjuntos

26 MPI: Comunicadores predefinidosMPI_COMM_WORLD Envuelve a todos los procesos de la ejecución MPI MPI_COMM_SELF Envuelve solo a los procesos que están en un determinado contexto MPI_COMM_NULL Ningún proceso El usuario puede crear sus propios comunicadores de acuerdo a las necesidades del programa Funciones importantes MPI_comm_size Devuelve el número de procesos en el grupo MPI_comm_rank Devuelve el rango del proceso que hace la llamada MPI_comm_free Elimina un comunicador

27 MPI: Hello World

28 MPI: Hello World Comentarios Inicializa el sistema MPIMPI_Init Inicializa el sistema MPI Es necesario llamarlo al principio del programa, antes de invocar ninguna otra función MPI MPI_Finalize Deshabilita el sistema MPI Tras esta llamada no se puede llamar a MPI Las funciones MPI devuelven siempre un código de error que se puede chequear

29 Tipos de comunicación: punto-a-puntoIntercambio de datos entre dos procesos Se produce mediante el envío de un mensaje El proceso fuente envía el mensaje El proceso receptor tiene que recibirlo (activamente) int MPI_Send(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm); int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status )

30 Tipos de comunicación: punto-a-punto*buf: puntero a los datos a enviar count: número de elementos a enviar datatype: tipo de dato dest: Identificación del proceso destino tag: etiqueta de la comunicación comm: Identificación del comunicador Envío: MPI_Send() *buf: puntero para la recepción de los datos count: número de elementos datatype: tipo de dato source: Identificación del proceso origen tag: etiqueta de la comunicación comm: Identificación del comunicador *status: puntero para acceso a información sobre mensaje Recepción: MPI_Recv()

31 Tipos de comunicación: ColectivasMPI_Bcast() Un proceso distribuye un mismo dato al resto de los procesos MPI_Scather() Un proceso distribuye datos al resto de los procesos particionando MPI_Gather() Un proceso recoge datos de varios procesos

32 Tipos de comunicación: ColectivasEjemplos de funciones empleadas en operaciones colectivas: MPI_MAX MPI_MIN MPI_SUM MPI_PROD MPI_LAND logical AND integer logical MPI_BAND bit-wise AND integer, MPI_BYTE integer, MPI_BYTE MPI_LOR logical OR integer logical MPI_BOR bit-wise OR integer MPI_Reduce Realiza una operación matemática distribuida y se devuelve el resultado al root de la operación El programador puede añadir sus propias operaciones

33 Ejemplo MPI_Bcast Char msg[100]; if(my_rank==source) {sprintf(msg,"\n Esto es un mensaje del proceso %d a todos los demás",source); MPI_Bcast(msg,100,MPI_CHAR,source,MPI_COMM_WORLD); printf("\n Mensaje enviado a todos desde %d",source); } else printf("\n Mensaje recibido en %d desde %d",my_rank,source); printf(msg);

34 Ejemplo MPI_Reduce int value; int result; value = my_rank;MPI_Reduce(&value,&result,1,MPI_INT,MPI_SUM,source,MPI_COMM_WORLD); if(my_rank==source) { printf("\n Resultado de la suma colectiva %d", result); }

35 Sistemas, Hardware y MPI

36 Configuración típica de un clusterNodos secuenciales Nodos Paralelos Switch Switch Red Interna Red exterior

37 Importancia de la intranet en el clusterDurante el cálculo necesitan intercambiar datos a través de la red de procesadores que conforma el cluster ¿ Cuánto y con qué Frecuencia necesita el programa comunicar ? La respuesta fija los parametros de la RED que necesitamos Cantidad Frecuencia MB/s ? Ancho de Banda Latencia

38 Alternativas hardware para MPIGigabit Ethernet (GE) Latencias del orden de los 100 microseg. Ancho de Banda en el rango MB/s Precio: 80 € /puerto + Switch ( > €) Myrinet 2000 Latencias entorno a 10 microseg. Ancho de Banda entorno a 300 MB/s Precio: 1200 € por tarjeta + Switch (~ 12,000 / 32 puertos) Infiniband Latencias entorno a 5 microseg. Ancho de Banda entorno a 1GB/s Precio: ~ 10,000 € / 24 puertos

39 Red Myrinet Componentes de una red Myrinet (Myrinet 2000)Cada nodo tiene una tarjeta PCI-X con una o dos conexiones (490MB/s y 900 MB/s respectivamente) Las tarjetas se conectan con un cable Myrinet (fibra óptica) a un switch multi-puerto (hasta 32 puertos por switch). Para redes mayores: combinaciones de switches (Myrinet Network in a box) Software Myrinet (libre) Detecta la red Myrinet presente de manera automática (no hay que configurar el switch) GM: software de paso de mensajes de bajo nivel sobre el que funcionan aplicaciones de alto nivel como MPI Myrinet Express (MX) Conectado a un slot PCI-Express

40 Red Myrinet

41 MareNostrum: Myrinet ExpressGrids & e-Science UIMP. Santander

42 Red Infiniband Tecnología que trata de dar respuesta a las necesidades de I/O Compartidas en clusters de ordenadores conectados a Storage Area Networks  desconectar el I/O al exterior, del resto de procesos de la máquina

43 Arquitectura de Infiniband

44 Infiniband Pentium 4 Pentium 4 Pentium 4 System Bus @ 25Gb/s @ 25Gb/sSystem Logic System Logic System Logic Hub Link @ 8Gb/s PCI Express @ 20Gb/s PCI Express @ 80 Gb/s South Bridge South Bridge I/O Bridge Con HCA Slot PCI-X @ 8Gb/s PCI Express @ 20Gb/s HCA HCA 12X IB @ 60Gb/s 4X IB @ 20Gb/s 4X IB @ 20Gb/s Switch IB Switch IB Switch IB

45 Integración de Infiniband

46 Ejemplo de Hardware Infiniband

47 Hardware Infiniband

48 Comparación de latencias entre Infiniband y Gigabit Ethernet

49 Comparación de Anchura de Banda entre Infiniband y Gigabit Ethernet

50 Puntos importantes Los ordenadores paralelos dedicados a un problema específico han pasado a la historia La existencia de un hardware de interconexión asequible y de MPI como protocolo de comunicación independiente del Hardware ha simplificado la situación Clusters Linux del orden de 1000 cores con tecnología de intranet tipo infiniband existen en muchos centros de investigación de tamaño medio y grande Las aplicaciones MPI se pueden catalogar según la intensidad del uso del switch de intranet. Hay dos límites: Aplicaciones MPI modo granja (procesos practicamente desacoplados) Aplicaciones MPI intensivas en comunicación

51 Grids & e-Science 2009. UIMP. SantanderMPI en el GRID Grids & e-Science UIMP. Santander

52 Soporte a MPI en el Grid ¿Porqué?Muchas áreas de aplicaciones requieren soporte a MPI Ciencias de la tierra, fusion, astrofísica, Química Computacional… Se pueden obtener resultados significativos usando 10s-100s of CPUs Muchos clusters de hecho están listos para usar MPI En modo local mediante envío directo Sistemas de ficheros compartidos, intranets de alto rendimiento Es necesario proveer de ese acceso a través del middleware Grid

53 Soporte a MPI en el Grid ¿Porqué?Muchas áreas de aplicaciones requieren soporte a MPI Ciencias de la tierra, fusion, astrofísica, Química Computacional… Se pueden obtener resultados significativos usando 10s-100s of CPUs Muchos clusters de hecho están listos para usar MPI En modo local mediante envío directo Sistemas de ficheros compartidos, intranets de alto rendimiento Es necesario proveer de ese acceso a través del middleware Grid Hay muchos factores a la hora de dar soporte a trabajos MPI que se han solucionado a nivel de clusters individuales y SuperComputers, etc… que tienen que ser reanalizados cuando se quiere implementar MPI en el Grid

54 Problemas a resolver No es un entorno homogéneoMPI no establece un standard de cómo iniciar un programa No hay una sintaxis común para mpirun MPI-2 define mpiexec como mecanismo de lanzamiento, pero el soporte a mpiexec es opcional en todas las implementaciones Los Brokers tienen que manejar distintas implementaciones MPI: MPICH, OpenMPI, LAMMPI, Schedulers distintos (PBD, SGE,…) y distintas implementaciones MPI en cada site tienen distintas maneras de especificar el fichero machinefile Sistemas de ficheros no compartidos Muchos sites no tienen soporte a sistemas de ficheros compartidos Muchas implementaciones MPI esperan encontrar el ejecutable en el nodo donde se ejecuta el proceso En general el setup es muy variado

55 Situación típica en el GridWorkload Management System Feed by Grid Info System CE OpenMPI-IB NFS dirs PBS Site C JobType=mpich-gm CE CE MPICH-GM GPFS LoadLeveler Site A Site B OpenMPI Non-shared dir SGE

56 El lenguaje del Grid Scheduler tiene que ser traducido a la sintaxis del scheduler localLocal Site B UI WMS WN CE General Grid Scheduler Local Scheduler Translate? NO, Of course! Translate? NO Translate? YES, but how? WMS cannot be updated often without compromising the whole job submission procedure

57 Ejemplo con Sun Grid EngineBATCH #/bin/sh #$ -o $HOME/mydir/myjob.out #$ -N myjob #$ -pe mpi 4 . /etc/profile.sge . /etc/mpi.setup –e mpi cd mydir mpirun –np 4 ./myprog nodo1 1 nodo2 1 nodo3 1 nodo4 1 Workload Management System Executable = “myprog”; Arguments = “arguments”; JobType = “MPI”; ProcNumber = 4; StdOutput = “std.out”; StdError = “std.err”; InputSandBox = {“myprog”}; OutputSandBox = {“std.out”, ¨ “std.err”}; ¿? machinefile

58 Diseño de una capa de software intermedio: ObjetivosMPI-START Especificar un interface único a la capa superior de middleware para describir un trabajo MPI Ser capaz de dar soporte a implementaciones MPI distintas y nuevas, sin tener que cambiar el middleware del Grid Soportar las operaciones básicas de distribución de ficheros Dar soporte al usuario para manejar sus datos pre- y post-run

59 Consideraciones de diseño de mpi-startPortable MPI-START debe ser capaz de ejecutarse bajo cualquier sistema operativo que soporte el middleware Script en bash Arquitectura modular y extensible Instalable como un Plugin Independiente de path absolutos para poder adaptarse a las distintas configuraciones locales de los site Posibilidad de “inyección remota” con el trabajo Dar al usuario cierta potencia de trabajo independiente del site Opciones de debug remoto avanzadas

60 Arquitectura de mpi-start

61 MPI-Start for users Single interface for all parallel jobs:No need to learn a different command line option every time a MPI version changes No need to learn how each scheduler manages the hosts Control of process mapping: One process per host N processes per host K total processes File distribution No need to worry (much) about shared or not filesystems Customizable with hooks Compilation input preparation management of output 11 Apr 2011 EGI UF, Vilnius 2011

62 MPI-Start for admins Single interface for all parallel jobs:No need to configure a different Execution Environment / Run Time Environment for each type of job Easy to deploy for admins without much experience: Default MPI installations paths for SL5(current target for EMI) installations detected Yaim module for configuration Customizable with hooks for sites with specific requirements 11 Apr 2011 EGI UF, Vilnius 2011

63 MPI-Start flow START Scheduler Plugin NO NO Execution PluginDo we have a scheduler plugin for the current environment? Ask Scheduler plugin for a machinefile in default format NO Execution Plugin Do we have a plugin for the selected MPI? Activate MPI Plugin Prepare mpirun Trigger pre-run hooks Start mpirun Trigger post-run hooks Hooks Plugins Dump Env EXIT EGI UF. Vilnius, Apr 2011.

64 Using MPI-Start: variablesMEANING I2G_MPI_APPLICATION The application binary to execute. I2G_MPI_APPLICATION_ARGS The command line parameters for the application I2G_MPI_TYPE The name of the MPI implementation to use. I2G_MPI_VERSION Specifies the version of the MPI implementation specified by I2G_MPI_TYPE. If not specified the default version will be used. I2G_MPI_PRE_RUN_HOOK This variable can be set to a script which must define the pre_run_hook function. I2G_MPI_POST_RUN_HOOK This variable can be set to a script which must define the post_run_hook function EGI UF. Vilnius, Apr 2011.

65 Using MPI-Start: variablesMEANING I2G_MPI_START_VERBOSE Set to 1 to turn on the additional output. I2G_MPI_START_DEBUG Set to 1 to enable debugging output I2G_MPI_START_TRACE Set to 1 to trace every operation that is performed by mpi-start I2G_MPI_APPLICATION_STDIN Standard input file to use. I2G_MPI_APPLICATION_STDOUT Standard output file to use. I2G_MPI_APPLICATION_STDERR Standard error file to use. I2G_MPI_SINGLE_PROCESS Set it to 1 to start only one process per node. I2G_MPI_PER_NODE Number of processes to start per node. I2G_MPI_NP Total number of processes to start. EGI UF. Vilnius, Apr 2011.

66 Funcionamiento de MPI-START intra-clusterMPI Job Submission Plugin Migrating Desktop Roaming Access Server Cross Broker MPI-start invocation Matchmaking Web server SERVICES Information Index Replica Manager Internet gLite gLite CE CE MPI - start Open - MPI WN WN

67 MPI inter-cluster: PACX-MPIPACX-MPI es un middleware para ejecutar MPI en una red de ordenadores paralelos Lanza sub-trabajos MPI en cada Los unifica en un único trabajo MPI (grande) PACX sigue el standard de MPI Las aplicaciones solo necesitan ser recompiladas! Application PACX MPI (job) Cluster 1 Cluster 2 Open MPI (job) Open MPI (job)

68 Pacx MPI comunicación entre procesosPacx-MPI mapea los MPI “ranks” del trabajo grande a los procesos MPI que se ejecutan en cada cluster Pacx-MPI mapea dos procesos “ocultos” adicionales en cada cluster que son los usados para comunicar datos entre clusters Rank 0 del trabajo MPI local es el “out” daemon Rank 1 del trabajo MPI local es el “in” daemon CE Worker Nodes 3 5 2 4

69 Pacx MPI comunicación entre procesosComunicación interna La comunicación interna entre procesos ejecutandose en el mismo cluster local se realiza a través de la implementación local MPI (optimizada) Comunicación externa Envía mensaje al “out” daemon usando MPI local El “out” daemon envía el mensaje al host de destino por la red usando TCP El “in” daemon recibe el mensaje por TCP y lo envía a su destino usando el MPI local. CE Worker Nodes 3 5 2 4 Grids & e-Science UIMP. Santander

70 Funcionamiento de MPI-START inter-cluster con PACX-MPIMPI Job Submission Plugin PACX MPI Coordination Migrating Desktop Roaming Access Server Cross Broker MPI-start invocation Start up server Web server SERVICES Information Index Replica Manager Internet gLite gLite PACX - MPI CE CE MPI - start Open - MPI WN WN