Development GPUs - aimagelab/aimagelab-srv GitHub Wiki

AImageLab mette a disposizione GPU di sviluppo utilizzabili tramite debugging remoto. Gli host contenenti GPU di sviluppo replicano la stessa configurazione di tutti i nodi aimagelab-srv.

Accesso alle GPU di sviluppo

Possono accedere alle GPU di sviluppo tutti gli utenti di AImageLab-SRV. Le risorse di sviluppo sono gestite da SLURM, all'interno delle partizioni dev e students-dev, rispettivamente dedicate allo staff di ricerca (strutturati, dottorandi, assegnisti, collaboratori) e agli studenti (tesisti e studenti non tesisti).

Limiti

Staff di ricerca: È possibile richiedere fino a 4 GPU di sviluppo contemporaneamente. Ogni sessione di sviluppo dura al massimo 4 ore.

Studenti: È possibile richiedere fino a 3 GPU di sviluppo contemporaneamente. Ogni sessione di sviluppo dura al massimo 2 ore.

ℹ️ Politiche di scheduling: le richieste di GPU di sviluppo da parte dello staff di ricerca hanno precedenza sulle sessioni di debug degli studenti.

Uso da shell

⚠️ Attenzione: è vietato accedere alle specifiche GPU sui nodi di sviluppo senza passare per lo scheduler SLURM. Quindi, chi si connette via ssh a un nodo di sviluppo non può lanciare script in GPU.

Per ottenere una shell con una GPU di sviluppo, utilizzare il seguente comando dal nodo di login o da un nodo di sviluppo:

Staff di ricerca: srun --partition=all_serial --gres=gpu:1 --pty bash

Studenti: srun --partition=all_serial --gres=gpu:1 --pty bash

Uso da IDE

Visual Studio Code

  • Dal tab Extensions, installare le estensioni Remote - SSH e Remote - SSH: Editing Configuration Files
  • Connettersi a aimagelab-srv-00.ing.unimore.it (ad es.: F1, Remote-SSH: Connect to Host...) ed entrare nella folder del proprio progetto (ad es. tramite: F1, File: Open Folder...)
  • Dal tab Extensions, sull'host remoto installare le estensioni Python e Pylance
  • Creare il file $projectFolder/bash.sh, dove $projectFolder indica la folder del progetto, contenente:
    Staff di ricerca: srun -Q --immediate=10 --partition=dev --gres=gpu:1 --time 60:00 --pty bash
    Studenti: srun -Q --immediate=10 --partition=students-dev --gres=gpu:1 --time 60:00 --pty bash

Controllare che il file $projectFolder/bash.sh abbia tutti i permessi di esecuzione. In caso contrario eseguire chmod +x $projectFolder/bash.sh

  • Aprire (o creare se inesistente) il file $projectFolder/.vscode/settings.json, ed assicurarsi che contenga la seguente coppia chiave-valore:

      "terminal.integrated.automationProfile.linux": {
        "path": "$projectFolder/bash.sh"
      }
    

PyCharm

Creazione di un nuovo progetto

Creare un nuovo progetto con una location sul proprio PC.

Configurazione di deployment

Andare in File->Settings->Build, Execution, Deployment->Deployment

Cliccare sul simbolo + verde per aggiungere un nuovo server di deployment. Il nome del server è aimagelab-srv-00.ing.unimore.it, e il type è SFTP.

Aggiungere le informazioni di connessione, come segue. Utilizzate il vostro username e la vostra password di Aimagelab-srv. Potete scegliere di salvare la password.

Nel tab Mappings collegate la path locale del progetto con la path remota (ad es., una folder nella vostra home)

Se serve, potete escludere la copia di alcuni file dal tab "Excluded Paths".

Nella stessa scheda, selezionate questa configurazione di Deployment come quella di default, utilizzando l'ultimo pulsante della riga in cui è presente il + verde (diventerà in grassetto).

Nella scheda Options (sotto Deployment), controllate che il valore del campo "Upload changed files automatically to the default server" sia "Always", in modo che i file locali siano sempre sincronizzati con quelli remoti.

Cliccate su "Apply".

Configurazione interprete remoto

Passate poi alla scheda "Project interpreter" e aggiungete un nuovo project interpreter cliccando sul simbolo della ruota dentata. Scegliete "SSH Interpreter", "New server configuration", e inserite host e username come prima.

Nella schermata successiva, inserite poi la password.

Selezionate l'interprete:

/usr/local/anaconda3/slurm/dev/python3

Se utilizzate un virtualenv, copiate uno dei due file di cui sopra nella vostra home folder e aggiustate il path del binario di Python di conseguenza (vedi esempio).

Aggiornate anche le sync folders come sopra.

Cliccate OK e uscite dai Settings. PyCharm impiegherà qualche minuto per sincronizzarsi con il server.

Esempio interprete custom

Interprete da poter creare nella home folder e che permette di utilizzare un numero variabile di GPU.

#!/bin/bash
python="/usr/local/anaconda3/bin/python"
n_gpu=${GPU:-1}
if [ $1 == "--version" ]] ](/aimagelab/aimagelab-srv/wiki/|-[[-$1-==-"-V"-); then
    $python "$1"
elif [ $@ == *"generator3.py"* ]] ](/aimagelab/aimagelab-srv/wiki/|-[[-$@-==-*"import-socket"*-) || [ $n_gpu == 0 ]] ](/aimagelab/aimagelab-srv/wiki/|-[[-$@-==-*"packaging_tool.py"*-); then
    $python "$@"
else
    /usr/bin/srun -Q --immediate=10 --partition=all_serial --gres=gpu:$n_gpu $python "$@"
fi

Debugging

A questo punto, potete creare un file Python e debuggarlo. Dovreste vedere correttamente le informazioni di debug: