Notre groupe de travail produit une application de bureau qui simule la performance énergétique du bâtiment. Il s'agit d'une application .NET et lorsque l'utilisateur exécute un grand nombre de simulations, elles peuvent prendre beaucoup de temps. Les simulations sont totalement parallélisables, et nous avons des ressources informatiques HPC très importantes au «bureau».
Une idée que nous avons eue est de permettre aux utilisateurs de décharger des simulations dont nous savons qu'elles seront très longues (alors que chaque simulation individuelle dure environ 30 à 120 secondes, l'exécution d'un grand nombre de simulations peut prendre plusieurs jours). Quelqu'un a-t-il déjà fait cela? Si oui, avez-vous utilisé des bibliothèques pour faciliter le travail? Cela en valait-il la peine?
modifié pour ajouter:
Les tâches individuelles de déchargement de la simulation seraient
- empaqueter un fichier (environ 5 Mo),
- le télécharger sur nos serveurs,
- décomposer le package en simulations individuelles (chacune prend environ 30 à 120 secondes et est totalement parallélisable), le nombre de simulations est fonction du nombre d'options sélectionnées par l'utilisateur (isolation, orientation du bâtiment, etc.) et le pire des cas de sélection chaque option possible entraînerait environ 1E50 simulations. L'exécution de 100 à ~ 1E5 simulations n'est pas inconnue, mais la majorité des utilisateurs exécutera moins de 10.
- remonter les simulations terminées et télécharger le fichier désormais beaucoup plus volumineux.
Nous ne savons pas quelle interface utiliser, car notre groupe est nouveau dans ce domaine, et avec les compressions budgétaires, il pourrait être achevé à temps, mais doit être facile pour les prochains (le cas échéant) à maintenir.
Cette application utilise déjà .NET 4 et peut se développer pour utiliser tous les cœurs de l'utilisateur (nos machines de développement ont 8 cœurs).
la source
Réponses:
Vous pourriez envisager d'utiliser Condor: http://research.cs.wisc.edu/condor/ . Cela peut être exagéré, selon le type de ressources HPC dont vous parlez et leur évolution. Cependant, il est assez facile de démarrer et il s'occupe de lancer des travaux indépendants, la tolérance aux pannes, l'équilibre de charge, etc.
Il serait plus utile si vous étiez plus précis sur les tâches individuelles (combien de temps, comment asynchrone) et quelle interface vous utiliseriez pour l'interaction (processus de lancement, bibliothèque, etc.)
Mat
la source
Si vous êtes dans le monde .NET, avez-vous examiné la prise en charge multi-threading dans .NET 4; et les fonctionnalités asynchrones ajoutées à .NET 4.5?
Le multithreading ne vous aide pas à décharger le traitement sur d'autres machines, mais il vous permet de mieux utiliser les PC multicœurs que nous utilisons tous de nos jours. 4.0 a quelques fonctionnalités intéressantes à cet égard.
La version 4.5 est actuellement en avant-première technologique - il vaut donc la peine de regarder si cela peut aider. Il y avait un article dans MSDN présentant les nouvelles fonctionnalités asynchrones au cours du dernier mois environ (octobre ou novembre, et certainement pas avant septembre). Il semblait que ces fonctionnalités étaient poussées comme un moyen de paralléliser du code traditionnellement moins parallèle, mais l'IIRC incluait également une prise en charge multi-serveurs.
la source
La réponse dépend de ce que vous avez en tant que backend HPC. La question se réfère aux ressources existantes disponibles pour les utilisateurs NREL. Il existe des clusters Linux et un cluster Windows basés sur Windows Compute Cluster Server.
Pour utiliser le cluster linux, l'auteur doit s'assurer que la routine de simulation s'exécute sur Mono (l'implémentation de la plate-forme .NET pour linux) et que Mono est installé sur les nœuds.
La question suivante est de savoir si les utilisateurs ont des comptes sur les clusters de calcul et peuvent envoyer les données aux nœuds. Le cas le plus simple est celui d'un système de fichiers unique accessible à partir des PC locaux et des nœuds.
Je ne sais pas si un tel système de fichiers est disponible pour les utilisateurs NREL, donc une copie sera impliquée. Cela rend déjà les choses compliquées.
Ensuite, l'application devrait pouvoir compiler un script de description de travail, le soumettre au cluster respectif et interroger le système de mise en file d'attente pour l'état des simulations jusqu'à ce que le travail sorte de la file d'attente.
Enfin, l'application devrait pouvoir récupérer les résultats.
Tout cela est faisable mais pas trivial et serait très spécifique à la configuration de ce laboratoire particulier.
Les applications commerciales d'Ansys ou MSC permettent à l'utilisateur d'enregistrer une description de travail de simulation qui peut être exécutée ultérieurement en mode batch sur un cluster distant.
Une solution plus générale serait d'utiliser l'infrastructure Grid si elle est disponible.
On pourrait ensuite opter pour une architecture orientée services où un service Web est mis en place quelque part pour attendre les demandes de simulation et les répartir sur le cluster découplant ainsi l'application de la connaissance des spécificités des ressources disponibles.
Ceci est largement utilisé par exemple en biologie computationnelle, où des outils sont utilisés pour composer des workflows de simulation composés entièrement de demandes de service Web pour le traitement.
Juste pour noter que le déchargement des calculs vers des ressources informatiques à distance est couramment utilisé dans des applications comme la reconnaissance vocale de Google pour Android.
la source