La settimana scorsa ho usato ogni Raspberry Pi che avevo per costruire un cluster di calcolo HexaPi a sei nodi.
Da allora mi è stato chiesto più volte: a cosa serve? Quindi darò un’occhiata all’ultima parte del Raspberry Pi Projects – Build an OctaPi, e aggiungerò anche un mio semplice esempio.
Oh, e ho aggiunto un altro server Raspberry Pi al cluster, sempre rispettando la mia regola del ‘non ci sono due server uguali’, quindi ora è effettivamente un cluster HeptaPi a sette server. Alla fine di questo post aggiungerò una descrizione di alcuni dei nuovi hardware che ho acquistato e utilizzato per questo progetto.
Primo, a cosa serve? Ho un semplice esempio dalla mia esperienza personale. Viaggio abbastanza spesso, mi piace scattare molte foto con una fotocamera SLR digitale, e spesso faccio panorami a più immagini (le Alpi svizzere sono soggetti particolarmente buoni per questo tipo di fotografia). Quando torno a casa, uso hugin panorama photo stitcher per unire questi gruppi di immagini individuali in panorami molto più grandi.
Se faccio questa elaborazione di panorami su un singolo computer, devo fare io stesso la ‘programmazione’ — ciò significa che devo tenerlo d’occhio, e quando un panorama è finito devo iniziare il successivo.
Se divento un po’ più ambizioso, posso impostare un programma di controllo batch e poi mettere in coda i gruppi di immagini da unire, ma vengono comunque fatte solo una dopo l’altra. Se ho più computer disponibili per il compito, devo poi fare io stesso la distribuzione delle immagini e il recupero dei panorami, e di nuovo devo fare io stesso la ‘programmazione’ su ogni computer. In entrambi i casi, è un processo relativamente noioso e che richiede tempo, e sfortunatamente spesso mi ritrovo a corto di tempo (o pazienza) prima che tutte le mie immagini siano state elaborate.
Con il cluster HeptaPi, potrei impostare un processore batch, basato su uno degli esempi Python inclusi nel progetto cluster OctaPi, e poi installare hugin su ciascuno dei server del cluster. Poi potrei fornire gruppi di immagini al processore batch, che le distribuirebbe ai server del cluster per l’elaborazione, e riceverebbe l’immagine panoramica finita come ritorno.
Il mio investimento in questo sarebbe scrivere il programma di controllo batch specifico dell’applicazione, e poi identificare i gruppi di immagini da elaborare insieme. Una volta fatto questo, il tempo effettivo richiesto fino ad avere tutte le mie belle immagini panoramiche sarebbe drasticamente ridotto — e potrei ridurlo ancora di più semplicemente aggiungendo altri sistemi Raspberry Pi al cluster in qualsiasi momento!
Una risposta più generale alla domanda su cosa va bene per il cluster Pi è: qualsiasi tipo di lavoro o compito che può essere diviso in un numero di pezzi indipendenti. Si noti che sono solo i compiti stessi che devono essere indipendenti — i risultati possono anche esserlo, come nel caso delle mie fotografie panoramiche, ma può anche essere che il risultato di ogni compito contribuisca a qualche risultato più grande. In questo caso, i risultati possono essere raccolti sul sistema client, e poi ulteriormente elaborati (forse anche rimandandoli fuori come un nuovo compito) per produrre un output finale.
Ovviamente questo non è l’unico uso dei computer cluster. Ci sono cose come la ridondanza e la tolleranza ai guasti, basate sul fatto che il vostro cliente sta inviando il lavoro a quanti server sono disponibili; se un server viene messo fuori uso per manutenzione (o si blocca, o altro), la vostra elaborazione può ancora continuare sui restanti server nel cluster.
Questi sono tutti concetti che sono tipicamente applicati a sistemi cluster molto più grandi e sofisticati — anche fino a interi data center di servizi cloud. Ma il mio punto qui è che si può costruire un semplice cluster usando sistemi Raspberry Pi molto economici, e non solo acquisire conoscenze ed esperienze molto utili nel farlo, ma anche finire con una risorsa utile quando si è finito.
Ora, passando all’hardware che ho usato per questo progetto. Ho accennato al fatto che ho aggiunto un altro server al cluster da quando ho postato lo scritto originale. Questo è successo perché stavo navigando sul sito Pi-Shop.ch e ho notato il Raspberry Pi 2 v1.2.
Le specifiche generali sono le stesse del Pi 2 originale, ma il nuovo modello utilizza la stessa CPU del Pi 3 (ma con una velocità di clock inferiore). Non è un grosso problema, e probabilmente nemmeno terribilmente interessante per la maggior parte delle persone perché il Pi 3 è comunque molto più popolare ora. Ma è stato abbastanza per motivarmi a prenderne uno e aggiungerlo al cluster.
La cosa importante da notare su questa aggiunta è che non ho dovuto fare nulla al sistema client (controller), o a qualsiasi altro server. Ho semplicemente preparato il nuovo Pi 2 esattamente nello stesso modo in cui avevo preparato gli altri, e poi l’ho collegato alla rete wireless dedicata del Pi Cluster. La volta successiva che ho iniziato un lavoro sul client, ha notato che il nuovo server era disponibile e ha iniziato a usarlo insieme a tutti gli altri.
Ho anche menzionato nel progetto originale che non avevo abbastanza adattatori wi-fi USB per collegare tutti i miei sistemi Pi, e naturalmente l’aggiunta del nuovo Pi 2 significava che avevo bisogno di un adattatore anche per questo. Il Pi-Shop ha un paio di nuovi adattatori elencati, così ho pensato che questa fosse una buona occasione per provarli.
I criteri più importanti da tenere a mente quando si acquista un adattatore wi-fi USB per un Raspberry Pi è che si vuole essere sicuri che funzioni correttamente fuori dalla scatola.
So che potrebbe sembrare sciocco, ma è l’esatto opposto dell’approccio che prendo quando acquisto tali periferiche per il resto dei miei computer portatili e desktop Linux. Sto assumendo che la maggior parte delle persone comprano e usano i sistemi Raspberry Pi per qualche scopo specifico — che sia l’educazione, l’hobbistica o per qualche progetto specifico o per l’uso del dispositivo. Naturalmente, è possibile far funzionare praticamente qualsiasi adattatore USB con praticamente qualsiasi distribuzione Linux, ma a meno che tu non voglia rischiare di dover spendere una quantità significativa del tuo tempo a scuola/hobby/lavoro per impostare i driver, prendi la via più facile e assicurati di comprare un adattatore che sia già stato testato e funzioni.
Il modo più semplice per essere sicuri di questo è comprare da un distributore autorizzato di Raspberry Pi, e assicurarsi che sulla loro pagina web ci sia scritto che l’adattatore che si sta comprando è stato verificato per funzionare con il Pi.
Il primo che ho provato è stato il dispositivo Miniature WiFi (802.11b/g/n) 150Mbps. Credo che questo sia in realtà il Miniature WiFi Module di Adafruit, anche se le foto non sembrano le stesse — forse è un imballaggio personalizzato o qualcosa del genere. Comunque, quello che ho ricevuto assomiglia all’immagine mostrata qui, e ha effettivamente funzionato direttamente dalla scatola, come pubblicizzato. Costa solo CHF 9.90 (circa €8.99/£8.00/$10.50).
Si basa su un chip Realtek RTL5370, e ha un LED blu di alimentazione/link/status.
Siccome ero in modalità ‘prova nuove cose’, e ho notato che c’era un altro adattatore wi-fi USB con un throughput più alto offerto dal Pi-Shop, ho deciso di provare anche quello. Si chiama semplicemente ‘USB WiFi Adapter for Raspberry Pi (300Mbps)’, e assomiglia all’immagine a destra.
È considerevolmente più costoso a 23,90 CHF (circa 21,70 €/£ 19,40/$25) quindi probabilmente vale la pena pensarci bene prima di comprarlo piuttosto che quello sopra. Ricordate, stiamo parlando di sistemi Raspberry Pi, e non sono rinomati per la velocità e l’efficienza delle loro connessioni USB. Quindi la differenza di velocità che è praticamente l’unico vantaggio di questo adattatore, potrebbe non essere significativa nell’uso reale del dispositivo.
Questo dispositivo è basato sul chip Realtek 8192SU, e ha anche un LED di alimentazione/link/status.
L’ultimo nuovo pezzo di hardware per questo progetto è quello che penso si rivelerà più utile in generale – il TP-Link TL WR802N Wireless N Nano Router.
Questo dispositivo a basso costo (circa CHF 30/€27/£24/$32) è molto piccolo e leggero, e include una serie di modalità predefinite e preconfigurate per usi comuni. L’ho usato per impostare una WLAN isolata senza connessione internet (modalità Router), ma naturalmente può fornire connettività internet sia tramite il suo connettore di rete cablato RJ45 (modalità Access Point), o tramite una connessione wireless WISP (modalità Hotspot).
Può anche essere usato per integrare una rete wi-fi esistente (modalità Range Extender), o come un adattatore wi-fi per un dispositivo che ha solo una connessione di rete cablata (modalità Client).
Il WR802N viene fornito con il proprio adattatore di alimentazione, ma può anche essere alimentato da un adattatore di alimentazione Raspberry Pi (o da un altro caricatore MicroUSB per smartphone), o anche collegandosi a una porta USB di un computer.
Le mie prime impressioni su questo dispositivo sono state molto positive, e mi aspetto che sarà molto utile sia a casa che quando sono in viaggio.
Quando ho deciso di costruire il Pi Cluster, mi aspettavo che fosse una cosa interessante da fare, ma ho anche pensato che l’avrei smontato di nuovo prima del tempo. Ora che è attivo e funzionante, trovo che sto pensando ad altri modi interessanti per usarlo e migliorarlo.
Ricordo che non è necessario avere un gran numero di sistemi Raspberry Pi per impostarne uno — due server e un client sono sufficienti per iniziare. Ma attenzione, una volta che l’hai fatto funzionare potresti scoprire che è una buona scusa per comprare altri e migliori pezzi per estenderlo.
- Raspberry Pi: Come ho costruito un cluster di calcolo in stile OctaPi
- Raspberry Pi: Mani avanti con Fedora 26
- Raspbian GNU/Linux: La nuova release include un’immagine x86 installabile
- Raspberry Pi Zero W, hands-on: Un nuovo membro molto gradito della famiglia
- Hands-On: Raspberry Pi 7-inch Touch Display e custodia