Crie um trabalho falso para o SGE preencher todos os nós antes de lançar um trabalho que será executado em nós completos

Crie um trabalho falso para o SGE preencher todos os nós antes de lançar um trabalho que será executado em nós completos

O problema de enviar jobs no SGE para rodar em nós completos já foi abordado anteriormente neste fórum. Várias soluções foram sugeridas, uma delas é configurar o SGE para permitir o uso da opção -l excl=TRUE, outra solução é solicitar ao SGE memória rígida ou limites de carga.

Estou utilizando o cluster da minha universidade para minha tese de mestrado, o ambiente paralelo openmpi está configurado com a estratégia fill-up. Normalmente os nós do cluster contêm 16 ou 20 núcleos cada, o problema é que alguns usuários, em vez de lançar cálculos com um número de núcleos múltiplo de 16 (ou 20), eles lançam seus trabalhos com um número arbitrário de núcleos . Como resultado, quando executo um trabalho com -pe openmpi 16, às vezes o SGE reserva os processadores em 3 nós (por exemplo, 6 + 1 + 10), o que torna os cálculos muito lentos.

Pedi ao administrador para configurar o cluster para permitir -l excl=TRUE mas ele se recusou a alterar a configuração antes de fazer testes (não sei por quanto tempo).

Agora tenho uma nova ideia que pode me permitir ter um resultado semelhante a (-l excl=TRUE), mas sem alterar o cluster:

  1. Escreva um script que varrerá a fila e estimará o número de núcleos que devem ser solicitados ao SGE para que ele preencha todos os nós em execução e deixe apenas nós completamente livres.
  2. Inicie um trabalho falso com o número computado de núcleos que aguardará um determinado período de tempo.
  3. lançar meu verdadeiro trabalho (por exemplo, -pe openmpi 2*16=32).
  4. Exclua o trabalho falso para permitir que outros usuários usem seus núcleos

Alguém pode me fornecer um exemplo desse código?

Responder1

Lançar trabalhos com qsub -l cpu=0(ou cpu=0.1) funciona perfeitamente para mim.

informação relacionada