Наша рабочая группа выпускает настольное приложение, которое имитирует энергоэффективность здания. Это приложение .NET, и когда пользователь запускает много симуляций, они могут занимать довольно много времени. Моделирование полностью распараллеливаемо, и у нас есть несколько очень значительных вычислительных ресурсов HPC в «офисе».
У нас была одна идея - позволить пользователям разгружать модели, которые, как мы знаем, будут работать очень долго (в то время как каждое отдельное моделирование длится около 30-120 секунд, выполнение большого количества симуляций может занять несколько дней). Кто-нибудь делал это раньше? Если да, то использовали ли вы какие-либо библиотеки для облегчения работы? Стоило ли это усилий?
отредактировано, чтобы добавить:
Отдельные задачи для разгрузки симуляции будут
- упаковка файла (около 5 Мб),
- загрузить его на наши серверы,
- Разложение пакета на отдельные симуляции (каждая занимает около 30-120 секунд и полностью распараллеливаемая), количество симуляций является функцией количества опций, выбранных пользователем (изоляция, ориентация здания и т. д.) и наихудшего случая выбора каждый возможный вариант приведет к моделированию 1E50. Запуск от 100 до ~ 1E5 симуляций не неизвестен, но большинство пользователей будут работать менее 10.
- повторная сборка завершенных симуляций и загрузка теперь гораздо большего файла.
Мы не уверены, какой интерфейс использовать, так как наша группа является новичком в этом, и с сокращением бюджета, он может быть завершен вовремя, но его должны легко обслуживать следующие люди (если таковые имеются).
Это приложение уже использует .NET 4 и может расширяться для использования всех ядер, которые есть у пользователя (наши машины для разработки имеют 8 ядер).
источник
Ответы:
Вы можете рассмотреть возможность использования Condor: http://research.cs.wisc.edu/condor/ . Это может быть излишним, в зависимости от того, о каких ресурсах HPC вы говорите и насколько они изменятся. Однако его довольно легко начать, и он заботится о запуске независимых заданий, отказоустойчивости, балансировке нагрузки и т. Д.
Было бы более полезно, если бы вы были более конкретны в отношении отдельных задач (как долго, насколько асинхронно) и какой интерфейс вы будете использовать для взаимодействия (процесс запуска, библиотека и т. Д.)
Matt
источник
Если вы находитесь в мире .NET, вы смотрели на поддержку многопоточности в .NET 4; и асинхронные функции, которые добавляются в .NET 4.5?
Многопоточность не помогает перенести обработку на другие машины, но позволяет лучше использовать многоядерные ПК, которые мы все используем в наши дни. 4.0 имеет некоторые хорошие особенности в этом отношении.
4.5 в настоящее время находится в предварительном обзоре технологий - так что стоит посмотреть, поможет ли это. В MSDN была статья о новых асинхронных функциях за последний месяц или около того (октябрь или ноябрь, и определенно не раньше сентября). Похоже, что эти функции выдвигались как способ распараллеливания традиционно менее параллельного кода, но IIRC также включала некоторую поддержку нескольких серверов.
источник
Ответ зависит от того, что у вас есть в качестве бэкэнда HPC. Вопрос касается существующих ресурсов, доступных пользователям NREL. Существуют кластеры Linux и кластер Windows на базе Windows Compute Cluster Server.
Чтобы использовать кластер linux, автор должен убедиться, что процедура моделирования работает на Mono (реализация платформы .NET для linux) и убедиться, что Mono установлен на узлах.
Следующий вопрос заключается в том, могут ли пользователи иметь учетные записи в вычислительных кластерах и могут ли они получать данные на узлы. Простейший случай - одна файловая система, доступная с локальных компьютеров и с узлов.
Я не уверен, что такая файловая система доступна для пользователей NREL, поэтому потребуется некоторое копирование. Это уже усложняет ситуацию.
Затем приложение должно иметь возможность скомпилировать сценарий описания задания, отправить его в соответствующий кластер и запросить в системе очередей состояние моделирования до тех пор, пока задание не выйдет из очереди.
Наконец приложение должно быть в состоянии получить результаты.
Все это выполнимо, хотя и не тривиально и будет весьма специфичным для настройки этой конкретной лаборатории.
Коммерческие приложения от Ansys или MSC позволяют пользователю сохранить описание задания моделирования, которое впоследствии можно будет запустить в пакетном режиме на удаленном кластере.
Более общими решениями будет использование грид-инфраструктуры, если таковая имеется.
Затем можно было бы перейти к сервис-ориентированной архитектуре, где веб-сервис настроен где-то для ожидания запросов на симуляцию и отправки их в кластер, таким образом отделяя приложение от знания специфики доступных ресурсов.
Это широко используется, например, в вычислительной биологии, где инструменты используются для составления рабочих процессов моделирования, состоящих исключительно из запросов веб-служб для обработки.
Просто отметим, что выгрузка вычислений на удаленные вычислительные ресурсы обычно используется в таких приложениях, как распознавание голоса Google для Android.
источник