martedì 27 febbraio 2007

Un cluster (beowulf-style) in salotto

In breve: mi sono fatto un cluster in salotto prendendo in prestito con scuse puerili i portatili dei miei coinquilini. Sono arrivato ad usare la potenza di calcolo di quattro processori contemporaneamente.

In dettaglio: non sono mai stato un fanatico della potenza, ma quando è il momento di darci giù di brutto sono sempre pronto :)
Da diversi discorsi che aleggiavano nella mia mente ho capito che farsi un bel clusterino fatto in casa era solo questione di voglia e di tempo.
Cerca che ti ricerca (usando la solita wikipedia) ho scoperto che esiste una distro Linux di nome ParallelKnoppix. Si scarica e si masturbizza su un bel CD come quelli dei bei tempi andati.
Tra scarico e masterizzazione se ne vanno una ventina di minuti, ma vi dico subito che la fase software termina qui.

Adesso c'è il momento hardware (quello più rognoso in genere). Servono le seguenti cose:
- uno switch di rete, quelli per giocare in rete nelle LAN (io ho un 8 porte preso a 34€).
- tutti computer che vi pare, basta che

  1. almeno uno di questi abbia un lettore CD/DVD da quattro soldi
  2. che quello con il lettore suddetto sia un computer decente (almeno un P4). questo soltanto per non aspettare troppo, ma un qualsiasi cesso lettoreCD-dotato va bene.
  3. tutti i computer abbiano la scheda di rete. Anche 10/100 suona bene.
  4. non è richiesto nessun disco rigido (!)
  5. potete usare un monitor solo per tutti i PC.
- i cavi per mettere insieme tutto.

Io me la sono cavata con i portatili (3) dei miei coinquilini più il mio (totale: 4).
Ho messo tutti PC in rete con lo switch e ho fatto presente ai BIOS di ogni PC che il primo BOOT si fa da LAN (anche detto PXE).
Fase di montaggio (comprese le giustificazioni per fregare i computer altrui) poco più di un quarto d'ora.

Pronti. Spengo tutti i portatili e metto il CD nel mio. Riavvio...
Magicamente entro in una Knoppix con KDE e nel menu scelgo Configure Cluster. Seguo le istruzioni passo passo (fa tutto da sè) e magicamente sto lavorando con quattro processori contemporaneamente! Questa volta in cinque minuti ho fatto tutto.
Notare bene che si deve sapere in anticipo quale modulo (roba.ko) usano le schede di rete dei vari computer. Se qualcosa non funziona dipende quasi sicuramente da questo dettaglino.

Adesso è il momento di giocare. Nella \home\example o qualcosa del genere vale la pena dare un'occhiata, qui ci sono un po' di programmini che usano l'architettura MPI. Il più divertente è quello che calcola il pi greco usando una serie che vi converge (in FORTRAN).
La cosa che mi intruppa è provare con un solo pc e poi montare la rete e rifare la prova. Basta un cazzo di cronometro per rendersi conto che il tempo di calcolo scende giù di brutto (22 secondi con un solo pc, 11 secondi con due pc).

Commenti e sviluppi futuri:
  • ovviamente c'è qualche magagna sulla parte finale, però c'è da divertirsi, soprattuto quando ci si rende conto di come viene diviso il lavoro tra i processori. La sorpresa l'ho avuta aggiungendo un computer molto lento al cluster (unCelerone anteguerra semidistrutto); il tempo di lavoro aumenta (!).
  • ci vuole pochissmo x farlo. una volta capito come si fa ci si mette nemmeno 20 minuti.
  • il sistema è un po' fine a se stesso, a meno che non mi venga in mente qualcosa di ganzo, tipo una bella simulazione che richiede tanto calcolo.
  • sapere un po' di C++ non guasta.
  • vorrei provare un benchmark per vedere quanto pompa tutto l'ambaradan.
  • un bel giro tra gli amici a rimorchiare PII e simili potrebbe essere utile per fare qualcosa con una decina di macchine.

8 commenti:

Panaro ha detto...

Ciao bello... smanettavo per la rete nella ricerca di qualcuno che stesse tentando la mia stessa cosa. Molto interessenta la tua prova, hai provato Octave?

Volevo installarci sul sistema parallelo BOINC ma non sono sicuro funzioni, pensavo anche a del renderig massivo!

Notte!

ps: ho aggiornato con un 200 risposte il tuo simpatico oracolo :)

Anonimo ha detto...

da un collegamento dal wikipedia mi aspettavo qualcosa di diverso, è comunque interessante sapere che qualcuno lo ha provato.
Tuttavia, senza mezzi termini, perchè ti esprimi come un cogli0ne?

(lo 0 lo ho inserito per evitare eventuali filtri antispam)

jaegermeister ha detto...

Grazie della tua esperienza!

Ho appena stasera finito di "scannare" 9 pc di cui 7 P2, un celerone ed un P3.... stavo seriamente pensando di infilare tutte le MB in un vecchio armadio in disfacimento da recuperare e di crare il cluster.... l'unica cosa che mi ponevo come problema era... l'alimentazione! Bisognerebbe infatti non usare un alimentatore per ogni pc ma uno splitter, ne esistono?

Ciao!

sushi john ha detto...

scusate il ritardo con cui rispondo, ma essendo un blog non guardo tanto spesso i vecchi post =)

@panaro) in realtà le mie prove su cluster casalingo si basano su quello che leggi nel post. l'oracolo ti ringrazia =P

@anonimo) grazie per la tua critica costruttiva (succh1a-cazz1!)

@jaeg) se combini qualcosa di interessante fammi sapere, anche perché i P2 mi sembrano molto indicati per questo sporco lavoro.
- bisognerebbe fare delle prove, tipo vedere quanti P2 ci vogliono per competere con un P4 solo, e se la potenza scala linearmente (ne dubito). mi spiego: se per eguagliare un P4 servono (dico x dire) 5 P2, per eguagliare 2 P4, servono 10 P2 o di più?
- per l'alimentazione: boh!
- l'ideale è avere i PC tutti uguali, modelli diversi causano dei simpatici collo di bottiglia.

saluti.

Matrix71 ha detto...

Ma funziona ancora il sito di parallel-knoppix !?!?

sushi john ha detto...

il vecchio link è sparito.
questo dovrebbe essere valido: http://pareto.uab.es/mcreel/PelicanHPC/download/

occhio però, non ho provato a ripetere la procedura del post con questo link.

Claudio Carcaci ha detto...

Si, ok, bello ma l'ideale sarebbe trovare una applicazione Server da installare sui pc in rete (sotto Windows, Linux, MacOS, ecc...) che parte all'avvio e sta silente.
Poi su un pc si installa l'applicazione client a cui si dice: esegui abc.exe (un programma QUALSIASI, non parallelo), il client esplora la rete e esegue l'applicazione in parallelo per quanto possibile.
Esiste una cosa del genere?
So che si può fare con windows server 2003/2008...

Massy ha detto...

Per chi fosse ancora interessato a questo progetto, può trovare tutto sul sito http://www.parallelknoppix.info/

Massy