qué es un cluster beowulf

7
¿Qué es un Cluster Beowulf? Un Cluster Beowulf es un conjunto de ordenadores conectados en red privada que puede ser utilizado para el cálculo paralelo. Se componen de productos de hardware con software de código abierto como Linux o BSD uno, a menudo junto con PVM (Parallel Virtual Machine) o MPI (Message Passing Interface). Un estándar creado consistirá en un nodo principal que controlará una serie de nodos esclavos. Los nodos esclavos están normalmente sin cabeza y en general todos los accesos a los mismos archivos desde un servidor. Han sido denominados clusters Beowulf desde antes de 1998, cuando el original Cómo Beowulf fue puesto en libertad. ¿Qué es MPI abierta? Open MPI es una de las principales implementaciones de MPI- 2 utilizado por muchos de los superordenadores TOP 500. Es de código abierto y es desarrollado y mantenido por un consorcio de, académicas, de investigación y socios industriales. El proyecto Open MPI tiene el objetivo declarado de crear el mejor Message Passing Interface (MPI), la colección disponible, que a juzgar por el lugar donde se utiliza, yo diría que está bien en su manera de hacer. La principal forma en que se utiliza es para iniciar un programa desde el nodo principal y especificar cuántos procesos que desea utilizar, el programa se pone en marcha para cada uno de estos procesos si se trata en el mismo equipo o en varios equipos. Los procesos pueden comunicarse con la biblioteca MPI y todos los datos enviados a STDOUT de los nodos esclavos se canaliza a STDOUT en el nodo maestro. Configuración de las máquinas Estoy haciendo varias suposiciones en este artículo: Usted tiene por lo menos dos máquinas conectadas a través de una red TCP / IP.

Upload: vicente-blanco-barizo

Post on 14-May-2015

261 views

Category:

Education


2 download

TRANSCRIPT

Page 1: Qué es un cluster beowulf

¿Qué es un Cluster Beowulf?Un Cluster Beowulf es un conjunto de ordenadores conectados en red privada que

puede ser utilizado para el cálculo paralelo. Se componen de productos de hardware con

software de código abierto como Linux o BSD uno, a menudo junto con PVM (Parallel

Virtual Machine) o MPI (Message Passing Interface). Un estándar creado consistirá en

un nodo principal que controlará una serie de nodos esclavos. Los nodos esclavos están

normalmente sin cabeza y en general todos los accesos a los mismos archivos desde un

servidor. Han sido denominados clusters Beowulf desde antes de 1998, cuando el

original Cómo Beowulf fue puesto en libertad.

¿Qué es MPI abierta?Open MPI es una de las principales implementaciones de MPI-2 utilizado por muchos

de los superordenadores TOP 500. Es de código abierto y es desarrollado y mantenido

por un consorcio de, académicas, de investigación y socios industriales. El proyecto

Open MPI tiene el objetivo declarado de crear el mejor Message Passing Interface

(MPI), la colección disponible, que a juzgar por el lugar donde se utiliza, yo diría que

está bien en su manera de hacer.

La principal forma en que se utiliza es para iniciar un programa desde el nodo principal

y especificar cuántos procesos que desea utilizar, el programa se pone en marcha para

cada uno de estos procesos si se trata en el mismo equipo o en varios equipos. Los

procesos pueden comunicarse con la biblioteca MPI y todos los datos enviados a

STDOUT de los nodos esclavos se canaliza a STDOUT en el nodo maestro.

Configuración de las máquinasEstoy haciendo varias suposiciones en este artículo:

Usted tiene por lo menos dos máquinas conectadas a través de una red TCP / IP.

Cada máquina está usando la misma arquitectura de procesador, para facilitar su

participación en programas ejecutables.

Las máquinas tienen Linux instalado.

Cada máquina tiene un inicio de sesión nombre de usuario común,

como mpiuser . Me voy a referir a la entrada común mpiuser para el resto de este

artículo.

Cada máquina tiene mpiuser de compartir la carpeta misma casa, generalmente a

través de NFS, o tiene las partes pertinentes de la carpeta de inicio sincronizado,

tal vez con rsync .

Me referiré a cada uno de los nodos esclavos como SLAVE1 , SLAVE2 , etc, sin

embargo, puede elegir cualquier nombre de host que desee.

Page 2: Qué es un cluster beowulf

Una de las máquinas será el nodo maestro, esta es la máquina desde la que podrás

controlar el cluster y ejecutar los programas. Los otros nodos se conoce como esclavos.

Instalación y configuración de MPI abierta a todos los nodosEn Debian Lenny es necesario instalar los siguientes paquetes:

openmpi-bin

openmpi-common

libopenmpi1

libopenmpi-dev (No es realmente necesario para un nodo esclavo.)

Esto se puede hacer como root, en Debian, con:

$ Apt-get install openmpi openmpi-bin-common-dev libopenmpi1 libopenmpi

Los nombres pueden variar en su distribución, pero lo más importante es recordar que

usted debe tener la misma versión de Open MPI en todas las máquinas, para que

funcione correctamente.

En Debian Lenny, el MPI ejecutables Abrir instalar en / usr / bin . Si se instalan en una

ubicación diferente, entonces usted tendrá que asegurarse de que este lugar está en el

PATH para mpiuser . También puede ser necesario para asegurar que los puntos de

LD_LIBRARY_PATH a / usr / lib

Los nodos esclavosPara que el nodo maestro puede controlar los nodos esclavos, cada nodo esclavo

necesita un servidor SSH instalado. En Debian, instale el siguiente paquete:

openssh-server

En Debian, esto se puede hacer como root con:

$ Apt-get install openssh-server

Master NodoConfiguración de SSH

Antes de continuar con la creación de Open SSH , por favor vaya a su sitio. Hago

entrega de la información suficiente aquí para obtener el trabajo del clúster y no hacen

garantías en cuanto a qué tan seguro es este método.

Para poder controlar los nodos esclavos desde el nodo principal que necesita un cliente

SSH instalado. En Debian, instale el siguiente paquete:

openssh-cliente

Page 3: Qué es un cluster beowulf

En Debian, esto se puede hacer como root con:

$ Apt-get install openssh-cliente

Mientras está conectado como mpiuser , crear pública SSH / pares de clave privada con

contraseña: ! h475k2 4553ffe (Elige tu propia contraseña) utilizando el archivo: / home /

mpiuser / .ssh / id_dsa .

dsa $ ssh-keygen-t

Asegúrese de que cada equipo sabe que este usuario está autorizado a acceder a ellos.

$ Cp / home / mpiuser / .ssh / id_dsa.pub / home / mpiuser / .ssh / authorized_keys

Si no está compartiendo el / home / mpiuser carpeta continuación, asegúrese de que

cada nodo esclavo sabe que mpiuser en el nodo principal está autorizado a acceder a

ellos. Para SLAVE1 uso:

$ Scp / home / mpiuser / .ssh / id_dsa.pub mpiuser @ SLAVE1: .ssh /

authorized_keys

Corregir permisos de archivo (Esto también tendrá que hacerse en los nodos esclavo si

no compartir la carpeta de inicio):

$ Chmod 700 / home / mpiuser / .ssh

$ Chmod 600 / home / mpiuser / .ssh / authorized_keys

Para probar que esto ha funcionado tratar de usar SSH para conectarse a sus esclavos

del amo, con la contraseña que introdujo al crear los pares de clave anterior:

$ Ssh SLAVE1

Configuración de MPI Abierto

Para que Open MPI sabe que las máquinas para ejecutar sus programas, usted puede

crear un archivo para guardar esto. Voy a llamar a este archivo / home /

mpiuser / .mpi_hostfile y podría contener lo siguiente:

# El HOSTFILE para Open MPI # El nodo maestro, ranuras = 2 se utiliza

porque es una máquina con procesador dual. ranuras localhost = 2 # Los

nodos esclavos siguientes son máquinas de un solo procesador: SLAVE1

SLAVE2 slave3

Compilación de programasOpenMPI se puede utilizar con una variedad de idiomas, dos de los más populares son

FORTRAN y "C". Si los programas están escritos en 'C', entonces usted puede

utilizar mpicc en lugar de su habitual "C" del compilador o puede pasar los argumentos

adicionales directamente al teléfono de la 'C' del compilador. Con mpicc los argumentos

Page 4: Qué es un cluster beowulf

que se pasan se pasan a su normal 'C' del compilador.

Si desea utilizar mpicc para compilar "C" fuente de un archivo llamado testprogram.c :

$ Mpicc testprogram.c

Si quieres ver lo que va a pasar a su 'C' de compilador al compilar y enlazar:

$ Mpicc-showme

Ejecución de programas en el clústerAsegúrese de que SSH no pide una contraseñaPorque Open MPI utilizará SSH para conectarse a cada una de las máquinas y ejecutar

el programa, usted necesita asegurarse de que la contraseña no tiene que ser introducido

para cada conexión.

El uso de ssh-agent para recordar la contraseña mientras está conectado como mpiuser :

$ Eval `ssh-agent»

Dile a ssh-agent la contraseña de la clave SSH:

$ Ssh-add ~ / .ssh / id_dsa

Prueba entrando en uno de los nodos esclavos, mientras está conectado como mpiuser,

lo que no debe pedir una contraseña:

$ Ssh SLAVE1

A partir de un programa en el clústerUsted puede iniciar un programa en una sola máquina, y la tengan en ejecutar en varios

procesadores / núcleos. Esto es útil si usted tiene una máquina potente o la depuración /

pruebas de un programa. Alternativamente, puede ejecutar el programa en el clúster y

solicitar tantos procesos como desea que se ejecute sobre él.

Para ejecutar myprogram en dos procesos en el equipo local:

mpirun-np 2. / myprogram

Para ejecutar myprogram más de cinco procesos en el grupo con el . mpi_hostfile creado

anteriormente (Tenga en cuenta que myprogram debe estar en el mismo lugar en cada

equipo):

mpirun-np 2 -. HOSTFILE mpi_hostfile / myprogram.

Un Programa de Ejemplo de pruebaEl siguiente programa le enviará un número al azar desde el nodo maestro para todos los

nodos esclavos. 

Page 5: Qué es un cluster beowulf

# Include # include # include <stdlib.h> <mpi.h> int main (int argc,

char * argv []) {int MASTER const = 0; const int TAG_GENERAL = 1;

numTasks int, int rango; int fuente; dest int; int cuenta;; int rc

dataWaitingFlag int; inMsg char; outMsg char; Est. MPI_Status; / /

Inicializa el MPI pila. Esto también pasará 'argc' y 'argv' a cada uno

de los nodos esclavos. MPI_Init (& argc, & argv); / / Pone el número

de tareas y procesos que este programa se está ejecutando en numTasks

MPI_Comm_size (MPI_COMM_WORLD, y numTasks); / / Obtiene el rango

(proceso / número de tarea) que este programa se está ejecutando en

MPI_Comm_rank ( MPI_COMM_WORLD, y clasificación); / / Si el nodo

maestro si (clasificación == MASTER) {/ / Enviar mensajes a todos los

sub-procesos (dest = 1; dest numTasks <; dest + +) {outMsg = rand ()%

256 / / Generar un mensaje al azar para enviar a los nodos esclavo / /

Enviar un mensaje a la RC destino = MPI_Send (y outMsg, 1, MPI_CHAR,

dest, TAG_GENERAL, MPI_COMM_WORLD); printf ("% Tarea d:% de mensajes

enviados d para tarea% d con etiquetas% d \ n ", rango, outMsg, dest,

TAG_GENERAL);}} / / ventas un nodo esclavo else {/ / Espera hasta que

un mensaje se haya recibido MPI_COMM_WORLD do {MPI_Iprobe (MASTER, 1,

e dataWaitingFlag, MPI_STATUS_IGNORE); printf ("Esperando \ n");}

while (dataWaitingFlag);! / / Obtener el mensaje y ponerlo en rc

'inMsg' = MPI_Recv (y inMsg, 1, MPI_CHAR, MASTER, TAG_GENERAL,

MPI_COMM_WORLD, y Stat); / / Obtener el tamaño del mensaje y ponerlo

en rc 'count' = MPI_Get_count (y Stat, MPI_CHAR, y cuenta); printf ("%

Tarea d: Recibido% d caracteres (s) (% d) de la tarea% d con etiquetas

% d \ n ", rango, contar, inMsg, Stat.MPI_SOURCE, Stat.MPI_TAG);}

MPI_Finalize ();}

Si guarda el código fuente de arriba para un archivo llamado testprogram.c luego

compilarlo con:

$ Mpicc testprogram.c

A continuación, ejecute cualquiera de más de 20 procesos en la máquina local:

mpirun-np 20. / a.out

O más de 5 procesos en el clúster:

mpirun-np 5 - HOSTFILE mpi_hostfile / a.out..

Usted debe ver en el nodo maestro que la salida a STDOUT de los nodos esclavos se

redirige a STDOUT en el nodo maestro. El nodo maestro es la salida lo que es el envío

y cada nodo esclavo de salida lo ha recibido o si se está esperando. Una vez que cada

nodo ha terminado, el nodo maestro se cerrará y volverá a la línea de comandos.

Page 6: Qué es un cluster beowulf

¿Dónde puedo encontrar más información?