[Previo por Fecha] [Siguiente por Fecha] [Previo por Hilo] [Siguiente por Hilo]
[Hilos de Discusión] [Fecha] [Tema] [Autor]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
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.