Cree un trabajo falso para que SGE llene todos los nodos antes de iniciar un trabajo que se ejecutará en nodos completos.

Cree un trabajo falso para que SGE llene todos los nodos antes de iniciar un trabajo que se ejecutará en nodos completos.

El problema de enviar trabajos en SGE para ejecutarse en nodos completos se abordó anteriormente en este foro. Se han sugerido varias soluciones, una de las cuales es configurar SGE para permitir el uso de la opción -l excl=TRUE, otra solución es pedirle a SGE memoria dura o límites de carga.

Estoy usando el cluster de mi universidad para mi tesis de maestría, el entorno paralelo openmpi está configurado con la estrategia de llenado. Normalmente los nodos del cluster contienen 16 o 20 núcleos cada uno, el problema es que algunos de los usuarios en lugar de lanzar cálculos con un número de núcleos múltiplo de 16 (o 20), lanzan sus trabajos con un número arbitrario de núcleos. . Como resultado, cuando lanzo un trabajo con -pe openmpi 16, a veces SGE reserva los procesadores en 3 nodos (por ejemplo, 6 + 1 + 10), lo que hace que los cálculos sean muy lentos.

Le pedí al administrador que configurara el clúster para permitir -l excl=TRUE pero se negó a cambiar la configuración antes de realizar las pruebas (no sé por cuánto tiempo).

Ahora tengo una nueva idea que puede permitirme tener un resultado similar a (-l excl=TRUE) pero sin cambiar el cluster:

  1. Escriba un script que escanee la cola y estime la cantidad de núcleos que se deben solicitar a SGE para que llene todos los nodos en ejecución y deje solo los nodos completamente libres.
  2. Inicie un trabajo falso con la cantidad calculada de núcleos que esperarán un cierto período de tiempo.
  3. iniciar mi verdadero trabajo (por ejemplo, -pe openmpi 2*16=32).
  4. Elimine el trabajo falso para permitir que otros usuarios utilicen sus núcleos.

¿Alguien puede darme un ejemplo de dicho código?

Respuesta1

Iniciar trabajos con qsub -l cpu=0(o cpu=0.1) funciona perfectamente para mí.

información relacionada