CLUSTER COKA Macchine e Risorse Il cluster per il progetto COKA si compone complessivamente delle seguenti 5 macchine: rd coka 01 : server con il MIC e le GPU K20; rd gpu 01 : server con GPU C1060; rd gpu 02 : server con GPU C2050; rd lsfmaster: VM con il master deamon e scheduler del batch system LSF; rd ui : VM per il login degli utenti e per la sottomissione dei job Graficamente: Configurazione del batch system Per l'utilizzo delle macchine COKA sono state definite le seguenti code: coka : coda normale performance : solo per esecuzione di job per uso esclusivo di un server interactive : solo per job interattivi Inoltre sono state definite delle nuove risorse che rappresentano le GPU disponibili e il MIC. Queste risorse sono: gpu_k20 : rappresenta le GPU Tesla K20 gpu_c1060 : rappresenta le GPU Tesla C1060 gpu_c2050 : rappresenta le GPU Tesla C2050 mic : rappresenta l'intel ManyCore Segue la tabella con il dettaglio della quantità di risorse disponibili su ciascun server fisico: 1
gpu_k20 gpu_c2050 gpu_c1060 mic rd-coka-01 2 - - 1 rd-gpu-01 - - 2 - rd-gpu-02-3 - - Come utilizzare il cluster Per utilizzare le risorse del cluster occorre fare login sulla macchina rd ui.cnaf.infn.it, utilizzando come credenziali lo stesso username e password utilizzato per il login su bastion.cnaf.infn.it. La prima volta che viene fatto il login sulla UI, viene creata automaticamente la home directory dell'utente, contenente un template per la sottomissione dei job e un breve howto con i comandi essenziali di LSF. Questa directory non è locale alla UI, ma è condivisa fra tutti gli host del cluster. In questo modo i file eseguibili che vengono creati sulla UI, sono immediante visibili anche ai server fisici che eseguiranno il job, senza necessità di eseguire trasferimenti di file; allo stesso modo gli output dei job prodotti sui server fisici sono subito disponibili anche sulla UI. Per vedere quali host sono disponibili nel cluster e il loro stato, usare i comandi: Per vedere i dettagli di un singolo host usare: Per vedere lo stato delle code usare: 2
Per vedere i dettagli di una coda: Per sottomettere un job utilizzare il comando: $ bsub [opzioni] 'comando' Questo comando supporta numerose opzioni; le più interessanti sono: q coda Specifica a quale coda sottomettere m hostname Sceglie a quale host inviare il job c n CPU time limite di n secondi n x Utilizza x core per il job J nome Assegna 'nome' come job name o file.out Job standard output e file.err Job standard error N Separa il job report dall'output B Invia una mail quando il job va in start R "risorsa=n" Specifica di quali e quante risorse il job ha bisogno Per sottomettere un job e consigliabile preparare un file di testo contenente tutte le opzioni e i comandi da eseguire, come il seguente: #BSUB J example #BSUB c 600 #BSUB n 1 #BSUB o %J.out #BSUB e %J.err #BSUB N #BSUB B #BSUB q coka #BSUB m rd coka 01 #BSUB R gpu_k20=1 # # commands # Job name # Time limit in minutes # Number of cores # Job standard output # Job standard error # Job report # Send mail # Job queue # Host selection # Resource requirements 3
echo hello world sleep 10 Salvare il job in un file (es. example.job) e sottometterlo con: $ bsub < example.job Per monitorare lo stato dei propri job, utilizzare il comando: $ bjobs Quando un job termina, viene spedito un report riguardante l'esecuzione del job via mail, direttamente sulla UI. Per leggere queste mail, utilizzare il tool mailx: $ mail Job interattivi Sono job che mandano il proprio output su stdout e leggono l input da stdin. Sono utili per eseguire operazioni come compilazione e debug delle applicazioni, oppure per eseguire programmi che richiedono l'interazione dell'utente durante l'esecuzione. Questo tipo di job possono essere sottomessi solamente sulla coda interactive. Esempio: esecuzione del comando ls con job interattivo: $ bsub I q interactive ls Job <682> is submitted to queue <interactive>. <<Waiting for dispatch...>> 537.err 537.out example.job hello_mic hello_nv intel interactive.job lsf_job_template.job matrix mbox Esempio: aprire una shell su uno specifico server: $ bsub Is q interactive m rd gpu 01 sh Job <680> is submitted to queue <interactive>. <<Waiting for dispatch...>> sh 4.1$ Gestione delle GPU Le GPU presenti sui 3 server COKA sono tutte impostate per l'esecuzione di programmi in modalità Exclusive Process: questo significa che su ogni singola GPU non viene consentito il context switch fra processi diversi durante l'esecuzione. E' consentito invece il context switch fra thread dello stesso processo. Il batch system schedula i job che richiedono l'uso delle GPU basandosi sull'opzione -R specificata nel job: quindi se un server ha 2 GPU, verranno mandati su di esso al massimo due job che richiedono l'uso di quel tipo di GPU, oppure un solo job che ne richiede 2. Se altri job richiedono lo stesso tipo di risorsa, restaranno in coda. Ogni GPU viene indirizzata dalle librerie CUDA mediante il proprio ID, un numero intero 0-based, visualizzabile con i comand: $ nvidia smi $ nvidia smi q E' compito dell'utente specificare l'id giusto all''interno del codice del proprio programma, utilizzando le 4
opportune funzioni delle librerie CUDA. N.B.: L'host rd-gpu-01 dispone di una GPU Quadro oltre alle due GPU C1060. Fare attenzione all'id quando si vuole usare le GPU di questo host. 5