Risultati da 1 a 14 di 14

Discussione: Realizzare un cluster con ubuntu server

  1. #1
    Utente Attivo
    Data Registrazione
    28-08-08
    Messaggi
    27
    Mi Piace
    0
    Specifiche del sistema

    Predefinito Realizzare un cluster con ubuntu server

    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.

  2.  
    Stanco della Pubblicità? Registrati

  3. #2
    Moderatore
    Data Registrazione
    13-04-05
    Messaggi
    1,051
    Mi Piace
    33
    Specifiche del sistema

    Predefinito

    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
    ---Che solo luce e amore ha per confine---

  4. #3
    Utente Attivo
    Data Registrazione
    30-03-07
    Messaggi
    744
    Mi Piace
    3
    Specifiche del sistema

    Predefinito

    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

  5. #4
    Utente Attivo
    Data Registrazione
    28-08-08
    Messaggi
    27
    Mi Piace
    0
    Specifiche del sistema

    Predefinito

    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/Bui...13-steps-.html
    però è per un cluster Beowulf. Cosa ne pensate?

  6. #5
    Utente Attivo
    Data Registrazione
    30-03-07
    Messaggi
    744
    Mi Piace
    3
    Specifiche del sistema

    Predefinito

    Citazione Originariamente Scritto da hacky2106 Visualizza Messaggio
    1) Ubuntu Server "clusterizzato"
    bisogna capire clusterizzato in che modo....si condividerà solo lo spazio disco? anche le cpu? e le gpu?

    2) MySQL
    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

    6) Apache2
    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

  7. #6
    Utente Attivo
    Data Registrazione
    28-08-08
    Messaggi
    27
    Mi Piace
    0
    Specifiche del sistema

    Predefinito

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


    adesso mi rileggo tutto con calma..!

  8. #7
    Utente Attivo
    Data Registrazione
    30-03-07
    Messaggi
    744
    Mi Piace
    3
    Specifiche del sistema

    Predefinito

    Citazione Originariamente Scritto da hacky2106 Visualizza Messaggio
    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

    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

  9. #8
    Utente Attivo
    Data Registrazione
    28-08-08
    Messaggi
    27
    Mi Piace
    0
    Specifiche del sistema

    Predefinito

    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?

  10. #9
    Utente Attivo
    Data Registrazione
    30-03-07
    Messaggi
    744
    Mi Piace
    3
    Specifiche del sistema

    Predefinito

    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

  11. #10
    Utente Attivo
    Data Registrazione
    28-08-08
    Messaggi
    27
    Mi Piace
    0
    Specifiche del sistema

    Predefinito

    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?

  12. #11
    Utente Attivo
    Data Registrazione
    30-03-07
    Messaggi
    744
    Mi Piace
    3
    Specifiche del sistema

    Predefinito

    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

  13. #12
    Utente Attivo
    Data Registrazione
    28-08-08
    Messaggi
    27
    Mi Piace
    0
    Specifiche del sistema

    Predefinito

    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++?

  14. #13
    Utente Attivo
    Data Registrazione
    30-03-07
    Messaggi
    744
    Mi Piace
    3
    Specifiche del sistema

    Predefinito

    Citazione Originariamente Scritto da hacky2106 Visualizza Messaggio
    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

  15. #14
    Utente Attivo
    Data Registrazione
    28-08-08
    Messaggi
    27
    Mi Piace
    0
    Specifiche del sistema

    Predefinito

    sei un grande!

  16.  
    Stanco della Pubblicità? Registrati

Informazioni Discussione

Utenti che Stanno Visualizzando Questa Discussione

Ci sono attualmente 1 utenti che stanno visualizzando questa discussione. (0 utenti e 1 ospiti)

Discussioni Simili

  1. Server streaming con ubuntu server
    Di :V: nel forum Network
    Risposte: 1
    Ultimo Messaggio: 22-01-2010, 16:35
  2. ubuntu 6.06.1 server
    Di batman nel forum Linux e altri sistemi operativi
    Risposte: 19
    Ultimo Messaggio: 10-07-2007, 11:52
  3. server dhcp con ubuntu
    Di cucumiao nel forum Linux e altri sistemi operativi
    Risposte: 2
    Ultimo Messaggio: 21-05-2007, 09:05
  4. Realizzare un cluster tra 2 PC in rete con Ubuntu
    Di lukepet nel forum Linux e altri sistemi operativi
    Risposte: 2
    Ultimo Messaggio: 12-10-2006, 22:11
  5. Realizzare DVD con Ubuntu 6.06 .. programmi?
    Di homezappa nel forum Linux e altri sistemi operativi
    Risposte: 8
    Ultimo Messaggio: 08-10-2006, 19:06

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
⇧ Torna Su