Sobre clusters

Eduardo Sacristan eduardo en matcuer.unam.mx
Vie Ago 18 11:33:00 CDT 2000


Para curarme en salud..., despues de la improvisada platica sobre clusters en 
la reunion del grupo de usuarios de Linux. No se en que habran terminado, 
pero aqui les van unas referencias y un resumen de una presentacion que 
hicimos algunos hara como un an~o (por lo mismo, es cuando empezabamos a hacer 
nuestros pininos y le falta mucho). Va sin permiso de los autores, espero
no se enojen :-)


Sobre clusters beowulf:
 
La "original"

	http://www.beowulf.org/

Una de las mejores:

	http://www.beowulf-underground.org/

Una sobre clusters en general, con muchas referencias sobre el tema, del 
compilador de 2 libros sobre clusters, muy completos y muy recomendables.

	http://www.csse.monash.edu.au/~rajkumar/cluster/index.html

Sobre el Mosix:

	http://www.mosix.cs.huji.ac.il/

Y la de la IEEE CS Task Force on Cluster....

	http://www.coe.uncc.edu/~abw/parallel/links.html

Para programacion:

Del MPI:

Los del mpich

	http://www-unix.mcs.anl.gov/mpi/

del LAM/MPI

	http://www.mpi.nd.edu/lam/

y una mas con un cursito de MPI

        http://www.epcc.ed.ac.uk/epcc-tec/documents/mpi-course/mpi-course.book_1.html

Del PVM

	http://www.epm.ornl.gov/pvm/

Libros:

Los ya mencionados sobre clusters: 
	High Performance Cluster Computing, 2 volumenes
	http://www.csse.monash.edu.au/~rajkumar/cluster/index.html

El de los creadores del Beowulf

	How to Build a Beowulf
	A Guide to the Implementation and Application of PC Clusters
	http://mitpress.mit.edu/book-home.tcl?isbn=026269218X

En la misma editorial (MIT Press) hay otros sobre MPI y PVM.

Y uno que esta en linea sobre programacion en paralelo.

	Designing and Building Parallel Programs, by Ian Foster 
	http://www-unix.mcs.anl.gov/dbpp/

En la pagina de Rajkumar Buyya (ya mencionada) tiene una larga lista que 
incluye los anteriores y otros mas

	http://www.csse.monash.edu.au/~rajkumar/cluster/books/

Y hay uno de O'Reilly, que no se si ya salio, parece que si,
del cual hay un capitulo en la red con algunos ejemplos.

	http://www.oreilly.com/catalog/clusterlinux/chapter/ch09.html


Y pues si la platica no fue muy completa (o clara), aqui ya tienen por donde 
empezar :-)


saludos

Eduardo Sacristan 


------------ próxima parte ------------

Clusters Beowulf, como construir una supercomputadora personal.

	Víctor E. Domínguez Flores 
		victor en matcuer.unam.mx 
		Instituto de Matemáticas, U. Cuernavaca, UNAM.
	Víctor Hugo Dorantes González
		vhdg en fciencias.unam.mx
		Facultad de Ciencias, UNAM.
	Fernando Magariños Lamas
 		mancha en matem.unam.mx
		Instituto de Matemáticas, C.U., UNAM.
	Eduardo Sacristán Ruiz-Funes
 		eduardo en matcuer.unam.mx 
		Instituto de Matemáticas, U. Cuernavaca, UNAM.
	Franco Toledo de la Cruz
		franco en matcuer.unam.mx 
		Instituto de Matemáticas, U. Cuernavaca, UNAM.

	En los últimos años, el rendimiento de los procesadores de las
computadoras personales ha crecido en forma impresionante, al mismo
tiempo que las distintas componentes de estos equipos han ido
aumentando también en calidad y desempeño. Junto a esto, el
extraordinario crecimiento del mercado y la producción a gran escala
de estas componentes, ha reducido significativamente sus precios y
ampliado las opciones de compra, poniendo a disposición del usuario
común, equipos con una capacidad similar o mayor al de las grandes
computadoras de hace tan sólo unos cuantos años.

	Una de las consecuencias de esto, al menos en el área del
cómputo científico y de la ingeniería, ha sido la creciente
sustitución de las estaciones de trabajo que se venían utilizando en
estos campos por equipos tipo computadora personal, con desempeños
similares o mejores y a precios significativamente más bajos.

	En este mismo sentido, en la búsqueda de resolver problemas
cada vez más complejos y utilizando equipos de menor costo, empezaron
a utilizarse computadoras personales o estaciones de trabajo
conectadas en red para resolver problemas que podían trabajarse
utilizando cómputo distribuido o en paralelo y que tradicionalmente se
resolvían con costosos equipos de supercómputo.

	La experiencia más importante en este terreno es la del
desarrollo de lo que hoy se conoce genéricamente como Cúmulos
(Clusters) Beowulf. Este proyecto, iniciado en el verano de 1994 por
Thomas Sterling y Don Becker, en el Center of Excellence in Space Data
and Information Sciences, CESDIS, del Goddard Space Flight Center de
la NASA, parte de considerar las posibilidades y ventajas que podría
ofrecer el construir, a partir de un cúmulo de computadoras
personales, una "supercomputadora personal", que utilizando las
técnicas del cómputo paralelo, permitiese resolver con equipos de bajo
costo algunos de los problemas de supercómputo con los que se
enfrentaban en dicho centro.

	A partir de esta experiencia y de sus buenos resultados, en un
creciente número de centros de investigación y universidades empezaron
a construirse equipos similares. El éxito que están teniendo este tipo
de equipos puede constatarse en la gran cantidad de cúmulos Beowulf
que hoy existen, construidos para los más diversos propósitos, en la
comunidad que se ha formado en torno a este proyecto, el que estos
sean ya considerados como una clase específica de computadoras y el
que entre ellos podamos encontrar algunos clasificados entre los Top
500 Supercomputers, una lista de las 500 supercomputadoras con mejor
desempeño en el mundo.

	Para explicarnos el impacto que están teniendo estos cúmulos
de computadoras personales y participar en su uso y desarrollo, es
importante revisar los distintos factores que confluyeron para hacer
posible la construcción y el éxito de los mismos.

	Como ya mencionamos, uno de los aspectos principales es el de
la disponibilidad de las componentes de las computadoras personales
comunes. Procesadores, memorias, discos duros, etc., cada vez mejores
y más rapidos, fabricados por muy diversas empresas a partir de
estándares aceptados por todos, que aseguran su interoperabilidad,
permitiendo la independencia del ususario de los fabricantes y con
precios cada vez más bajos.

	Parte importante en el ensamblado de estos equipos es la de
los medios utilizados para interconectar las computadoras
personales. El desarrollo de nuevas tecnologías, como las redes
Ethernet a 100 Mbits/s y los switches utilizados en estas, con la
capacidad y tiempos de respuesta necesarios para muchas de las
aplicaciones, están hoy disponibles a muy bajos precios y se han
convertido en una componente escencial de estos cúmulos.

	Otra de las componentes fundamentales para el funcionamiento
adecuado de estos equipos es el del software utilizado. La madurez,
fortaleza y estabilidad alcanzada por el sistema operativo Linux y sus
componentes, como los compiladores y otras herramientas GNU de la Free
Software Foundation, han jugado un papel central en el éxito que han
alcanzado estos equipos.
 
	Las ventajas que ofrece el software libre al tenerse los
programas fuente y hacer posible su adecuación a las necesidades de
los usuarios, ha permitido muchas mejoras que han contribuido a un
mejor desempeño de estos cúmulos y sus aplicaciones, cambios que
hubiesen sido imposibles con un sistema propietario. Muchas de las
mejoras que se desarrollaron originalmente para mejorar el
funcionamiento de los cúmulos forman ahora parte de las distintas
distribuciones de Linux.

	Junto al sistema operativo y sus componentes, otra de las
herramientas escenciales para la programación en paralelo en este tipo
de equipos con memoria distribuida son las bibilotecas para el paso de
mensajes. La estandarización de éstas y la disponibilidad de varias
implementaciones del PVM (Parallel Virtual Machine) y MPI (Message
Passing Interface) son parte esencial del ambiente de programación de
estos equipos.

	Es importante señalar como una de las principales ventajas de
este ambiente, el que los programadores no están sujetos a las
especificaciones o características particulares de los fabricantes de
los equipos y sistemas, como sucede al trabajar en algún equipo de
supercómputo particular. En estos, muchas de las optimizaciones de los
códigos dependen más del equipo o sistema particular en el que se
trabaja y no en las especificidades del problema a resolver. En un
ambiente abierto, como el de los cúmulos Beowulf, el programador sabe
que su código funcionará independientemente de las características
particulares del cúmulo en que correrá y que su código no se verá
mayormente afectado por posibles mejoras o cambios que puedan
hacérsele al sistema.

	Un ambiente de trabajo de este tipo no sólo libera al
programador de la dependencia del fabricante de un sistema
propietario, sino que permite que la experiencia adquirida vaya más
allá de la vida de este sistema particular y permite además, la
confluencia e intercambio de muchas otras experiencias. Ésta es otra
de las fuentes de la que se alimenta el proyecto Beowulf, la larga
experiencia, tanto positiva como negativa, de muchos desarrolladores
en el ambiente del supercómputo, que ha permitido que todos estos
factores confluyan con resultados tan positivos.

	Finalmente, el hecho de que los costos de los equipos sean
bajos y el del software nulo o prácticamente nulo, hacen que la
relación costo - desempeño de estos equipo sea varios órdenes de
magnitud superior a la de los equipos de supercómputo comerciales. Sin
que ésta sea la característica más importante, aunque así lo parezca,
hace que los cúmulos sean una opción muy atractiva, cuando no la
única, para hacerse de una supercomputadora.

	Pasemos ahora a ver con más detalle lo que es un Cúmulo
Beowulf, sus características, sus componentes, su instalación y su uso. Por
ser muy distintas y variadas las posibilidades que tenemos para armar
uno de estos cúmulos, haremos una descripción general de los mismos,
que recoja las características más importantes de los mismos sin
entrar en los detalles particulares.

	Un Cúmulo Beowulf es un ensamble de computadoras personales
conectadas a través de una red local con el propósito de funcionar
como si fuera un sólo equipo de cómputo. Para que esto sea posible y
vaya más allá de la utilización de los ciclos de cómputo libres en las
máquinas de una red de propósitos generales, es necesario armarlo y
configurarlo con ciertas características.

	Lo primero es que cada una de las computadoras es un nodo de
esta "supercomputadora". Estos nodos se encuentran comunicados entre
sí por algún tipo de red y están configurados para funcionar como
una parte de esta máquina, es decir, todos sus recursos están disponibles
para ser usados por la "supercomputadora".

	Generalmente se tiene un nodo (pueden ser más de uno,
dependiendo de las dimensiones y usos del cúmulo) que funciona como
consola, servidor o gateway del conjunto. Éste es el único nodo que
tiene conexión al exterior de la red y es sólo a través de éste que se
puede hacer uso del cúmulo. Por sus funciones, esta consola es el
único nodo que requiere de una tarjeta de video, monitor, teclado y un
ratón.

	Los otros nodos son computadoras personales comunes, en las que puede
prescindirse de algunas componentes y armarse en un gabinete,
utilizando solamente la tarjeta madre, el cpu, memoria, tarjeta de red
y disco duro, pudiéndose incluso prescindir de este último si el tipo
de aplicaciones con las que se vaya a trabajar no lo hacen
indispensable.

	Para armar los nodos, lo ideal es que todos ellos sean
iguales, armados con los mismos componentes, lo que facilitará la
instalación, administración y uso del cúmulo, pero también es posible
armarlo con equipos muy diversos entre sí. El tipo, marcas y
características de las componentes dependerán de las necesidades,
la disponibilidad de las mismas y el presupuesto con el que se cuente.

	Como ya mencionamos, una de las componentes más importantes
del cúmulo será la que se utilice para interconectar los nodos. La
capacidad de la red y la latencia de la misma son características muy
importantes que pueden determinar la forma o la posibilidad misma de
resolver un problema. Existen diversas opciones, como redes ethernet
utilizando switches u otras opciones cuando así sea necesario o
posible, redes más veloces pero tambien más caras, como la Gigabit
ethernet o la Myrinet.

	Sólo como un ejemplo de lo que hoy podemos considerar como un
"modelo estándar", podemos armar nuestro cúmulo de la siguiente manera:
    
  Un gabinete común con su fuente de poder.

  Un mother board que dependerá del procesador que utilicemos y en el
que tendremos que ser cuidadosos en su selección.

  Como procesador, la opción natural sería un Pentium II/III a 400/450
Mhz., pero podríamos también pensar en los AMD K-6, de un precio menor
y con muy buen rendimiento o si tenemos los recursos, optar por
procesadores alfa. Si no tenemos prisa, podríamos esperar a los merced
o a los AMD K-7.

  En cuanto a la memoria, realmente sólo depende de nuestro presupuesto
y necesidades, ponerles 128 mb. a cada nodo sería una opción muy
razonable.

  Para los discos duros tendremos mayores opciones. En el estado actual
del mercado, un disco duro IDE de 8 gb. es una buena seleción, optar
por un disco menor significa un pequeño ahorro, que no impactará
sensiblemente en el presupuesto y si en el desempeño de nuestros cúmulo.
Es posible también utilizar discos SCSI, pero por el tipo de
configuración es poco lo que se gana y la diferencia de precios aquí
si es significativa.

  Por su importancia, la tarjeta de red requiere de una selección
cuidadosa. En estos momentos la mejor opción es una tarjeta ethernet
de 100 mbts/s en cada nodo, conectando todos estos a través de un
switch de las mismas cracterísticas, que cumplirá muy bien la función
y cuyos precios son ya muy accesibles. Lo mejor es utilizar tarjetas
para las que existan buenos manejadores y que hayan probado ser
eficientes, un ejemplo de éstas son las que utilizan el chip tulip.

  Opcionalmente, a cada nodo podemos ponerle un lector de disquetes que
nos facilitaría la instalación y el mantenimiento del cúmulo, sin ser
un componente indispensable, su adquisición impactará muy poco en el
presupuesto. Lo mismo podemos decir de una tarjeta de video, que se
usaría solamente en labores de mantenimiento, existen muchas tarjetas,
muy baratas, que pueden cumplir esta función.

  El nodo central o consola podrá estar construido con las
mismas componentes, pero habrá que agregarle algunas más para que
pueda cumplir con sus funciones. Las obvias son el teclado, el raton y
una tarjeta de red más. Es muy conveniente ponerle un buen monitor y
una buena tarjeta de video. Un lector de CDs nos será muy útil para la
instalación del software en éste y los demás equipos. Podemos usar
como consola un equipo con mayor capacidad; mejor CPU, más memoria,
mayores o más discos, etc, una vez más esto dependerá de para qué lo
queremos y cuál es nuestro presupuesto.

	Siendo cada vez más difícil aventurarse en precisar los costos
que tendría un cúmulo con estas características, podemos considerar que
armar uno de éstos con 16 nodos podría hacerse con un presupuesto de
entre 200 y 250 mil pesos. También se tienen que considerar otros
posibles gastos, como podrían ser las fuentes de energía
ininterrumpible, ventiladores o algún mueble para montarlo.

	Finalmente, en cuestión de gastos es importante resaltar que
el mantenimiento de los cúmulos es prácticamente nulo, las garantías
de todos los componentes generalmente son de tres años o de por
vida. Si lo que nos preocupa son los tiempos de respuesta ante una
falla, podemos tener en bodega un nodo más, para utilizarlo ante
cualquier problema en algún equipo.

	Aunque estos nodos formen parte de lo que veremos como una
sola computadora, cada uno de ellos debe funcionar independientemente,
con su propio sistema operativo. Para ello, hay que instalar en cada
equipo el sistema y los paquetes necesarios para su funcionamiento,
configurándolos para que funcionen como nodos de nuestro cúmulo. Es
posible también que los nodos no tenga el sistema operativo
localmente, por no contar con disco duro o por que así lo hayamos
considerado más adecuado, el arranque se hará entonces cargando el
sistema de la consola o servidor, teniendo que configurar nuestro
cúmulo para esto.

	Al utilizar una red interna exclusivamente para conectar
nuestros equipos, podemos utilizar en los nodos las direcciones IP
reservadas para estos propósitos. Solo en el equipo de la consola, que
es el único que se conecta al exterior, deberemos usar una dirección
de la red que utilizamos para conectarnos al "resto del mundo". Para
ello, esta computadora deberá contar con dos tarjetas de red, una para
conectarse con el resto de los nodos y otra para conectarse al
exterior, siempre que así lo consideremos pertinente.

	Que tipo y cantidad de paquetes tendremos que instalar en los
nodos dependerá de la configuración y el uso que le daremos a nuestro
cúmulo. Como ejemplo, los compiladores sólo será necesario instalarlos
en el nodo consola, pues no estaremos compilando en el resto de los
nodos. Dependiendo de la biblioteca para el paso de mensajes y la
implementación de la misma que utilicemos, deberemos instalar en cada
nodo las componentes necesarias para poder utilizarla. Uno de los
parches al sistema operativo desarrollados para el Beowulf nos permite
unificar el espacio de nombres de los procesos que se ejecutarán en el
cúmulo, estos parches será también necesario aplicarlos en todos los
nodos. Existen o se están desarrollando diversas aplicaciones para
facilitar la administración de un cúmulo, que se basan en las
herramientas utilizadas para administrar un sistema Unix convencional
y que nos gustaría poder utilizar en el contexto de un cúmulo, cada
una de ellas habrá de requerir de su propia instalación.

	Habrá también que configurar distintos servicios; el NFS en el
servidor o consola y quizá también en cada nodo, instalar y configurar
servicios para la ejecución remota de programas, revisar la seguridad
de nuestro sistema y eliminar todo aquello que no se vaya a utilizar y
que lo haga vulnerable, definir quiénes y cómo harán uso del equipo y
donde residirán los archivos de los usuarios.

	Todo esto nos puede hacer ver sumamente complicado y tedioso
la instalación y configuracion de uno de estos cúmulos, sobre todo si
pensamos que habrá que repetir el mismo proceso para una gran cantidad
de nodos. Lo más importante aquí es tener desde un principio la mayor
claridad posible de cual será nuestra configuración final. A partir de
ésta, procederemos a instalar y configurar uno de estos nodos y
posteriormente, lo que haremos es clonar éste en el resto de los
equipos, para facilitar así la instalación del resto de los nodos. De
este modo el proceso se simplifica significativamente, automatizándolo
y haciéndolo incluso prácticamente independiente del número de nodos.

	Para facilitarnos esta labor, es importante revisar la
abundante documentación que puede encontrarse en la red con la
experiencia de muy diversos grupos que han instalado ya sus cúmulos y
que por la diversidad de los mismos, nos dará una visión muy rica y amplia,
difícil de obtener solamente a partir de nuestra experiencia personal.

	Una de las principales objeciones que se hacen a la
utilización de los cúmulos es que es necesario reprogramar nuevamente
las aplicaciones, utilizando las bibliotecas de paso de mensajes, de
este modo, lo que se ahorra en equipos, licencias de software y
contratos de mantenimiento, se tiene que reinvertir en tiempos y
salarios de programadores y administradores.

	Estas críticas pueden tener cierta validez en un principio,
pues es cierto que en el caso de contarse con una supercomputadora de
algún fabricante, los métodos de trabajo y programación que podrían
haberse estado utilizando deberán cambiar, lo que tomará tiempo y
recursos.

	Sin embargo, la independencia y el control que se obtiene
sobre los equipos y sobre las formas y métodos de trabajo es quizá una
de las razones más claras para hacer uso de los cúmulos Beowulf.
Ciertamente, los usuarios y administradores habrán de invertir tiempo y
recursos en capacitación, pero los resultados a largo plazo serán
siempre mucho mayores que los que podrían esperarse con una de las
máquinas de un fabricante de los ya conocidos equipos convencionales de
supercómputo, que en cualquier momento puede cambiar sus sistemas o
incluso desaparecer, como ya ha sucedido con varios de ellos.

	Es importante señalar que gracias a su bajo costo, éste ha
permitido a pequeños grupos, con escasos recursos, la construcción de
su "supercomputadora personal" y hoy es posible encontrar que estos
cúmulos están siendo utilizados para los más diversos propósitos, más
allá de los problemas de cómputo científico que les dieron origen,
como procesamiento de imagenes, servidores de WWW o manejo de bases de
datos.

	En particular, un papel importante que este tipo de equipos
pueden jugar es en el de la formación de recursos humanos. Con ellos
es posible dotar a las escuelas de cómputo de una o varias
"supercomputadoras", donde podrán "jugar" y formarse nuevas
generaciones de programadores, algo en lo que hasta hace poco era
imposible siquiera pensar, por el alto costo y el uso restringido que
tenían las supercomputadoras comerciales.

	Y ante los señalamientos de que con estos cúmulos no se cuenta
con el soporte de los fabricantes, podemos señalar que en torno a este
proyecto se ha ido conformando una comunidad muy similar a la de otros
proyectos de software libre o abierto. A partir de ella contamos, como
ya mencionabamos, con una amplia documentación de distintos proyectos
y experiencias, incluyendo algunos libros, listas de discusión, una
gran cantidad de software disponible, con parches para los sistemas,
herramientas de administración y programación, benchmarks, hasta
programas completos, bien documentados, para resolver problemas
concretos, que pueden ser utilizados o servir de ejemplo o punto de
partida para resolver problemas similares.

	En esta misma comunidad se están desarrollando nuevas
alternativas que en un futuro cercano harán que algunas de las
limitaciones que aún se tienen con estos cúmulos puedan
superarse. Como ejemplo podríamos mencionar algunos de estos
proyectos que ya tiene un alto grado de avance, como los relacionados
con establecer un sistema de memoria virtual compartida, que permita
el acceso transparente de cualquier CPU al conjunto de la memoria o el
Virtual Interface Architecture, VIA, para tener un acceso más directo
entre la aplicación y los dispositivos de comunicación.





Más información sobre la lista de distribución Ayuda