Executando um emprego em vários nós de um cluster de grife
-
28-09-2019 - |
Pergunta
Tenho acesso a um cluster de 128 núcleos no qual gostaria de executar um trabalho paralelo. O cluster usa Sun GridEngine e meu programa é escrito para ser executado usando Python paralelo, Numpy, Scipy no Python 2.5.8. A execução do trabalho em um único nó (4 núcleos) produz uma melhoria de ~ 3,5x em relação a um único núcleo. Agora, gostaria de levar isso para o próximo nível e dividir o trabalho em ~ 4 nós. Meu qsub
O script parece algo assim:
#!/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
Alguém tem alguma idéia de como fazer isso?
Solução
Sim, você precisa incluir a opção de mecanismo de grade -np 16
em seu script como este:
# Use 16 processors
#$ -np 16
ou na linha de comando quando você enviar o script. Ou, para acordos mais permanentes, use um .sge_request
Arquivo.
Em todas as instalações da GE que já usei, isso dará a você 16 processadores (ou núcleos de processador hoje em dia) em mínimos nós, conforme necessário; portanto, se seus nós tiverem 4 núcleos, você receberá 4 nós, se eles tiverem 8 2 e em breve. Para colocar o trabalho, digamos 2 núcleos em 8 nós (o que você pode querer fazer se precisar de muita memória para cada processo) é um pouco mais complicado e você deve consultar sua equipe de suporte.