Corso
Sebbene AWS EC2 sia il leader nel cloud computing, Google Cloud ha sviluppato una piattaforma di Cloud Computing molto valida e competitiva.
In questo tutorial imparerai a:
- Creare un'istanza su Google Compute Engine (GCE),
- Installare un ambiente di data science basato sulla distribuzione Python Anaconda e
- Eseguire Jupyter notebook accessibili online.
Lavorare nel cloud invece che sulla tua macchina ha due principali vantaggi per i progetti di data science:
- Scalabilità: puoi adattare la potenza (RAM, CPU, GPU) della tua istanza alle esigenze immediate. Inizia con un'istanza piccola ed economica e aggiungi memoria, storage, CPU o GPU man mano che il progetto evolve.
- Riproducibilità: una condizione chiave di qualsiasi progetto di data science. Consentire ad altri data scientist di rivedere i tuoi modelli e riprodurre la tua ricerca è una condizione necessaria per un'implementazione di successo. Configurando un ambiente di lavoro su un'istanza virtuale, ti assicuri che il tuo lavoro possa essere facilmente condiviso, riprodotto e verificato dagli altri membri del team.
Google Compute Engine
Un aspetto chiave di Google Cloud Platform (GCP) è la sua organizzazione incentrata sui progetti. Tutta la fatturazione, le autorizzazioni, le risorse e le impostazioni sono raggruppate all'interno di un progetto definito dall'utente che in pratica funge da namespace globale. Questo non solo semplifica la mappatura interconnessa delle risorse che utilizzi (storage, database, istanze, ...) ma anche la gestione degli accessi, dalle autorizzazioni basate sui ruoli fino alle effettive chiavi ssh e alla sicurezza. In termini di facilità d'uso e gestione di accessi e ruoli, trovo che lavorare su GCP sia più semplice che lavorare con AWS, soprattutto usando più servizi.
GCP offre anche alcuni servizi particolarmente rilevanti per la data science, tra cui:
- Dataprep per costruire pipeline di elaborazione dati,
- Datalab per l'esplorazione dei dati,
- il Google Machine Learning Engine basato su TensorFlow
- BigQuery, una soluzione di data warehouse che ospita molti dataset Big Data affascinanti.
Una curva di apprendimento bassa e servizi data-friendly rendono GCP uno strumento indispensabile nella cassetta degli attrezzi di ogni data scientist.
Prima di iniziare ad avviare istanze e installare pacchetti Python, prendiamoci qualche minuto per rivedere parte del vocabolario comune usato nel Cloud Computing.
VM, dischi, immagini e snapshot
Una Virtual Machine (VM), chiamata anche "istanza", è un server on demand che attivi quando serve. L'hardware sottostante è condiviso con altri utenti in modo trasparente e diventa quindi interamente virtuale per te. Devi solo scegliere una posizione geografica globale dell'istanza, ospitata in uno dei data center di Google.
Una VM è definita dal tipo di disco persistente e dal sistema operativo (OS), come Windows o Linux, su cui è costruita. Il disco persistente è la tua porzione virtuale di hardware.
Un'immagine è la combinazione fisica di un disco persistente e del sistema operativo. Le immagini VM sono spesso usate per condividere e implementare una determinata configurazione su più VM. Le immagini pubbliche sono quelle fornite da Google con una scelta di OS specifici, mentre le immagini private sono personalizzate dagli utenti.
Uno snapshot è un'istantanea del contenuto di una VM (disco, software, librerie, file) in un determinato momento ed è usato principalmente per backup istantanei. La principale differenza tra snapshot e immagini è che gli snapshot sono memorizzati come diff rispetto agli snapshot precedenti, mentre le immagini no.
Sia un'immagine che uno snapshot possono essere utilizzati per definire e attivare una nuova VM.
Ricapitolando, quando avvii una nuova istanza, GCE inizia collegando un disco persistente alla tua VM. Questo fornisce lo spazio su disco e dà all'istanza il filesystem root necessario per l'avvio. Il disco installa l'OS associato all'immagine che hai scelto. Creando snapshot di un'immagine, ottieni backup istantanei e puoi copiare dati da VM esistenti per avviarne di nuove.
Mettiamo tutto in pratica e iniziamo con la tua prima VM!
Primi passi con la tua prima VM su GCP
Crea un account e un progetto
Per aprire un account su GCP, ti serve un normale account Google (Gmail). Al momento della stesura, Google offre una prova gratuita di 12 mesi / 300 $ della piattaforma. Sebbene questa offerta abbia alcune restrizioni (niente mining di bitcoin, per esempio), dovrebbe essere sufficiente per iniziare a lavorare in questo ambiente.
Per creare il tuo account GCP con la prova gratuita, vai su cloud.google.com e fai clic sul pulsante try it free. Ti verrà chiesto di accedere con il tuo account Google e aggiungere le informazioni di fatturazione. Una volta creato l'account, puoi accedere alla console web su http://console.cloud.google.com/.
Per prima cosa userai la console web per definire e avviare un'istanza basata su Debian, quindi passerai alla shell del terminale basata sul web per installare tutti i pacchetti necessari per il tuo stack di data science.
Ma prima devi creare un nuovo progetto:
- Vai alla pagina Gestione risorse,
- Fai clic su "Crea un nuovo progetto",
- Specifica il titolo del progetto e nota come Google genera al volo un ID progetto.
- Modifica l'ID progetto se necessario e fai clic su "Crea".
L'ID progetto deve essere univoco nello spazio dei nomi di GCP, mentre il titolo del progetto può essere qualsiasi cosa. Io chiamo il mio progetto datacamp-gcp come mostrato di seguito:

Per impostazione predefinita, quando crei un nuovo progetto, il tuo account Google è impostato come proprietario del progetto con pieni permessi e accesso a tutte le risorse e alla fatturazione del progetto.
Nella sezione ruoli della pagina IAM, puoi aggiungere persone con ruoli specifici al tuo progetto. Per lo scopo di questo tutorial, salterai questa parte e manterrai te stesso come unico utente e amministratore del progetto.
Crea un'istanza
Per creare la tua prima VM, segui semplicemente questi passaggi:
- Vai alla tua dashboard su https://console.cloud.google.com/home/dashboard e seleziona il progetto che hai appena creato.
- Nel menu in alto a sinistra seleziona "Compute Engine" e fai clic su "VM instances".
- Nella finestra di dialogo, fai clic sul pulsante "Create".

Ora sei nella pagina "Create an Instance".
-
Assegna un nome all'istanza: puoi scegliere qualsiasi nome. Io chiamo la mia istanza
starling. -
Seleziona la regione: la regola generale è scegliere la regione più economica a te più vicina per minimizzare la latenza. Io scelgo
east-d. Nota che i prezzi variano sensibilmente per regione. -
Seleziona la memoria, lo storage e la CPU che ti servono. Puoi usare uno dei vari preset o personalizzare la tua istanza. Qui scelgo la configurazione predefinita
n1-standard-1con 3,75 GB di RAM e 1 vCPU per un prezzo stimato di 24,67 $ al mese. -
Seleziona il boot disk e mantieni l'OS predefinito Debian GNU/Linux 9 (stretch) con 10 GB. Se preferisci usare Ubuntu o un'altra distribuzione linux, fai clic sul pulsante "Change" e fai la selezione appropriata. Poiché Ubuntu deriva strettamente da Debian, entrambe le distribuzioni funzioneranno per questo tutorial.

5.Assicurati di poter accedere alla VM da internet consentendo il traffico http e https.

6.(Opzionale) Abilita un disco persistente per scopi di backup: fai clic sul link "Management, Disks, networking, SSH keys". Questo mostra una serie di tab: seleziona la tab "Disks" e deseleziona la "Deletion Rule". In questo modo, quando elimini l'istanza, il disco non verrà eliminato e potrà essere usato in seguito per avviarne una nuova.

7.Infine, fai clic su "Create". La tua istanza sarà pronta in pochi minuti.
Nota il link "Equivalent command line" sotto il pulsante Create. Questo link mostra la riga di comando equivalente necessaria per creare la stessa istanza da zero. È una funzione davvero intelligente che facilita l'apprendimento della sintassi del gcloud SDK.
A questo punto hai un'istanza in esecuzione che è praticamente vuota. Ci sono 2 modi per accedervi: installando il gcloud SDK sulla tua macchina locale oppure usando la Cloud Shell di Google.
Cloud Shell di Google
La Cloud Shell di Google è un terminale autonomo nel browser da cui puoi accedere e gestire le tue risorse. Attivi la cloud shell facendo clic sull'icona >\_ nella parte in alto a destra della pagina della console. La parte inferiore del browser diventa un terminale shell.

Questo terminale gira su una virtual machine Google Compute Engine f1-micro con sistema operativo Debian e 5 GB di storage. È creato per utente e per sessione. Rimane attivo finché la tua sessione di cloud shell è attiva e viene eliminato dopo 20 minuti di inattività. Poiché il disco associato è persistente tra le sessioni, i tuoi contenuti (file, configurazioni, ...) saranno disponibili da una sessione all'altra. L'istanza di cloud shell è preinstallata con gcloud SDK e vim.

È importante distinguere tra l'istanza Cloud Shell, che è basata sull'utente, e l'istanza che hai appena creato. L'istanza sottostante alla cloud shell è solo un modo comodo per avere un ambiente di gestione delle risorse e memorizzare le tue configurazioni su un'istanza effimera. L'istanza VM che hai appena creato, chiamata starling nell'esempio sopra, è quella su cui vuoi installare il tuo ambiente di data science.
In alternativa alla Cloud Shell di Google, puoi anche installare il gcloud SDK sulla tua macchina locale e gestire tutto dal tuo ambiente locale.
Ecco alcuni comandi utili per gestire le tue istanze.
-
Elencare le istanze
gcloud compute instances list -
Arrestare l'istanza (richiede alcuni secondi)
gcloud compute instances stop <instance name> -
Avviare l'istanza (richiede anch'esso alcuni secondi)
gcloud compute instances start <instance name> -
e accedere via ssh all'istanza starling
gcloud compute ssh <instance name>
Configurazione della VM
Esegui quell'ultimo comando nella finestra della Google Shell per accedere alla tua istanza. I prossimi passaggi consisteranno nel:
- Installare alcuni pacchetti Debian con
apt-get install. - Installare la distribuzione Anaconda o Miniconda.
- Configurare l'istanza per rendere i Jupyter notebook accessibili online in modo sicuro.
Pacchetti Debian
Iniziamo installando i pacchetti Debian:
- bzip2, richiesto per installare Mini/Anaconda,
- git, sempre utile da avere, e
- libxml2-dev, non necessario in questo momento ma spesso utile quando si installano ulteriori librerie Python.
Esegui i seguenti comandi, validi sia per Ubuntu che per Debian, nel terminale:
$ sudo apt-get update
$ sudo apt-get install bzip2 git libxml2-dev
Anaconda / Miniconda
Una volta installati i pacchetti sopra, passa all'installazione della distribuzione Anaconda per Python 3. Puoi scegliere tra installare la versione completa di Anaconda, che include molte librerie scientifiche Python che potresti non aver bisogno, oppure installare la versione più leggera Miniconda, che richiede l'installazione manuale delle librerie Jupyter. Il processo è molto simile in entrambi i casi.
Per installare la distribuzione più leggera Miniconda, esegui
$ wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
$ bash Miniconda3-latest-Linux-x86_64.sh
$ rm Miniconda3-latest-Linux-x86_64.sh
$ source .bashrc
$ conda install scikit-learn pandas jupyter ipython
Lo script di installazione viene scaricato ed eseguito con le prime 2 righe. Dovresti accettare la licenza e il percorso predefinito. Alla riga 3, il file shell non più necessario viene rimosso. Con il comando source .bashrc alla riga 4, il comando conda viene aggiunto al tuo $PATH senza dover aprire un nuovo terminale. Infine, l'ultima riga installa le librerie Python richieste: scikit-learn pandas jupyter ipython.
I comandi per installare la distribuzione completa di Anaconda sono molto simili. Assicurati di controllare la pagina di download per ottenere la versione più recente del file script:
$ wget https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh
$ bash Anaconda3-5.0.1-Linux-x86_64.sh
$ rm Anaconda3-5.0.1-Linux-x86_64.sh
$ source .bahsrc
Per verificare che tutto sia installato correttamente, controlla la versione di python con python --version e verifica che venga chiamato di default il python giusto con il comando which python. Dovresti ottenere qualcosa di simile a

Ora hai un ambiente Python funzionante con le librerie standard per la data science installate (sklearn, pandas).
Abilitare l'accesso web
Il terzo e ultimo passaggio è configurare la tua VM per consentire l'accesso web ai tuoi Jupyter notebook.
Per prima cosa devi rendere la VM accessibile dal web. Per farlo, creerai una regola firewall tramite la console di Google Cloud. Torna alla tua dashboard delle istanze e nel menu in alto a sinistra seleziona "VPC Network > Firewall rules". Fai clic sul link "CREATE FIREWAL RULE" e compila i seguenti valori:
- Name: jupyter-rule (puoi scegliere qualsiasi nome)
- Source IP ranges: 0.0.0.0/0
- Specified protocols and ports: tcp:8888
- e lascia tutte le altre variabili ai valori predefiniti.
Il form dovrebbe essere così:

Questa regola firewall consente a tutto il traffico in ingresso (da tutti gli IP) di raggiungere la porta 8888.
Usando il link "Equivalent command line", puoi vedere che la regola firewall può essere creata anche dal terminale con la seguente riga di comando:
$ gcloud compute --project=datacamp-gcp firewall-rules create jupyter-rule --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp:8888 --source-ranges=0.0.0.0/0
Ora torna alla pagina della VM (menu in alto a sinistra > Compute Engine > VM instances), fai clic sul nome della tua VM.
Prendi nota dell'indirizzo IP della tua VM. Questo è l'indirizzo IP che userai nel browser per accedere al tuo ambiente Jupyter. Nel mio esempio, l'IP è: 35.196.81.49, il tuo sarà diverso.

e assicurati che le regole del Firewall siano selezionate:

Configurazione di Jupyter
I Jupyter notebook hanno un file di configurazione che deve essere generato e modificato per impostare l'accesso online ai tuoi notebook. Nel terminale, esegui jupyter notebook --generate-config per generare il file di configurazione. E jupyter notebook password per generare una password.
Suggerimento: assicurati che sia una password robusta!
Ora modifica il file di configurazione che hai appena creato con vim .jupyter/jupyter_notebook_config.py e aggiungi la seguente riga all'inizio del file
c.NotebookApp.ip = '*'
(per passare alla modalità di modifica in vim, digita il carattere i). Esci e salva con la sequenza ESC:wq.
Questo permetterà al notebook di essere disponibile per tutti gli indirizzi IP sulla tua VM e non solo all'URL http://localhost:8888 a cui potresti essere abituato quando lavori in locale.
Avvio
Ora sei pronto per avviare il tuo Jupyter notebook con il comando:
$ jupyter-notebook --no-browser --port=8888
E dovresti vedere qualcosa di simile nel terminale:

Nel browser vai all'URL: http://<your_VM_IP>:8888/ per accedere al tuo Jupyter notebook appena operativo.
Per verificare che tutto funzioni come previsto, crea un nuovo notebook Python 3 e import pandas

Intermezzo
Alcune note sulla configurazione attuale:
-
L'indirizzo IP che hai usato nel browser è effimero. Ciò significa che ogni volta che riavvii la VM, i tuoi notebook avranno un URL diverso. Puoi rendere quell'IP statico andando su: Menu in alto a sinistra > VPC Network > External IP addresses e selezionando "static" nel menu a tendina

-
La sicurezza della configurazione attuale si basa sulla robustezza della password del Jupyter notebook che hai definito in precedenza. Chiunque su internet può accedere al tuo ambiente Jupyter allo stesso URL che usi tu (e i bot ci proveranno, eccome). Una funzionalità potente ma molto insicura dei Jupyter notebook è la possibilità di avviare un terminale con accesso sudo direttamente dal notebook. Ciò significa che chiunque acceda al tuo notebook potrebbe prendere il controllo della tua VM dopo aver craccato la password del notebook e potenzialmente eseguire qualsiasi cosa, facendo schizzare le tue bollette alle stelle. Le prime misure per evitare che ciò accada includono
-
Assicurarsi che la password di Jupyter sia robusta
- Ricordarsi di arrestare la VM quando non ci stai lavorando
Stai anche eseguendo il server su http e non su https, il che non è abbastanza sicuro. Let’s Encrypt fornisce certificati SSL/TLS gratuiti ed è la soluzione di cifratura raccomandata nella documentazione di Jupyter. Per maggiori informazioni sui problemi di sicurezza legati all'esecuzione di un Jupyter notebook pubblico, leggi questo articolo.
IPython
I Jupyter notebook sono molto comodi per il lavoro collaborativo online. Ma puoi anche eseguire una sessione IPython dal terminale semplicemente con il comando ipython. Questo aprirà una sessione IPython che ha tutte le caratteristiche di un Jupyter notebook come i magic command (%paste, %run, ...) ma senza l'interfaccia web.
R
È facile configurare la tua VM per abilitare i notebook R nella console Jupyter. Le istruzioni per abilitare R Markdown sono disponibili in questo ottimo tutorial di DataCamp: Jupyter e R Markdown: Notebooks con R di Karlijn Willems.
Conclusione
Google Cloud offre molti servizi interessanti per la data science e istanze VM potenti ma facili da configurare, oltre a un'offerta di prova gratuita molto allettante. La console web è facile da navigare e spesso mostra l'equivalente a riga di comando delle pagine di configurazione correnti, abbassando così la barriera all'uso del gcloud SDK.
In questo articolo hai imparato come selezionare e avviare un'istanza VM, installare i pacchetti Debian necessari, la distribuzione Anaconda e lo stack di data science e infine come impostare le regole di accesso per avviare un Jupyter notebook accessibile dal browser.
Anche se l'intero processo può sembrare un po' complesso la prima volta, diventerà presto familiare man mano che crei e avvii sempre più VM. E nel caso in cui le cose si ingarbuglino, puoi sempre eliminare la VM su cui stai lavorando e ricominciare da zero. È uno dei vantaggi di lavorare nel cloud. Dopo qualche volta sarai in grado di mettere in piedi ambienti completi di data science su Google Cloud in pochi minuti. Sentiti libero di contattarmi e condividere commenti e domande su Twitter: @alexip.

