Univer Universid sidad ad Nacio Nacional nal de San Agustin gustin Escuela Escuela Profes Profesional ional de ´n Cienci Ciencia a de la Comput Computa acion o Algoritmos Paralelos
Cl´ uster uster Alumnos : Diego Charrez Ticona Eyner Pariguana Medina Lehi Quincho Mamani Julio Quispe Quica˜ no Ruben Torres Lima Olenka Vargas Lazarte Profesor: Mg. Alvaro Mamani Aliaga
13 de abril de 2018
Cl´uster
1.
Laboratorio: Algoritmos Paralelos
Introducci´ on
La definici´ o n m´as extendida y conocida es la de Michael Porter, quien defini´o los Clusters como ¨Una agrupaci´ on de organizmos relacionados entre s´ı, pertenecientes a un mismo sector o segmento de trabajo, que se encuentran pr´ oximos geogr´ aficamente y que colaboran para ser m´ as competitivos¨. Por tanto, son una HERRAMIENTA de COMPETITIVIDAD basada en la cooperaci´on de sus miembros y/o elementos. Dejando ver que el t´ermino tiene diferentes tipos de atribuciones, para todo tipo de ramas, como ciencia, arte, industria y, la que nos compete, inform´atica. Un cluster es una unidad l´ogica u´nica que consta de varias computadoras que est´ an vinculadas a trav´es de una LAN. Las computadoras conectadas en red act´ uan esencialmente como una u´nica m´aquina mucho m´as poderosa. Un cl´ uster inform´ atico proporciona una velocidad de procesamiento mucho m´ as r´apida, una mayor capacidad de almacenamiento, una mejor integridad de los datos, una fiabilidad superior y una mayor disponibilidad de recursos. Los cl´ usteres de computadoras son, sin embargo, mucho m´ as costosos de implementar y mantener. Esto da como resultado una sobrecarga de funcionamiento mucho mayor en comparaci´ on con una sola computadora. Muchas organizaciones usan cl´ usteres de computadoras para maximizar el tiempo de procesamiento, aumentar el almacenamiento de la base de datos e implementar t´ecnicas m´as r´apidas de almacenamiento y recuperaci´ on de datos. Hay muchos tipos de cl´usteres de computadoras, que incluyen: C´umulos de equilibrio de carga Agrupaciones de alta disponibilidad (HA) Clusters de alto rendimiento (HP) Las principales ventajas del uso de clusters de computadoras son claras cuando una organizaci´ on requiere un procesamiento a gran escala. Cuando se usan de esta manera, los clusters de computadoras ofrecen: Rentabilidad: la t´ecnica de cl´ uster es rentable para la cantidad de potencia y velocidad de procesamiento que se produce. Es m´ as eficiente y mucho m´as barato en comparaci´ on con otras soluciones como la configuraci´ on de computadoras mainframe. 1
Cl´uster
Laboratorio: Algoritmos Paralelos
Velocidad de procesamiento: varias computadoras de alta velocidad trabajan juntas para proporcionar un procesamiento unificado y, por lo tanto, un procesamiento m´ as r´apido en general. Infraestructura de red mejorada: se implementan diferentes topolog´ıas de LAN para formar un cl´ uster de computadora. Estas redes crean una infraestructura altamente eficiente y efectiva que evita los cuellos de botella. Flexibilidad: a diferencia de las computadoras mainframe, los cl´ usteres de computadoras se pueden actualizar para mejorar las especificaciones existentes o agregar componentes adicionales al sistema. Alta disponibilidad de recursos: si cualquier componente individual falla en un grupo de computadoras, las otras m´ aquinas contin´ uan proporcionando un procesamiento ininterrumpido.
2.
Configuraci´ on de MPI Cluster en LAN
Si bien en clases previas hemos ejecutado programas MPI en una sola m´ aquina, como la multiplicaci´on de matrices, para procesar en paralelo el c´ odigo, ahora, llevamos lo mismo desde m´as de una computadora a una red de nodos conectados entre s´ı en una red de a´rea local (LAN). Inicialmente se podr´ıan considerar dos computadoras (un master y un slave), para las primeras configuraciones ya que resulta bastante directo implementar lo mismo con muchos m´ as nodos, o ir agregandolos (m´as slaves). Antes que nada, consideremos tener instalado MPICH2 en cada una de las computadoras con las que se trabajar´ a.
[1] Configuramos el archivo hosts Esto permitir´ a la comunicaci´ on constante entre las computadoras, reemplazando la direcci´on ip, por un nombre asociado. 1
$
c at / e t c / h o s t s
2
3 4
127.0.0.1 1 72 .5 0 .8 8. 34
localhost c li en t
2
Cl´uster
Laboratorio: Algoritmos Paralelos
[2] Creamos un nuevo usuario Para simplificar creamos nuevos usuarios, con el comando adduser; con los mismos nombres que cada computadora ya tiene asociado, para evitar conflictos con las configuraciones. 1
$
s ud o a d d us e r m p iu s er
[3] Configurando el SSH Las computadoras se comunicar´ an por medio de SSH, y compartir´ an informaci´ on por medio de NFS 1
$
s u do a p t−g et i n s t a l l op ens sh − s e r v e r
Seguido, nos logueamos con nuestra cuenta creada 1
$
su − mpiuser
Como el servidor ssh ya est´a instalado, debe poder iniciar sesi´ on en otras m´ aquinas mediante ssh username@hostname , en el que se le solicitar´a que ingrese la contrase˜na del username. Para permitir un inicio de sesi´ on m´as f´acil, generamos claves y las copiamos a la lista de autorized keys 1
$
ssh −keygen − t ds a
Ahora, agregamos la clave generada a cada una de las otras computadoras, las m´aquinas cliente (slaves), acorde nuestro localhost 1
$
ssh −copy−i d c l i e n t #ip −a d d r e s s
De esta forma se configurar´ a openssh-server , manteniendo la comunicaci´o n de forma segura con las m´aquinas del cliente. Una vez funcionando ssh en todas las m´aquinas, estas son agregas a la lista de known hosts . Ahora, debemos habilitar ssh sin contrase˜ na, para evitar problemas de comunicaci´ on 1 2
e v a l ssh −agent $ ssh −add ˜ / . s s h / i d d s a $
Ahora, procedemos a iniciar sesi´ on, despu´es de haber agregado correctamente las claves 1
$
ss h c l i e n t
3
Cl´uster
Laboratorio: Algoritmos Paralelos
[4] Configurando NFS Por medio de NFS se comparte directorios entre el master y el cliente, permitiendo intercambian informaci´ on. NFS-Server Se instalan los paquetes requeridos 1
$
s u do a p t−g e t i n s t a l l n f s −k e r n e l − s e r v e r
Creamos el directorio cloud, para compartir la informaci´ on 1
$
m kd ir c l o u d
Para exportar al directorio cloud, se crea la entrada /etc/exports 1 2
c a t / e t c / e x po r t s /home/mpiuser/ cloud ∗ ( rw , s yn c , n o r o o t s q u a s h , n o s u b t r e e c h e c k ) $
Ahora se ejecuta 1
$
e x p o r t f s −a
Si es necesario se puede reiniciar el servidor nfs 1
$
sudo s e r v i c e n fs −k e r n e l − s e rv e r r e s t a rt
NFS-Client Se instalan los paquetes requeridos 1
$
s u do a p t−g e t i n s t a l l n f s −common
Creamos el mismo directorio cloud 1
$
m kd ir c l o u d
Montamos el directorio compartido como 1
$
sudo mount − t n f s m a st e r : / h ome / mp i us e r / c l o u d ˜ / c l o u d
Verificamos los directorios montados 1 2
3
d f −h Filesystem S i z e Used A v a i l Use % Mounted on m a st e r : / h ome / mp i us e r / c l o u d 4 9G 1 5G 3 2G 32 % / home / mp i us e r / c l o u d
$
4
Cl´uster
Laboratorio: Algoritmos Paralelos
Para que el montaje sea permanente y no tenga que montar manualmente el directorio compartido cada vez que reinicie el sistema, se crea una entrada en la tabla de sistemas de archivos, es decir, archivo /etc/fstab c at / e t c / f s t a b 2 #MPI CLUSTER SETUP /home/mpiuser/ cloud nf s 3 master :/ home/mpiuser/ cloud 1
$
[5] Corriendo programas MPI Se compila de la siguiente manera: 1
$
mpicc −o m p i s a m p l e m p i s a m p l e . c
Copiamos el ejecutable al directorio compartido 1 2 3
cd c l ou d / $ pwd /home/mpiuser/ cloud $
Para ejecutarlo solo en esa m´ aquina 1
$
mpirun −np 2 . / c p i # No . de p r o ce s o s = 2
Para ejecutarlo en el cluster 1
$
mpirun −np 5 − h o s ts c l i e n t , l o c a l h o s t . / c p i
Lo mismo para el hostfile 1
$
mpirun −np 5 −− h o s t f i l e m p i f i l e . / c pi
3.
C´ odigo de prueba
#i n c l u d e ” mpi . h ” 2 #i n c l u d e < s t d i o . h> 3 #i n c l u d e < s t d l i b . h> 1
4
#de f i n e 6 #d e f i n e 7 #d e f i n e 8 #d e f i n e 9 #d e f i n e 10 #d ef i n e 5
MATSIZE 500 NRA MATSIZE NCA MATSIZE NCB MATSIZE MASTER 0 FROM MASTER 1
/ ∗ number o f / ∗ number o f / ∗ number o f / ∗ ta sk id o f /∗ s e t t i n g a
5
r ow s i n m at r ix A ∗ / c ol um ns i n m a t ri x A ∗ / c ol um ns i n m a t ri x B ∗ / f i r s t t as k ∗ / m es sa ge t yp e ∗ /
Cl´uster
11
Laboratorio: Algoritmos Paralelos
#d e fi n e FROMWORKER 2
/ ∗ s e t t i n g a m es sa ge t yp e ∗ /
12
i n t main ( i n t a rg c , c h ar 14 { i n t numtasks , 15 taskid , 16 17 numworkers , s o u r ce , 18 de st , 19 mtype , 20 rows , 21 av er ow , e x tr a , o f f s e t , 22 ∗/ 23 i , j , k , rc ; a [NRA ] [ NCA] , 24 d ou bl e b [NCA ] [ NCB] , 25 c [NRA] [ NCB ] ; 26 stat us ; 27 M PI S t at u s 13
∗ ar gv
[])
/ ∗ number o f t a s k s i n p a r t i t i o n ∗ / / ∗ a t as k i d e n t i f i e r ∗ / / ∗ number o f w o rk e r t a s k s ∗ / / ∗ t a sk i d o f m es sa ge s o ur c e ∗ / / ∗ ta s k i d o f m es sa ge d e s t i n a t i o n ∗ / / ∗ m e ss a g e t y p e ∗ / / ∗ r ows o f m at ri x A s e n t t o e ac h w or ke r ∗ / / ∗ u se d t o d e te r mi n e r ow s s e n t t o e ac h w or ke r / ∗ misc ∗ / / ∗ m at ri x A t o be m u l t i p l i e d ∗ / / ∗ m at ri x B t o be m u l t i p l i e d ∗ / / ∗ r e s u l t m at ri x C ∗ /
28
MPI Init(&argc ,&argv ) ; 30 MPI Comm rank (MPI COMM WORLD,& t a s k i d ) ; 31 MPI Comm size (MPI COMM WORLD,& nu mt as ks ) ; ( n u mt as ks < 2 ) { 32 i f p r i n t f ( ” Need a t l e a s t t wo MPI t a s k s . Q u i t t i n g . . . \ n”) ; 33 MPI Abort (MPI COMM WORLD, r c ) ; 34 exi t (1) ; 35 36 } 37 numworkers = numtasks − 1; 29
38 39 40
41 42 43 44
45 46 47
48 49 50
/ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ master ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ / i f ( t a s k i d == MASTER) { p r i n t f ( ” mpi mm h as s t a r t e d w i th %d t a s k s . \ n” ,numtasks) ; // p r i n t f ( ” I n i t i a l i z i n g a r r ay s . . . \ n”) ; f o r ( i =0; i
51
52 53
/ ∗ M ea su re s t a r t t im e ∗ / d o u b l e s t a r t = MPI Wtime ( ) ;
54
6
Cl´uster
55 56 57
58 59 60 61
62 63
64 65 66 67
68
69
70
Laboratorio: Algoritmos Paralelos
/ ∗ Send m at r ix d at a t o t h e w or ke r t a s k s ∗ / ave row = NRA/ numwo rkers ; e x t r a = NRA%numw orker s ; offset = 0; mtype = FROM MASTER; f o r ( d e s t = 1; d e st <=numworkers ; de st ++) { r o ws = ( d e s t <= e x t r a ) ? a v er ow +1 : a ve ro w ; / / p r i n t f ( ” S e n d in g %d r ow s t o t a s k %d o f f s e t= %d\ n” ,rows , dest , of fs et ) ; MPI Send(&o f f s e t , 1 , MPI INT , des t , mtype , MPI COMM WORLD) ; MPI Send(&rows , 1 , MPI INT , de st , mtype , MPI COMM WORLD) ; MPI S en d(& a [ o f f s e t ] [ 0 ] , r o w s ∗NCA, MPI DOUBLE, de st , mtype , MPI COMMWORLD) ; MPI Send(&b , NCA∗NCB, MPI DOUBLE, d es t , mtype , MPI COMM WORLD) ; o f f s e t = o f f s e t + rows ; }
71 72 73
74 75 76
77
78
79 80 81
82
/ ∗ R ec ei ve r e s u l t s f rom w or ke r t a s k s ∗ / mtype = FROMWORKER; f o r ( i =1; i <=numworkers ; i++) { source = i ; MPI Recv(& o f f s e t , 1 , MPI INT , so ur ce , mtype , MPI COMM WORLD, & sta tus ) ; MPI Recv(&rows , 1 , MPI INT , so ur ce , mtype , MPI COMM WORLD, & sta tus ) ; MPI Re cv (& c [ o f f s e t ] [ 0 ] , r o w s ∗NCB, MPI DOUBLE, so ur ce , mtype , MPI COMM WORLD, &s t a t u s ) ; // p r i n t f ( ” R e c ei v ed r e s u l t s f ro m t a s k %d \ n” , so ur ce ) ; }
83
/ ∗ Pr in t r e s u l t s ∗ / /∗ p r i n t f ( ”∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ \ n
84 85
86
”) ; 87
88 89 90 91
92 93 94
p r i n t f ( ” R e s u l t M a t r ix : \ n”) ; f o r ( i =0; i
7
Cl´uster
Laboratorio: Algoritmos Paralelos
n”) ; ∗/
95 96
/ ∗ Me as ur e f i n i s h t im e ∗ / d o u b l e f i n i s h = MPI Wtime ( ) ; p r i n t f ( ” Done i n %f s e c o n d s . \ n ” , f i n i s h − s t a r t ) ;
97 98 99
}
100
101 102 103
104 105 106 107
108
109
110
/∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ s l a v e ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ / i f ( t a s ki d > MASTER) { mtype = FROM MASTER; MPI Recv(& o f f s e t , 1 , MPI INT , MASTER, mtype , MPI COMM WORLD, & sta tus ) ; MPI Recv(&r ows , 1 , MPI INT , MASTER, mtype , MPI COMM WORLD, & sta tus ) ; MPI Recv(&a , rows ∗NCA, MPI DOUBLE, MASTER, mtype , MPI COMM WORLD, &statu s ) ; MPI Recv(&b , NCA∗NCB, MPI DOUBLE, MASTER, mtype , MPI COMM WORLD, &stat us ) ;
111
f o r ( k=0; k
112 113
114 115 116 117
118 119 120
121 122
; } MPI Finalize () ;
123
124 125
}
Referencias [1] An introduction to parallel programming, Peter Pacheco https://www.ime.usp.br/~ alvaroma/ucsp/parallel/an introduction to parallel programming - peter s. pacheco.pdf
8
Cl´uster
Laboratorio: Algoritmos Paralelos
[2] ¿Qu´e son los CLUSTERS? http://clusterfoodmasi.es/cluster/que-son-los-clusters/
[3] Cluster https://es.wikipedia.org/wiki/Cl %C3 %BAster (inform %C3 %A1tica)
[4] Computer Cluster https://www.techopedia.com/definition/6581/computer-cluster
[5] Running an MPI Cluster within a LAN http://mpitutorial.com/tutorials/running-an-mpi-cluster-within-a-lan/
[6] SSH Passwordless Login Using SSH Keygen in 5 Easy Steps https://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5easy-steps/
9