Eu finalmente encontrei a resposta para isso. No começo eu usei o acima
-l excl=True
setup conforme descrito acima. No entanto, isso não resolve o problema.
Para resolver completamente o problema que precisei configurar e pe_environment adicional.
No meu cluster, temos um número de 12 nós principais. Então, vou usar isso como meu exemplo.
Eu criei um ambiente adicional chamado mpich2_12. Colado abaixo ..
pe_name mpich_12
slots 999
user_lists sge_user
xuser_lists NONE
start_proc_args /opt/gridengine/mpi/startmpi.sh -catch_rsh $pe_hostfile
stop_proc_args /opt/gridengine/mpi/stopmpi.sh
allocation_rule 12
control_slaves TRUE
job_is_first_task FALSE
urgency_slots min
accounting_summary TRUE
Observe que a regra de atribuição está definida como 12, isso significa que o trabalho DEVE usar 12 núcleos em um nó. Se você enviar um trabalho solicitando 48 CPUs, ele aguardará e pegará 4 nós COMPLETOS quando eles estiverem disponíveis.
Eu ainda uso a opção -l excl=True
, mas suspeito que isso seja irrelevante agora.
Se eu tiver trabalhos que exijam apenas uma CPU (e eu faço), eu os envio para a mesma fila, mas sem a opção -l exel=True
, e eu uso minha% originalpe_environment
que tem o allocation_rule = 'fillup'
Qualquer trabalho submetido com o ambiente mpich_12 irá esperar até que haja nós completos livres.
Meu cluster funciona muito melhor agora.