10 ricette dalla riga di comando per il deep learning su Amazon Web Services

10 ricette dalla riga di comando per il deep learning su Amazon Web Services

L'esecuzione di grandi processi di deep learning su Amazon Web Services EC2 è un modo economico ed efficace per apprendere e sviluppare modelli.

Per pochi dollari puoi accedere a decine di gigabyte di RAM, decine di core CPU e più GPU. Lo consiglio vivamente.

Se non conosci EC2 o la riga di comando di Linux, esiste una suite di comandi che troverai inestimabile quando esegui i tuoi script di deep learning nel cloud.

In questo tutorial scoprirai il mio elenco privato dei 10 comandi che utilizzo ogni volta che utilizzo EC2 per adattarsi a modelli di deep learning di grandi dimensioni.

Dopo aver letto questo post, saprai:

  • Come copiare i dati da e verso le istanze EC2.
  • Come impostare gli script in modo che vengano eseguiti per giorni, settimane o mesi in modo sicuro.
  • Come monitorare i processi, il sistema e le prestazioni della GPU.

Dai il via al tuo progetto con il mio nuovo libro Deep Learning With Python, incluso tutorial passo passo e il Codice sorgente Python file per tutti gli esempi.

Iniziamo.

Nota: Tutti i comandi eseguiti dalla tua stazione di lavoro presumono che tu stia eseguendo un ambiente di tipo Linux (ad esempio Linux, OS X o cygwin).

Hai altri suggerimenti, trucchi o comandi preferiti per eseguire modelli su EC2?
Fammi sapere nei commenti qui sotto.

10 ricette dalla riga di comando per il deep learning su Amazon Web Services

10 ricette dalla riga di comando per il deep learning su Amazon Web Services
Foto di chascar, alcuni diritti riservati.

Panoramica

I comandi presentati in questo post presuppongono che l'istanza AWS EC2 sia già in esecuzione.

Per coerenza, vengono fatte alcune altre ipotesi:

  • L'indirizzo IP del tuo server è 54.218.86.47; modificalo nell'indirizzo IP dell'istanza del tuo server.
  • Il tuo nome utente è ec2-user; modificalo con il tuo nome utente sulla tua istanza.
  • La tua chiave SSH si trova in ~ / .ssh / e ha il nome del file aws-keypair.pem; cambiarlo nella posizione della chiave SSH e nel nome del file.
  • Stai lavorando con gli script Python.

Se hai bisogno di aiuto per configurare ed eseguire un'istanza AWS EC2 basata su GPU per il deep learning, consulta il tutorial:

1. Accedi dalla tua workstation al server

Devi accedere al server prima di poter fare qualcosa di utile.

Puoi accedere facilmente utilizzando la shell sicura SSH.

Ti consiglio di conservare la tua chiave SSH nel tuo file ~ / .ssh / directory con un nome utile. Uso il nome aws-keypair.pem. Ricorda: il file deve avere i permessi 600.

Il comando seguente ti accederà all'istanza del tuo server. Ricordarsi di modificare il nome utente e l'indirizzo IP con il nome utente e l'indirizzo IP dell'istanza del server pertinenti.

2. Copiare i file dalla stazione di lavoro al server

Copi i file dalla tua stazione di lavoro all'istanza del server utilizzando la copia protetta (scp).

L'esempio seguente, eseguito sulla tua workstation, copierà il file script.py Script Python nella directory locale sulla stazione di lavoro sull'istanza del server.

3. Eseguire lo script come processo in background sul server

Puoi eseguire il tuo script Python come processo in background.

Inoltre, è possibile eseguirlo in modo tale da ignorare i segnali di altri processi, ignorare qualsiasi input standard (stdin) e inoltrare tutti gli output e gli errori a un file di registro.

Nella mia esperienza, tutto questo è necessario per script di lunga durata per l'adattamento di modelli di deep learning di grandi dimensioni.

Questo presuppone che tu stia eseguendo il script.py Script Python situato nel file / home / ec2-user / directory e che si desidera che l'output di questo script venga inoltrato al file script.py.log si trova nella stessa directory.

Sintonizzati per le tue esigenze.

Se questa è la tua prima esperienza con nohup, puoi saperne di più qui:

Se questa è la tua prima esperienza con il reindirizzamento dell'input standard (stdin), dell'output standard (stout) e dell'errore standard (sterr), puoi saperne di più qui:

4. Eseguire lo script su una GPU specifica sul server

Consiglio di eseguire più script contemporaneamente, se l'istanza AWS EC2 è in grado di gestirla per il tuo problema.

Ad esempio, l'istanza EC2 scelta potrebbe avere 4 GPU e potresti scegliere di eseguire uno script su ciascuna.

Con CUDA, puoi specificare quale dispositivo GPU utilizzare con la variabile d'ambiente CUDA_VISIBLE_DEVICES.

Possiamo usare lo stesso comando sopra per eseguire lo script e specificare il dispositivo GPU specifico da utilizzare come segue:

Se hai 4 dispositivi GPU sulla tua istanza, puoi specificare CUDA_VISIBLE_DEVICES = 0 per CUDA_VISIBLE_DEVICES = 3.

Mi aspetto che funzioni per il backend Theano, ma l'ho testato solo con il backend TensorFlow per Keras.

Puoi saperne di più su CUDA_VISIBLE_DEVICES nella posta:

5. Monitorare l'output degli script sul server

Puoi monitorare l'output del tuo script mentre è in esecuzione.

Ciò può essere utile se si restituisce un punteggio a ogni epoca o dopo l'esecuzione di ogni algoritmo.

Questo esempio elencherà le ultime righe del file di registro dello script e aggiornerà l'output non appena vengono aggiunte nuove righe allo script.

Amazon potrebbe chiudere in modo aggressivo il tuo terminale se lo schermo non riceve un nuovo output per un po '.

Un'alternativa è usare il comando watch. Ho scoperto che Amazon manterrà aperto questo terminale:

Ho scoperto che lo standard out (stout) dagli script Python non sembra essere aggiornato frequentemente.

Non so se questa sia una cosa EC2 o una cosa Python. Ciò significa che potresti non vedere l'output nel registro aggiornato spesso. Sembra che venga memorizzato nel buffer e visualizzato in output quando il buffer raggiunge dimensioni fisse o alla fine di una corsa.

Ne sai di più su questo?
Fammi sapere nei commenti qui sotto.

6. Monitorare le prestazioni del sistema e del processo sul server

È una buona idea monitorare le prestazioni del sistema EC2. Soprattutto la quantità di RAM che stai utilizzando e che hai lasciato.

Puoi farlo usando il comando in alto che si aggiornerà ogni pochi secondi.

Puoi anche monitorare il sistema e solo il tuo processo, se conosci il suo identificatore di processo (PID).

7. Monitorare le prestazioni della GPU sul server

È una buona idea tenere d'occhio le prestazioni della GPU.

Ancora una volta, tieni d'occhio l'utilizzo della GPU, su quali GPU sono in esecuzione, se prevedi di eseguire più script in parallelo e nell'utilizzo della RAM della GPU.

Puoi usare il file nvidia-smi comando per tenere d'occhio l'utilizzo della GPU. Mi piace usare il file orologio comando che mantiene il terminale aperto e cancella lo schermo per ogni nuovo risultato.

8. Verificare quali script sono ancora in esecuzione sul server

È anche importante tenere d'occhio quali script sono ancora in esecuzione.

Puoi farlo con il ps comando.

Ancora una volta, mi piace usare il comando watch per mantenere il terminale aperto.

9. Modificare un file sul server

Raccomando di non modificare i file sul server a meno che non sia davvero necessario.

Tuttavia, puoi modificare un file in posizione utilizzando l'estensione vi editore.

L'esempio seguente aprirà il tuo script in vi.

Ovviamente puoi usare il tuo editor a riga di comando preferito, come emacs; questa nota è davvero per te se sei nuovo alla riga di comando di Unix.

Se questa è la tua prima esposizione a vi, puoi saperne di più qui:

10. Dalla stazione di lavoro, scaricare i file dal server

Ti consiglio di salvare il tuo modello ed eventuali risultati e grafici in modo esplicito in file nuovi e separati come parte del tuo script.

È possibile scaricare questi file dall'istanza del server sulla stazione di lavoro utilizzando la copia protetta (scp).

L'esempio seguente viene eseguito dalla workstation e copierà tutti i file PNG dalla directory home alla workstation.

Suggerimenti e trucchi aggiuntivi

Questa sezione elenca alcuni suggerimenti aggiuntivi quando si lavora molto su AWS EC2.

  • Esegui più script contemporaneamente. Consiglio di selezionare hardware con più GPU e di eseguire più script contemporaneamente per sfruttare appieno la piattaforma.
  • Scrivi e modifica gli script solo sulla tua workstation. Considera EC2 come un ambiente di pseudo-produzione e copia solo script e dati da eseguire. Esegui tutto lo sviluppo sulla tua workstation e scrivi piccoli test del tuo codice per assicurarti che funzioni come previsto.
  • Salva gli output degli script in modo esplicito in un file. Salva risultati, grafici e modelli in file che possono essere scaricati in seguito sulla tua workstation per l'analisi e l'applicazione.
  • Usa il comando watch. Amazon uccide in modo aggressivo le sessioni terminali che non hanno attività. Puoi tenere d'occhio le cose usando il comando watch che invia dati abbastanza frequentemente da mantenere il terminale aperto.
  • Esegui i comandi dalla tua workstation. Tutti i comandi sopra elencati destinati ad essere eseguiti sul server possono essere eseguiti anche dalla stazione di lavoro anteponendo al comando "ssh -io ~ / .ssh /aws-keypair.pem [email protected]"E citando il comando che si desidera eseguire. Questo può essere utile per controllare i processi durante il giorno.

Sommario

In questo tutorial, hai scoperto i 10 comandi che utilizzo ogni volta che sto formando modelli di deep learning di grandi dimensioni su istanze AWS EC2 con GPU.

Nello specifico, hai imparato:

  • Come copiare i dati da e verso le istanze EC2.
  • Come impostare gli script in modo che vengano eseguiti per giorni, settimane o mesi in modo sicuro.
  • Come monitorare i processi, il sistema e le prestazioni della GPU.

Avete domande?
Poni le tue domande nei commenti qui sotto e farò del mio meglio per rispondere.

Sviluppa progetti di deep learning con Python!

Apprendimento profondo con Python

E se potessi sviluppare una rete in pochi minuti

... con solo poche righe di Python

Scopri come nel mio nuovo ebook:
Apprendimento profondo con Python

Copre progetti end-to-end su argomenti come:
Perceptrons multistrato, Reti convoluzionali e Reti neurali ricorrentie altro ancora ...

Finalmente porta l'apprendimento profondo a
I tuoi progetti

Salta gli accademici. Solo risultati.

Guarda cosa c'è dentro

Potresti anche essere interessato