Gestión de simulaciones de ejecución prolongada

si hay una mejor pila para preguntar esto, házmelo saber.

Mi problema

Tengo una simulación que tarda de 3 a 4 días en ejecutarse . Quiero ejecutar muchos de estos, con diferentes parámetros definidos en archivos de texto en máquinas Linux remotas a través de ssh (lo más probable). Ya he estado haciendo esto a través de una combinación de bash, python, ssh y screen. Mis scripts envían (o transmiten muchos conjuntos de) los archivos de entrada a un directorio en máquinas remotas e inician la simulación en una pantalla separada. Tengo una secuencia de comandos que comprueba si la simulación ha finalizado y, cuando lo ha hecho, tengo otra secuencia de comandos que procesa los resultados de forma remota y luego los recopila.

Actualmente, tengo algunos problemas. Algunas de las máquinas remotas son computadoras de laboratorio, lo que significa que, aunque se supone que no deben apagarse, inevitablemente se apagan de vez en cuando. La simulación escribe las salidas cada 10 pasos de tiempo , por lo que no hay una gran pérdida de trabajo, pero la simulación debe reiniciarse una vez que se vuelve a encender la computadora. A veces, la simulación falla, el último paso de tiempo registrado debe eliminarse y la simulación se reinicia manualmente. En una nota relacionada, puedo consultar las máquinas remotas con un script para ver si la simulación finalizó correctamente, pero no sé cómo verificar si la simulación se está ejecutando o esperando reiniciarse sin usar ssh y top.

lo que me gustaría

Me gustaría hacer este proceso más sofisticado y simplificado. El modelo en sí fue desarrollado por otra persona (es un modelo OpenFoam CFD si eso marca la diferencia) y lo he heredado para poder usarlo para el trabajo de metamodelado y optimización y no está en mi campo de experiencia profundizar realmente en el modelo mucho yo mismo.

Idealmente, me gustaría crear un tablero o CLI que pueda usar para administrar estas simulaciones de manera robusta, remota y sencilla. Me gustaría usar Python si es posible, porque me sentiría más cómodo con eso, y también estoy muy contento con bash , aunque mi trabajo en bash es mucho más complicado.

Estoy buscando patrones de diseño o herramientas que me permitan consultar el grupo de máquinas que tengo de manera programática , verificar el estado de mis simulaciones de manera programática y luego programar el comportamiento en función de esos estados.

Ejemplo

Por ejemplo: cuando una computadora se apaga con una de mis simulaciones en ejecución, normalmente no me doy cuenta hasta que busco los resultados; de lo contrario, el proceso lleva bastante tiempo, por lo que hay mucho tiempo de cómputo perdido. ¿Hay una herramienta bash o fabric o paramiko me permiten recibir una notificación cuando se apaga una máquina? ¿Es una tontería configurar una tarea en una máquina que sé que no se apagará y que consultará continuamente cada una de mis máquinas para verificar si todavía están encendidas?

Alternativas

Si esto no parece factible, ¿merece la pena pasarse a la nube? Primero, mi preocupación es que esto me costará (no creo que tenga un presupuesto para esto) y que será una gran molestia configurar el entorno adecuado, pero ¿me equivoco? No es algo con lo que esté familiarizado.

TL: DR Quiero poder consultar mediante programación el estado y reiniciar simulaciones en máquinas remotas a través de ssh.

Supongo que desea un sistema por lotes como el que se usa generalmente en los clústeres
Gracias, le daré una oportunidad. Parece que pspodría ser una utilidad de línea de comandos útil. Este enlace parece bastante útil para desarrollar: anyexample.com/linux_bsd/bash/…
Para ser claros, ¿quiere una herramienta/biblioteca que le permita consultar el estado de los trabajos en ejecución en máquinas Linux a través de SSH a través de Python?
No necesariamente a través de Python. Bas está bien. Me gustaría crear una aplicación a partir de él, de modo que sea menos una verificación manual, una verificación más automatizada y notificaciones automáticas de que una computadora se apaga o si un trabajo finaliza, se puede asignar a la computadora una nueva sin tener que hacerlo manualmente .
Si eventualmente ejecuto un EA a través de este sistema usando estas simulaciones como funciones objetivo, por ejemplo, pensé que podría ser más fácil en Python.
Suena genial. Este es un problema realmente interesante, ¡espero que obtengas una respuesta!
Sugeriría echar un vistazo al software de gestión de trabajos de la granja de renderizado (mucho de él en python), que ya existe, posiblemente con miras a adaptarlo a su caso de uso. Los problemas son muy similares.
¿Alguna sugerencia para cuál específicamente? Todo es nuevo para mí, por lo que un punto de partida, como un nombre, sería genial.

Respuestas (2)

Sugiero mirar esto. No lo he usado yo mismo, pero lo haré la próxima vez que necesite hacer cosas como esta:

http://python-rq.org/

RQ (Redis Queue) es una biblioteca de Python simple para poner en cola trabajos y procesarlos en segundo plano con los trabajadores. Está respaldado por Redis y está diseñado para tener una barrera de entrada baja. Se puede integrar fácilmente en su pila web.

Una pista: dices que las simulaciones tardan entre 3 y 4 días en ejecutarse. Intentaría cortar esto en pedazos pequeños. ¿Hay alguna manera de hacer un procesamiento paralelo? Esto tiene muchos beneficios:

  • Si calcula fragmentos pequeños, no perderá mucho si falla un nodo.
  • Es mas rapido.
Creo que esto es probablemente lo que quería. Ya no estoy haciendo este tipo de cosas, pero creo que podría haber tenido una secuencia de comandos de python que usa una biblioteca paralela estándar para administrar procesos secundarios y subprocesos para envolver la simulación en sí. Es un patrón bastante simple, y supongo que RQ hace exactamente eso y más, ¿con una cola? ¿Cuáles son las trampas a tener en cuenta al usar un patrón de este tipo? Qué tan resistente es: es decir. si una computadora que ejecuta un proceso secundario se apaga y se pierde la conexión, ¿es lo suficientemente robusta para mantener todo lo demás en marcha?
@Ogaday No he usado python-rq.org yo mismo. Usé apio una vez, y creo que tiene demasiadas características y algunos inconvenientes. Los inconvenientes del apio son, según mi punto de vista: un solo hombre (solo mire el historial de confirmación en github) y reiniciar no es fácil (pregunté sobre este año y hace unos tres años, pero nada ha cambiado).
La tela también parece una buena opción, pero ¿solo Python 2? Viendo que estaba haciendo cosas sobre ssh, podría tener mucho sentido.
@Ogaday Fabric no es para ejecución paralela. Es como un script de shell remoto (algo que aprendí y lo evitaré en el futuro). Actualmente estamos en el proceso de cambiar de tejido a sal (para la gestión de configuración).

computación en red

No soy un experto en esto, pero sospecho que Grid Computing es el término técnico para sus necesidades.

Una de las primeras herramientas de este tipo fue Xgrid de Apple, basada en Zilla de Next, Inc. Ahora descontinuada.

HTCondor parece ser una solución que podría funcionar para usted. Es un proyecto de código abierto de larga duración en una universidad. Se ejecuta en Linux y otros sistemas operativos.

Oracle Grid Engine es otro proyecto de este tipo. Bifurcado en varios proyectos relacionados.

Wikipedia tiene esta lista de proyectos de computación Grid .

Una restricción que olvidé mencionar fue que no soy un superusuario en la red. Sin embargo, parece que vale la pena investigar la computación en red. He oído hablar de HTC Condor antes, y creo que podría haber algo así configurado en la red, así que investigaré un poco, gracias.