0. Setup ambiente di sviluppo per il deep learning

Software base

Per poter lavorare in modo semplice tra le diverse macchine (fare esperimenti “in piccolo” sul notebook, e poi far andare l’istanza sul cloud) ho installato:

Anaconda

Aggiungeremo ancora un gestore di pacchetti: ci servirà per installare più versioni dello stesso software in ambienti “protetti”.

Usare anaconda significa:

  1. installare miniconda poi ricordatevi di uscire dal terminale per caricare le variabli d’ambiente che permettono di eseguire conda. In ogni caso vi viene indicato al termine dell’installazione.

Git

Git è fondamentale, soprattutto quando si lavora su più computer o con più persone. E’ sufficiente:

  1. registrarsi su github.com;
  2. per ogni computer che si utilizzerà creare le chiavi SSH (perché così tutto diventa facile e veloce). E’ sufficiente avviare il terminale e digitare: bash $ ssh-keygen -t rsa -b 4096 -C "info@necomoni.com"

e poi aggiungere la chiave all’agente:

$ eval "$(ssh-agent -s)"
$ ssh-add -K ~/.ssh/id_rsa

la key va poi aggiunta su github (nel profilo), in modo da autorizzare quella specifica macchina:

$ cat ~/.ssh/id_rsa.pub

copiatela e incollatela nell’apposito spazio su github. Se non sono stato chiaro è possibile fare riferimento a questa guida in inglese

Macchine

Ho un portatile (MacBookPro) che non è sufficiente per poter sviluppare con successo algoritmi di deep learning. La mia configurazione prevede quindi 3 macchine:

Il processo di configurazione riguarda una serie di macchine per fare degli esperimenti di machine learning, deep learning, convolutional neural networks e altro. Si tratta di programmazione fatta in python oppure GNU/octave

Ho installato su 3 macchine: un portatile apple macbook pro, un portatile lenovo G50 (GNU/Linux xubuntu) e una macchina virtuale sulla piattaforma Microsoft Azure che monta una scheda Nvidia Tesla M60 con 16GB di memoria e un sistema operativo Ubuntu.

GNU/Linux xubuntu

Ho deciso di avere una macchina di sviluppo che funzioni bene, dedicata solo a questo. Per questioni economiche ho deciso di usare un Lenovo G50 (4Gb RAM, Pentium N3540) sui cui ho installato Xubuntu dopo aver letto un paio di forum il confronto tra le diverse versioni Light.

Ho installato git e anaconda come descritto.

[UPDATE 2017-05-23]: a un amico serviva un PC per le sue figlie per la scuola, così il portatile GNU/Linux non fa più parte del progetto ed è stato regalato.

MacOSX

Su mac è sufficiente installare homebrew. Come si fa? Si avvia il terminale e si digita:

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Questa macchina mi serve sempre.

Microsoft Azure

Avrei voluto comprare una macchina con la scheda grafica, ma è assolutamente poco necessario. Infatti i modelli richiedono tante risorse per la fase in cui imparano, ma poco in produzione. Meglio affidarsi al cloud.

Aggiungo che ho la fortuna di avere un account Microsoft Bizspark: in ogni caso usando la macchina solo quando serve, stiamo parlando di qualche euro (rispetto alle migliaia di euro per avere la scheda grafica che useremo).

Da dicembre 2016 sono disponibili su Azure le macchine virtuali con GPU. In paricolare io ho scelto le macchine N6: 6 cores, 56 GB di memoria e una Nvidia Tesla M60 con 16GB. Rispetto ai portatili a disposizione - e a molti desktop - fanno paura.

Tuttavia Microsoft le ha nascoste bene… ecco come fare per attivarle:

  1. loggarsi su Azure;
  2. aggiungere una macchina virtuale: nel mio caso ho scelto GNU/Linux Ubuntu 16.04 LTS perché ci sono i driver per la scheda grafica;
  3. alla voce che chiede di scegliere il disco scegliete HDD (non SDD, altrimenti non potrete vedere il tipo di macchina che vi serve — logica assurda, l’ho scoperto dopo ore di ricerca sul web);
  4. come zona scegliete Europa Occidentale (su altre zone nel mio caso c’erano, ma non erano utilizzabili);
  5. ora dovreste trovare nella voce successiva “Dimensioni” in elenco anche una macchina con GPU (io ho scelto la N6) — attenzione le macchine non sono in ordine alfabetico;
  6. lasciate pure tutto il resto standard e avviate. In un paio di minuti la macchina dovrebbe essere online.

Collegatevi via ssh alla macchina (vi viene fornito l’IP pubblico appena parte) e verificate se c’è la scheda grafica con il comando:

lspci | grep -i NVIDIA

Installare i driver

Al momento in cui scrivo (7 marzo 2017) di driver possono essere scaricati, seguendo queste istruzioni in inglese, da qui:


$ wget http://developer.download.nvidia.com/compute/cuda/7.5/Prod/local_installers/cuda_7.5.18_linux.run
$ chmod +x cuda_7.5.18_linux.run
$ ./cuda_7.5.18_linux.run --extract=$HOME
$ sudo ./cuda-linux64-rel-7.5.18-19867135.run

Dopo l’installazione possiamo configurare la libreria runtime:

sudo bash -c "echo /usr/local/cuda/lib64/ > /etc/ld.so.conf.d/cuda.conf"
sudo ldconfig

Poi possiamo controllare così:

nvidia-smi

Ecco l’ouptut: Nvidia SMI su Microsoft Azure cuda driver