- Estréllate y Arde - https://www.estrellateyarde.org -
Clusters Beowulf/PVM en Linux
En 1994 la NASA construyó un cluster bajo Linux con hardware barato, con 16 procesadores 486 conectados mediante una red local Ethernet, con el objetivo de conseguir alto rendimiento. Para ello se utilizó computación paralela por lo que los programas (escritos en C y Fortran) estaban paralelizados, es decir, utilizaban librerías de Message Passing (PVM y MPI) para que los procesos se ejecutasen en múltiples procesadores siguiendo el paradigma master/esclavo. El proyecto se llamó Beowulf y fue un gran éxito, por lo que actualmente cualquier sistema similar se denomina cluster tipo Beowulf.
La máquina virtual paralela PVM (Parallel Virtual Machine, csm.ornl.gov/pvm/pvm_home.html) permite realizar computación paralela y estará formada por todos los nodos en los que esté activo el demonio pvmd. Consta de los siguientes componentes:
# apt-get install pvm pvm-dev
export PVM_ROOT=/usr/lib/pvm3 export PVM_ARCH=LINUX export PATH=$PATH:/usr/lib/pvm3/bin:$HOME/pvm3/bin/LINUX
Cargamos .bashrc de nuevo y comprobamos:
$ source ~/.bashrc $ echo $PVM_ROOT /usr/lib/pvm3
Para disponer de SSH instalaremos en los esclavos el servidor SSH (paquete openssh-server) y los configuraremos para que acepten conexiones desde el master sin pedir password ni pass-phrase (utilizaremos el mismo usuario en todas las máquinas). Para ello:
- crearemos una clave RSA en el master:
francis@master:~$ ssh-keygen -t rsa -f ~/.ssh/id_rsa
- activaremos ssh-agent en el master para que no nos pida la pass-phrase:
francis@master:~$ eval `ssh-agent -s` Agent pid 12297 francis@master:~$ ssh-add Enter passphrase for /home/francis/.ssh/id_rsa: Identity added: /home/francis/.ssh/id_rsa (/home/francis/.ssh/id_rsa)
- copiaremos la clave pública (~/.ssh/id_rsa.pub) en todos los esclavos:
francis@master:~$ scp ~/.ssh/id_rsa.pub francis@slave1:~/.ssh/id_rsa.pub
- la añadiremos al final del fichero ~/.ssh/authorized_keys en cada esclavo:
francis@slave1:~$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- y comprobaremos que podemos iniciar sesión SSH en los esclavos sin que nos pida password:
francis@master:~$ ssh slave1
francis@slave1:~$
$ pvm
pvm>
Para ver la lista de nodos del cluster usaremos el comando conf:
pvm> conf conf 1 host, 1 data format HOST DTID ARCH SPEED DSIG master 40000 LINUX 1000 0x00408841
Podemos añadir un nodo (y lanzar el demonio pvmd en ese nodo) con el comando add:
pvm> add slave1
Y eliminar un nodo con el comando delete (mataremos el demonio pvmd en ese nodo):
pvm> delete slave1
Para arrancar el demonio pvmd en el master y en todos los nodos listados en pvm.hosts ejecutaremos:
$ pvm pvm.hosts
pvm>
Siendo pvm.hosts un archivo que contiene la lista de nodos del cluster, por ejemplo:
# Master PVM master # Slaves slave1 slave2 slave3
Los nombres de los nodos utilizados en pvm.hosts deben estar en /etc/hosts:
127.0.0.1 localhost 192.168.0.200 master 192.168.0.201 slave1 192.168.0.202 slave2 192.168.0.203 slave3
Comprobamos la lista de nodos del cluster:
pvm> conf conf 4 hosts, 1 data format HOST DTID ARCH SPEED DSIG master 40000 LINUX 1000 0x00408841 slave1 100000 LINUX 1000 0x00408841 slave2 140000 LINUX 1000 0x00408841 slave3 c0000 LINUX 1000 0x00408841
Para ver una relación de los comandos de la consola:
pvm> help help Print helpful information about a command Syntax: help [ command ] Commands are: add Add hosts to virtual machine alias Define/list command aliases conf List virtual machine configuration delete Delete hosts from virtual machine ...
Podemos salir de la consola PVM sin parar los demonios pvmd con el comando quit:
pvm> quit
quit
pvmd still running.
Para volver a entrar en la consola PVM:
$ pvm
pvmd already running.
pvm>
Para salir de la consola PVM matando todos los demonios pvmd el comando es halt:
pvm> halt
halt
Terminado
$ xpvm
Para arrancar XPVM arrancando el demonio pvmd en el master y en todos los nodos listados en pvm.hosts ejecutaremos:
$ xpvm pvm.hosts
Si cerramos la ventana de XPVM sin ejecutar File / Halt PVM el demonio pvmd seguirá activo:
Quitting xpvm - pvmd still running.
Ubicaremos los archivos fuente (hello.c y hello_other.c) en ~/pvm3/examples y los compilaremos con aimk, un wrapper para make de PVM (se generarán los ejecutables hello y hello_other en ~/pvm3/bin/LINUX):
$ cd ~/pvm3/examples $ aimk hello hello_other
Copiamos hello_other en los esclavos:
francis@master:~$ scp hello_other francis@slave1:~/pvm3/bin/LINUX/hello_other
Ejecutaremos hello desde la consola PVM:
pvm> spawn -> hello [1:t40014] i'm t40014 [1:t40014] from t100006: hello, world from pc266
Si sólo tenemos activo el master el programa se ejecutará sólo en ese nodo:
pvm>$ spawn -> hello [1:t40036] i'm t40036 [1:t40036] from t40037: hello, world from master
También podemos ejecutar hello desde el shell:
$ hello
PVM-POV es un parche para POV-Ray por lo que para instalarlo tenemos que descargarnos el parche, aplicarlo a las fuentes de POV-Ray y compilar. Encontraremos instrucciones detalladas en PVMPOV HOWTO.
Usaremos como ejemplo la escena skyvase.pov que podemos descargar de PovBench (haveland.com). Primero la copiaremos en los esclavos:
francis@master:~$ scp skyvase.pov francis@slave1:~/pvm3/skyvase.pov
Para ejecutar el renderizado el comando es:
$ pvmpov +Iskyvase.pov +Oskyvase.tga +Linclude pvm_hosts=slave1,slave2
+NT3 +NW64 +NH64 +v -w1024 -h768
Se generará ~/pvm3/skyvase.tga que contiene la imagen generada. Para convertirla a .jpg:
$ tgatoppm skyvase.tga > skyvase.ppm $ ppmtojpeg skyvase.ppm > skyvase.jpg
Recursos
Article printed from Estréllate y Arde: https://www.estrellateyarde.org
URL to article: https://www.estrellateyarde.org/discover/cluster-beowulf-pvm-en-linux
Click here to print.
Copyright © 2010 Estrellate y Arde