Nuestro grupo de trabajo produce una aplicación de escritorio que simula el rendimiento energético del edificio. Es una aplicación .NET y cuando el usuario ejecuta muchas simulaciones, puede llevar mucho tiempo. Las simulaciones son totalmente paralelizables, y tenemos algunos recursos informáticos de HPC muy significativos en "la oficina".
Una idea que hemos tenido es permitir que los usuarios descarguen simulaciones que sabemos que durarán mucho tiempo (mientras que cada simulación individual dura aproximadamente 30-120 segundos, ejecutar grandes cantidades de simulaciones podría llevar varios días). ¿Alguien ha hecho esto antes? Si es así, ¿usó alguna biblioteca para facilitar el trabajo? ¿Valió la pena el esfuerzo?
editado para agregar:
Las tareas individuales para descargar la simulación serían
- empaquetar un archivo (aproximadamente 5Mb),
- subiéndolo a nuestros servidores,
- descomponiendo el paquete en simulaciones individuales (cada una toma alrededor de 30-120 segundos y es totalmente paralelizable), la cantidad de simulaciones es una función de la cantidad de opciones seleccionadas por el usuario (aislamiento, orientación del edificio, etc.) y el peor caso de selección cada opción posible daría lugar a aproximadamente 1E50 simulaciones. Ejecutar simulaciones de 100 a ~ 1E5 no es desconocido, pero la mayoría de los usuarios ejecutarán menos de 10.
- reensamblar las simulaciones completadas y descargar el archivo ahora mucho más grande.
No estamos seguros de qué interfaz usar, ya que nuestro grupo es nuevo en esto, y con los recortes presupuestarios, podría completarse a tiempo, pero debe ser fácil de mantener para las próximas personas (si corresponde).
Esta aplicación ya usa .NET 4 y puede expandirse para usar todos los núcleos que tiene el usuario (nuestras máquinas de desarrollo tienen 8 núcleos).
fuente
Respuestas:
Puede considerar usar Condor: http://research.cs.wisc.edu/condor/ . Podría ser excesivo, dependiendo de qué tipo de recursos de HPC esté hablando y cuánto cambiarán. Sin embargo, es bastante fácil comenzar, y se encarga de lanzar trabajos independientes, tolerancia a fallas, equilibrio de carga, etc.
Sería más útil si fuera más específico sobre las tareas individuales (cuánto tiempo, qué tan asincrónicas) y qué interfaz usaría para la interacción (proceso de inicio, biblioteca, etc.)
Mate
fuente
Si estás en el mundo .NET, ¿has mirado el soporte de subprocesos múltiples en .NET 4; y las características asincrónicas que se agregan a .NET 4.5?
El subprocesamiento múltiple no lo ayuda a descargar el procesamiento a otras máquinas, pero le permite utilizar mejor las PC multinúcleo que todos usamos en estos días. 4.0 tiene algunas características agradables a este respecto.
4.5 está actualmente en vista previa de tecnología, por lo que vale la pena ver si ayudará. Hubo un artículo en MSDN que presentaba las nuevas funciones asincrónicas en el último mes (octubre o noviembre, y definitivamente no antes de septiembre). Parecía que estas características se estaban promocionando como una forma de paralelizar tradicionalmente un código menos paralelo, pero IIRC también incluían algo de soporte multiservidor.
fuente
La respuesta depende de lo que tenga como backend HPC. La pregunta se refiere a los recursos existentes disponibles para los usuarios de NREL. Hay clústeres de Linux y un clúster de Windows basado en Windows Compute Cluster Server.
Para usar el clúster de Linux, el autor debe asegurarse de que la rutina de simulación se ejecute en Mono (la implementación de la plataforma .NET para Linux) y asegurarse de que Mono esté instalado en los nodos.
La siguiente pregunta es si los usuarios tienen cuentas en los clústeres de cómputo y pueden llevar los datos a los nodos. El caso más simple es con un único sistema de archivos accesible desde PC locales y desde los nodos.
No estoy seguro de si dicho sistema de archivos está disponible para los usuarios de NREL, por lo tanto, se realizarán algunas copias. Esto ya complica las cosas.
A continuación, la aplicación debería poder compilar un script de descripción de trabajo, enviarlo al clúster respectivo y consultar al sistema de colas el estado de las simulaciones hasta que el trabajo salga de la cola.
Finalmente, la aplicación debería poder recuperar los resultados.
Todo esto es factible, aunque no es trivial, y sería muy específico para la configuración de este laboratorio en particular.
Las aplicaciones comerciales de Ansys o MSC le permiten al usuario guardar una descripción del trabajo de simulación que luego se puede ejecutar en modo por lotes en un clúster remoto.
Una solución más general sería utilizar la infraestructura Grid si está disponible.
A continuación, podría optar por la arquitectura orientada al servicio, donde se configura un servicio web en algún lugar para esperar las solicitudes de simulación y enviarlas al clúster, desacoplando la aplicación del conocimiento de los detalles de los recursos disponibles.
Esto se usa ampliamente, por ejemplo, en biología computacional, donde las herramientas se usan para componer flujos de trabajo de simulación que consisten completamente en solicitudes de procesamiento de servicios web.
Solo para tener en cuenta que la descarga de cálculos a recursos informáticos remotos se usa comúnmente en aplicaciones como el reconocimiento de voz de Google para Android.
fuente