Esecuzione di un lavoro su più nodi di un cluster GridEngine
-
28-09-2019 - |
Domanda
Ho accesso a un cluster 128-core su cui desidero eseguire un processo parallelised. Il cluster utilizza Sun GridEngine e il mio programma è scritto da eseguire utilizzando parallela Python, NumPy, SciPy su Python 2.5.8. Eseguire il lavoro su un singolo nodo (4-core) produce un ~ 3.5x miglioramento su un singolo nucleo. Vorrei ora prendere questo al livello successivo e dividere il lavoro tra ~ 4 nodi. Il mio qsub
sguardi di script qualcosa di simile:
#!/bin/bash
# The name of the job, can be whatever makes sense to you
#$ -N jobname
# The job should be placed into the queue 'all.q'.
#$ -q all.q
# Redirect output stream to this file.
#$ -o jobname_output.dat
# Redirect error stream to this file.
#$ -e jobname_error.dat
# The batchsystem should use the current directory as working directory.
# Both files will be placed in the current
# directory. The batchsystem assumes to find the executable in this directory.
#$ -cwd
# request Bourne shell as shell for job.
#$ -S /bin/sh
# print date and time
date
# spython is the server's version of Python 2.5. Using python instead of spython causes the program to run in python 2.3
spython programname.py
# print date and time again
date
Qualcuno ha qualche idea di come fare questo?
Soluzione
Si, è necessario includere l'opzione -np 16
Grid Engine sia nello script come questo:
# Use 16 processors
#$ -np 16
o sulla riga di comando quando si invia lo script. Oppure, per le disposizioni più permanente, utilizzare un file .sge_request
.
Su tutti gli impianti di GE che abbia mai usato questo vi darà 16 processori (o core di processori in questi giorni) nel minor numero di nodi come necessario, quindi, se i nodi sono 4 core si otterrà 4 nodi, se hanno 8 2 e così via. Per posizionare il lavoro su, dicono 2 core su 8 nodi (che si potrebbe desiderare di fare se avete bisogno di un sacco di memoria per ogni processo) è un po 'più complicato e si deve consultare il team di supporto.