Configurare una macchina remota (tipo AWS, una nostra workstation remota o quello che è) per diventare il nostro personale laboratorio per addestrare piccole e grandi reti neurali può essere un’operazione snervante e “time consuming”. Proprio per questo motivo ho deciso di creare questa guida per riassumere, in pochi e semplici passaggi, come ottenere un ambiente flessibile e efficiente per lavorare con il deep learning.
N.B.: In questa guida si assume che la macchina alla quale ci si colleghi abbia installato CUDA/cuDNN.
Indubbiamente la prima cosa che bisogna fare è connettersi con la propria macchina remota utilizzando una shell di nostro piacimento.
ssh <username>@<host> -L 8888:localhost:8888
Sostituire <username> e <host> con le proprie informazioni. Ex: vitto@192.168.1.1. L’opzione ‘-L’ ci permette di re-indirizzare tutto il traffico della porta 8888 del localhost della macchina remota alla nostra porta 8888. Sarà molto importante quando verrà il momento di connettersi con un server jupyter.
N.B.: considera di utilizzare ssh_pass per velocizzare la procedura di connessione.
2.0 Install VirtualEnvWrapper
Virtualenvwrapper, come da nome, è un wrapper attorno alla libreria virtualenv. Semplifica di molto la creazione e distruzione degli environment. In questo modo possiamo creare velocemente dei “compartimenti” in cui installare differenti pacchetti e versioni.
pip3 install virtualenvwrapper --user
Aggiungere al .bashrc le seguenti righe (‘cd ~ && nano .bashrc’):
Ricordarsi di fare il source prima di procedere(‘cd ~ && source .bashrc’).
A questo punto è possibile creare, entrare e distruggere gli ambienti con i seguenti comandi:
mkvritualev: creare un nuovo ambiente
workon: entrare in un nuovo ambiete e visualizzare quelli disponibili
rmvirtualenv: rimuovere un ambiente
Quindi iniziamo con il creare un nuovo ambiente chiamato “TensorFlow2.x”.
mkvirtualenv TensorFlow2.x -p python3
3.0 Install Jupyter Notebook and its Extensions
Jupyter Notebook è uno strumento fondamentale per ogni data scientist ma anche per un machine learning engineering. Proprio per questo la cosa migliore è installare la libreria di questo strumento fuori da un ambiente virtuale e poi usare uno Jupyter kernel per collegarlo con i differenti ambienti. Quindi ricordati di uscire dall’ambiente virtuale prima di installare Jupyter:
deactivate
A questo punto possiamo procedere con l’installazione di Jupyter:
pip3 install jupyter --user
Questo passaggio che viene non è indispensabile, ma senza estensioni jupyter non è lo stesso. Certe estensioni come dividere in capitoli il proprio notebook, numerare le righe o ispezionare le variabili cambiano completamente il modo di lavorare con questo strumento.
Poi una volta avviato ‘Jupyter’ si potrà facilmente selezionare le estensioni desiderate da questa schermata —> link.
3.1 Create a Jupyter Kernel
Come accennato prima, Jupyter conviene installarlo a livello di sistema e poi creare degli Jupyter kernel nei singoli virtual environments.
Quindi entriamo nel virtualenv creato prima:
workon TensorFlow2.x
A questo punto installiamo dentro il virtualenv la libreria ipykernel e creiamo un nuovo kernel con il nome che vogliamo. Questo kernel, sarà legato a tutte le librerie installate e che verranno installate nel virtualenvironment.
Nell’eventualità di rimuovere o elencare Jupyter kernel già creati, seguire i seguenti comandi.
jupyter kernelspec list
jupyter kernelspec uninstall unwanted-kernel
4.0 Install tmux
Questo punto è l’unico che richiede di avere permessi di amministratore. Dobbiamo installare tmux, un multiplexer di terminale che ci permetterà di creare delle sessioni che rimarranno attive anche dopo aver chiuso la shell utilizzata per collegarsi in ssh con l’host.
sudo apt install tmux
4.1 Create a tmux Session
Tumx non è sicuramente un strumento “user friendly”, ma già utilizzando i suoi comandi di base si può sfruttare molte delle sue funzionalità.
Per prima cosa creiamo una nuova sessione (sostituire ‘session’ con un nome a piacere. Sarà il nome della sessione.):
tmux new -s session
Questi sono i principali comandi:
tmux set mouse: rendere il mouse utilizzabile
tmux a -t session: accedere nuovamente alla sessione chiamata ‘session’
ctrl + b e poi ctrl + D: uscire dalla sessione (D è maiuscola. Non è un errore)
ctrl + b e poi ctrl + “: aprire un nuovo terminale dividendo la schermata in orizzontale
ctrl + b e poi ctrl + %: aprire un nuovo terminale dividendo la schermata in verticale
Quindi dopo aver creato una sessione, attivate il server di jupyter (jupyter-noteboook) e via…
4.2 Personal Preferences
Voglio concludere con un mio modo personale di impostare una sessione di tmux. Cerco sempre di tenere una divisione dello schermo che mi permetta di avere:
una finestra che contiene il server Jupyter
una che visualizza lo stato delle gpu con il comando nvidia-smi (watch -n 0.5 nvidia-smi se volete una visualizzazione aggiornata ogni 0.5 secondi)
una console libera per entrare nei virtual environments installare librerie e lanciare comandi