Realizzare un cluster con ubuntu server

hacky2106

Utente Attivo
31
0
Salve a tutti,

vorrei sapere se c'è qualche guida/manuale/libro o altro.... per realizzare un cluster con ubuntu partendo da zero.

Ho trovato poche cose in internet, soprattutto tutte abbastanza complicate, quindi vorrei sapere se c'è qualcosa, magari anche un libro a pagamento che spieghi passo passo come è possibile realizzarlo.

Eventualmente se ci riesco potrei provare a scrivere una piccola guida qui sul forum, dato che credo, l' argomento possa interessare a molti e in rete non c'è molta documentazione soprattutto in italiano.
 

Ico Bellungi

Utente Èlite
2,920
626
parto dal presupposto che non ne ho la minima idea...
Se cerchi manuali sulla clusterizzazione su linux ne trovi un sacco, se cerchi qualcosa Ubuntu-oriented invece troverai poca roba.
Ubuntu però è anch'esso linux, quindi...

Il problema è che Ubuntu è una distribuzione ancora molto "casalinga"... (nel senso che la usa la gente a casa, non nel senso che è fatta in casa).

Per curiosità, tanto una risposta non saprò mai dartela: che tipo di cluster devi creare? roba active-passive con le risorse che switchano da una parte all'altra o roba di cloud computing? Nel primo caso dovresti cavartela senza bestemmiare troppo, nel secondo la situazione mi sa che si fa un po' più pelosa
 

pabloski

Utente Èlite
2,868
916
dipende da cosa vuoi che questo cluster faccia

da un lato puoi creare un cluster beowulf che è essenzialmente basato su computer connessi in rete e che si scambiano informazioni tramite librerie di message passing

questo tipo di macchine in genere viene usato per far girare software paralleli, cioè compilati apposta per essere eseguiti su un cluster

un altro metodo è quello adottato da Condor, OpenMosix e LinuxPMI...in pratica si tratta sempre di una rete di computer, però configurati per apparire una sola macchina ( qualsiasi job lanciato da qualsiasi macchina viene gestito dall'intero cluster ) e soprattutto non c'è bisogno di software compilato ad hoc...

ovviamente in questo caso sono i processi che vengono trasferiti da un nodo all'altro....quindi se per esempio hai un programma che gira come processo unico, non aspettarti che il suo carico di lavoro venga distribuito a tutti i nodi del cluster

comunque puoi orientarti su

- Condor Download Condor
- Openmosix ( defunto ) openMosix, an Open Source Linux Cluster Project
- LinuxPMI ( continuazione di openmosix ) WikiServer

se vuoi realizzare un cluster beowulf usa OSCAR OSCAR Project ? Trac
 

hacky2106

Utente Attivo
31
0
Bene allora partiamo dai programmi che dovrei usare:

1) Ubuntu Server "clusterizzato"
2) MySQL
3) PHPMyAdmin
4) Scripting e calcoli in linguaggio PHP
5) CUDA (tecnologia molto interessante) --> per ora dispongo solo di una GeForce 8800 Ultra ma se il vantaggio di far girare i calcoli con questa tecnologia è elevato potrei comprare una scheda, inoltre tra poco Intel farà uscire le Larrabee....
6) Apache2

Il cluster dovrebbe far girare dei calcoli molto corposi, per darvi un' idea, per fare un calcolo con un Q6700 e 8 GB di RAM, usando la CPU al 100% (ovvero facendo girare 4 programmini alla volta da me creati) con Access e Visual Basic, il mio computer ha impiegato 20 gg (chiaramente è rimasto accesso 20 gg di fila senza mai fermarsi!!).

PROBLEMI:

CLUSTER BEOWFUL --> Non so scrivere (e non so quanto sia complicato scrivere codice in parallelo)....anche qui servirebbero degli approfondimenti....

OPENMOSIX --> Allora se ho capito bene.....diciamo che abbiamo 2 quadcore nel cluster, sarebbe come avere un unico computer con 8 core giusto? Quindi se scrivi un programma basterebbe lanciarlo 8 volte per sfruttare tutto il cluster giusto?

Ma quali sono più nello specifico i vantaggi e gli svantaggi di usare una o l' altra soluzione?

Mi chiedo inoltre serve una particolare distribuzione di Linux? Mi ricordo che quando avevo messo Centos durante l' installazione c' era un' opzione per il Clustering.... Però mi piacerebbe fare il tutto con Ubuntu Server 9.04 perchè mi riconosce facilmente tutto l' hardware più nuovo...

Nel cluster ogni macchina è a sè stante ovvero ha la sua CPU, la sua RAM, il disco fisso ecc... ovvero è una macchina a tutti gli effetti.

ATTUALMENTE l' hardware a disposizione sono 2 desktop un q6700 e un q9650 entrambi con 8 GB di RAM, successivamente se riesco a mettere in piedi il cluster vorrei aggiungere un server più professionale con 2 XEON e 40/50 GB di RAM. Adesso mi interessa capire come costruirlo.

In pratica spiegami un attimo...

_ Condor, Openmosix, LinuxPMI e OSCAR sarebbero tutte patch del kernel? Possono essere montate su qualsiasi distribuzione?


PS HO trovato questa guida e sembrerebbe molto semplice.... http://linux.com/community/blogs/Building-a-Beowulf-Cluster-in-just-13-steps-.html
però è per un cluster Beowulf. Cosa ne pensate?
 

pabloski

Utente Èlite
2,868
916
1) Ubuntu Server "clusterizzato"

bisogna capire clusterizzato in che modo....si condividerà solo lo spazio disco? anche le cpu? e le gpu?


risolvi facilmente con mysql cluster MySQL :: MySQL Cluster

3) PHPMyAdmin

questo può benissimo girare su una singola macchina, oppure bisogna averne uno installato su ogni macchina con un reverse proxy che dirotta le richieste alle varie macchine del cluster

però così ricadiamo nel caso dei cluster high availability, il che vuol dire che ci vuole altro software accessorio che dirotti le richieste dei client a server specifici

in questo caso devi usare Heartbeat HomePage: Linux HA

4) Scripting e calcoli in linguaggio PHP

questo è il tipico caso in cui Condor o LinuxMPI sono utili....in pratica lanci tante volte lo stesso script e ovviamente ad ognuna delle copie dello script bisognerà dare solo una parte del lavoro

l'importante è che ogni volta che lanci lo script, viene creato un nuovo processo che viene migrato su uno dei server a seconda del carico sulle cpu

5) CUDA (tecnologia molto interessante) --> per ora dispongo solo di una GeForce 8800 Ultra ma se il vantaggio di far girare i calcoli con questa tecnologia è elevato potrei comprare una scheda, inoltre tra poco Intel farà uscire le Larrabee....

per CUDA il problema è più complesso perchè bisogna lavorare in proprio...in pratica software come Condor distribuiscono il lavoro misurando il carico sulle cpu dei computer che fanno parte del cluster

però quando parliamo di CUDA parliamo di gpu e il carico di una gpu non viene misurato da nessun programma esistente....quindi dovresti scrivertelo da solo un software che distribuisce il lavoro in base al carico sulle gpu

in questo caso il mio consiglio è di comprare un Nvidia Tesla High Performance Computing (HPC) - NVIDIA Tesla many core parallel supercomputing

tieni presente che una gpu ha una capacità da 100 a 200 volte superiori rispetto ad una cpu nel fare calcoli matriciali....quindi con 4 gpu nvidia è come avere al lavoro 400 cpu intel


nel caso di apache se ho capito bene ti serve semplicemente che le richieste dei client vengano suddivise tra i vari server

in questo caso puoi usare il dns round robin, mettendono invece di un solo campo A tanti campi A ( uno per ogni IP )


Il cluster dovrebbe far girare dei calcoli molto corposi, per darvi un' idea, per fare un calcolo con un Q6700 e 8 GB di RAM, usando la CPU al 100% (ovvero facendo girare 4 programmini alla volta da me creati) con Access e Visual Basic, il mio computer ha impiegato 20 gg (chiaramente è rimasto accesso 20 gg di fila senza mai fermarsi!!).

certamente parliamo di calcoli pesanti, ma io se fossi in te valuterei l'ipotesi di usare un'altra architettura

CUDA ad esempio è un'ottima idea, ma bisogna analizzare il tipo di calcoli che gli farai fare....ad esempio CUDA permette di accelerare i calcoli matriciali, ma se devi per esempio implementare algoritmi di ricerca su stringhe noterai che una cpu è più veloce

quindi a seconda del tipo di lavoro si può scegliere l'una o l'altra

un'ipotesi che butto lì è quella degli fpga....potresti comprare o costruire una scheda basata su una decina di fpga virtex o spartan e creare un computer ad hoc per l'esecuzione degli script che ti interessa

CLUSTER BEOWFUL --> Non so scrivere (e non so quanto sia complicato scrivere codice in parallelo)....anche qui servirebbero degli approfondimenti....

non è molto difficile, bisogna ovviamente, in fase di progettazione, tener conto della sincronizzazione tra i processi/thread, quindi usare semafori e mutex laddove necessario, salvaguardare la consistenza dei dati, ecc...

però usando le librerie mpi, tutta la parte di passaggio di dati e comandi diventa banale

OPENMOSIX --> Allora se ho capito bene.....diciamo che abbiamo 2 quadcore nel cluster, sarebbe come avere un unico computer con 8 core

si, perchè il lavoro viene diviso sui core e sui nodi del cluster

giusto? Quindi se scrivi un programma basterebbe lanciarlo 8 volte per sfruttare tutto il cluster giusto?

esatto, la migrazione avviene a livello di processo...quindi un programma multithread continuerà ad essere diviso fra i 4 core, però rimarrà vincolato a girare sul computer da cui è stato lanciato

i processi invece possono essere spostati sugli altri computer del cluster

Ma quali sono più nello specifico i vantaggi e gli svantaggi di usare una o l' altra soluzione?

nelle architetture beowulf hai il totale controllo sul flusso del programma e sull'allocazione delle cpu

nel caso mosix invece i processi vengono migrati per essere allocati alla meno peggio....però se ad esempio il processore n.3 ha terminato il lavoro e non ci sono altri lavori da svolgere, resterà in idle aspettando che anche gli altri finiscano

nel caso beowulf invece, il programma ( creato da te ) può accorgersi che il processore n.3 è in idle e quindi trasferirgli uno o più jobs da un altro processore che invece è sovraccarico

Mi chiedo inoltre serve una particolare distribuzione di Linux? Mi ricordo che quando avevo messo Centos durante l' installazione c' era un' opzione per il Clustering.... Però mi piacerebbe fare il tutto con Ubuntu Server 9.04 perchè mi riconosce facilmente tutto l' hardware più nuovo...

no, ovviamente puoi usare quella che vuoi....chiaramente alcune distribuzioni sono già predisposte per questo tipo di attività e preinstallano tutti i software necessari

CentOS è una di queste, c'è Rocks Clusters Rocks Clusters che fornisce tutto out of the box

Nel cluster ogni macchina è a sè stante ovvero ha la sua CPU, la sua RAM, il disco fisso ecc... ovvero è una macchina a tutti gli effetti.

si, l'unica differenza è che mette queste risorse in comune

_ Condor, Openmosix, LinuxPMI e OSCAR sarebbero tutte patch del kernel? Possono essere montate su qualsiasi distribuzione?

alcune sono patch, altri sono demoni, quindi non è necessario modificare per forza il kernel

Condor e OSCAR ad esempio funzionano tramite demoni


non dimenticare questo Welcome to Apache Hadoop Core!
qui Gamblers doth Idyl Blog Archive HOWTO: Getting Condor going on an cluster of Ubuntu machines with a custom algorithm. è spiegato come usare Condor

qui Condor Project Homepage trovi tutte le info su condor, che è il mio preferito :D
 

hacky2106

Utente Attivo
31
0
azzo...ti vedo parecchio ferrato sull' argomento, ma hai già realizzato qualcosa di simile?


adesso mi rileggo tutto con calma..!
 

pabloski

Utente Èlite
2,868
916
azzo...ti vedo parecchio ferrato sull' argomento, ma hai già realizzato qualcosa di simile?


adesso mi rileggo tutto con calma..!

si, mi è capitato di dover passare questo guaio :D

e a dirla tutta da quando nvidia ha inventato tesla i problemi si sono dimezzati

proprio a questo proposito ti invito a dare un'occhiata qui E4 Computer Engineering S.p.A. | The Professional Solution

e soprattutto a questo pdf http://www.e4company.com/nvidia/E4_Nvidia.pdf

il costo è certamente non proprio bassissimo, ma 5000€ sono sempre meno di quello che si va a spendere per un cluster con le medesime capacità

però bisogna analizzare prima di tutto il tipo di jobs da svolgere per capire se è accelerabile tramite gpu o meno
 

hacky2106

Utente Attivo
31
0
E' tutto molto interessante quello che hai scritto. Soprattutto CUDA mi sembra una buona idea...Però ho una domanda.... è complicato fare il collegamento ad un database con CUDA?

I calcoli che devo fare sono essenzialmente calcoli finanziari, non complicati, ma sono tanti! Quindi i dati sono dentro un database (attualmente uso MySQL) e mi chiedo se il collegamento da CUDA possa avere dei problemi?
 

pabloski

Utente Èlite
2,868
916
no cuda e la gpu verranno usati solamente per fare calcoli, sarà la cpu ad occuparsi del reperimento dei dati dal database e dell'invio alla gpu

cuda utilizza le texture per fare calcoli....in pratica crei una matrice bidimensionale e tramite una funzione opengl la mappi come texture nella memoria della gpu
 

hacky2106

Utente Attivo
31
0
Ho riletto e pensato.....

CUDA mi sembra una buona soluzione e qui avrei una scheda geforce 8800 ultra su cui gira cuda, con la quale potrei fare delle prove....

Ora in pratica partendo dal database di mysql e dall` applicazione scritta in php, passo passo riusciresti a dirmi cosa dovrei fare?
 

pabloski

Utente Èlite
2,868
916
Oddio passo passo è un pò difficile, perchè la storia è quanto meno complicata.

Visto il tuo caso specifico ti consiglio di dare un'occhiata qui Scaling PostgreSQL using CUDA | High Scalability

poi qui CUDA Tutorial /// Parallel Panorama ///

infine qui https://visualization.hpc.mil/wiki/GPGPU

i concetti importanti da conoscere per non creare confusione sono:

- cuda non è un pezzo di hardware, ma un framework di sviluppo

- cuda usa un linguaggio speciale basato sul c con estensioni nvidia

- cuda usa un compilatore speciale per compilare il codice che verrà eseguito come shader sulla cpu

in sostanza tutto quello che serve è una scheda nvidia, l'sdk per lo sviluppo e driver recenti che supportino cuda


la confusione nasce quando entrano in scena termini come opencl, qualche altro tutorial sfrutta directx, altri ancora opengl ( ce n'era uno molto interessante scritto da un ingegnere ibm su come usare opengl per eseguire calcoli con la gpu ma non riesco a trovarlo )

opencl ad esempio è un linguaggio di programmazione per gpu generico, quindi vuol dire che è usabile pure con schede ati....se usi cuda non ti serve opencl

directx e opengl essendo api per la programmazione delle gpu ( per finalità grafiche per lo più ) hanno ovviamente la possibilità di accedere alla gpu e di svolgere almeno in parte le stesse funzioni che svolge cuda

però se vuoi semplificarti la vita e avere un ambiente di sviluppo coerente scegli cuda e lascia perdere le altre scelte

opencl è l'unico che può rappresentare una reale alternativa a cuda, però bisogna imparare un nuovo linguaggio e imparare ad usare strumenti come llvm ( che è un sofisticato compilatore bytecode ).....per ora che io sappia Apple è l'unica che usa opencl per la programmazione delle gpu

infine leggendo i vari tutorial e articoli sul tema potresti trovare termini strani ( kernel ad esempio )....kernel in genere è un termine che può suonare alquanto strano perchè ricorda i sistemi operativi

per le gpu è normale, perchè tieni presente che non gira un OS su una gpu e quindi ogni routine di fatto s'interfaccia direttamente con i registri hardware e quindi si tratta di software a basso livello....il termine kernel in questo caso è usato per indicare l'unità atomica di esecuzione del codice, quello che i grafici chiamano shader

inoltre dai un'occhiata a questo articolo Nvidia CUDA vs ATI Stream: le schede grafiche di ultima generazione accelerano la compressione dei video - Tech360 il sito di notizie, recensioni e video su tecnologia e videogiochi

è utile perchè fa capire com'è organizzata l'architettura di una scheda grafica moderna

all'inizio può sembrare complesso ma non lo è....il punto è che una gpu è molto diversa da una cpu e bisogna capire come lavora per poi riuscire a programmarla adeguatamente
 

hacky2106

Utente Attivo
31
0
Ok ho letto un po' in giro e poi ho trovato anche questo video dell' università di stanford che mi sembra interessante:

YouTube - Scalable Parallel Programming with CUDA on Manycore GPUs

Sul CUDA forum mi hanno suggerito che sarebbe possibile:

1) Recuperare i dati dal database tramite PHP
2) Scrivere un programma in C++ per mandare i dati alla GPU
(forse è simile a quello che mi avevi detto....)

Dimmi se il procedimento che ho intuito ha senso (ho qualche dubbio):

WINDOWS
a) Scrivo il codice con easyPHP e recupero i dati, scrivo i dati in un file
b) Scrivo il codice in C++ dove all' interno ci sarà il codice CUDA.... con cosa? Posso usare Visual Studio 2008? o devo usare CUDA Visual Profiler?
c) Faccio il lavoro sui dati con la GPU e salvo in un nuovo file
d) Scrivo in PHP per riportare i dati "lavorati" dentro il database?

E' giusta questa procedura?

Sotto Linux la procedura è la stessa? Cosa posso usare per scrivere in C++?
 

pabloski

Utente Èlite
2,868
916
1) Recuperare i dati dal database tramite PHP
2) Scrivere un programma in C++ per mandare i dati alla GPU
(forse è simile a quello che mi avevi detto....)

si, una possibilità è recuperare i dati tramite php e inviarli alla gpu tramite un programma c con le apposite istruzioni cuda

tuttavia non sei obbligato ad usare il c....python possiede due estensioni per cuda, una è pycuda e l'altra è pystream

per farti un'idea di come funziona Developer Resource: Python and CUDA

il vantaggio è che hai la possibilità di usare un linguaggio di alto livello, veloce e pulito e in più sfruttare la potenza della gpu....senza contare che potresti usare python anche per recuperare i dati dal db, evitando quindi di dover usare dei file intermedi per lo storage dei record


WINDOWS
a) Scrivo il codice con easyPHP e recupero i dati, scrivo i dati in un file
b) Scrivo il codice in C++ dove all' interno ci sarà il codice CUDA.... con cosa? Posso usare Visual Studio 2008? o devo usare CUDA Visual Profiler?
c) Faccio il lavoro sui dati con la GPU e salvo in un nuovo file
d) Scrivo in PHP per riportare i dati "lavorati" dentro il database?

si ovviamente funziona....potresti sfruttare il c anche per leggere i record dal db, oppure come ho suggerito sopra usare python per entrambe le funzioni

visual studio non ha il supporto a cuda però ci sono dei plugin non ufficiali How to Integrate CUDA with Visual C++ Sharing my thoughts…

Sotto Linux la procedura è la stessa? Cosa posso usare per scrivere in C++?

il migliore per cuda è netbeans....ovviamente che l'sdk anche per linux scaricabile dal sito nvidia
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!