Введение
Во всю историю вычислительной техники не было момента, чтобы уровня развития вычислительной техники было достаточно для решения всех стоящих перед человечеством задач. Постоянно ставятся новые, все более сложные задачи, требующие все более мощных вычислительных ресурсов для своего решения. И современные технологии создания вычислительной техники подошли к рубежу, когда дальнейшее наращивание скорости работы индивидуальных устройств становится практически невозможным. В связи с этим развитие вычислительной техники пошло по экстенсивному пути, основанному на дублировании вычислительных устройств, которые в параллели могут работать над общей задачей. Вместе с этим родилось параллельное программирование, призванное дать возможность эффективно использовать параллельные архитектуры. И сегодня разработчики программных систем используют параллелизм на всех уровнях, начиная от нескольких конвейеров суперскалярных процессоров, и заканчивая параллельно работающими вычислительными узлами в GRID.
Отдельный класс параллельных архитектур представляют кластерные системы. Кластер - это совокупность вычислительных узлов, объединенных сетью. Параллельное приложение для кластерной системы представляет собой несколько процессов, которые общаются друг с другом по сети. Таким образом, если пользователь сумеет эффективно распределить свою задачу между несколькими процессорами на узлах кластера, то он может получить выигрыш в скорости работы, пропорциональный числу процессоров.
Как правило, кластерные системы крайне интенсивно используются для проведения вычислений. Предприятия и организации чаще всего приобретают кластеры для решения потока задач. И зачастую потребности желающих воспользоваться вычислительными ресурсами превосходят доступный объем ресурсов, поэтому к кластерам можно наблюдать очереди. Ситуация очень похожа на ту, что существовала с мэйнфреймами на заре компьютерной эпохи. В то время для эффективного управления потоками задач создавались так называемые системы пакетной обработки. Пользователи помещали свои задачи в очередь этих систем, а за результатом приходили через нескольких часов, а иногда и дней.
Примерно то же самое происходит сейчас на кластерах, поэтому правильное распределение нагрузки по вычислительным узлам кластера имеет очень большое значение. Этот вопрос приобретает еще большую важность в случае, если кластер имеет неоднородную структуру: различается мощность центральных процессоров, объем оперативной памяти, скорость участков локальной сети. Если не учитывать особенности аппаратуры, то можно наблюдать, как параллельное приложение простаивает, дожидаясь процесса, который был распределен на самый медленный вычислительный узел.
Помимо эффективного планирования запуска задач на кластере, необходимо также автоматизировать процессы приема пользовательских задач, постановки их в очередь, запуска и сбора результатов. Важно обеспечить безопасность использования кластера, его отказоустойчивость, сделав при этом работу с кластером максимально простой, избавляя пользователей от лишних технических подробностей. Все эти факторы приводят к необходимости создания специализированных систем управления кластерами, основная цель которых - предоставить удобные средства эффективного использования кластера.
История появления Microsoft High Performance Computing Server 2008
Долгое время среди операционных систем для кластеров лидировали UNIX-подобные системы. Прежде всего, это объясняется тем, что кластеры функционировали в основном в исследовательских организациях, большинство из которых по историческим причинам ориентированы на использование UNIX. Еще одним сдерживающим фактором распространения Windows на кластерах было отсутствие хорошей системы управления. Впоследствии, однако, многие системы управления были перенесены с UNIX на Windows (Condor, PBS, Platform LSF), но при этом остались трудны в эксплуатации для рядового пользователя Windows.
Отсутствие надежной и удобной системы управления причиняло многочисленные неудобства пользователям Windows-кластеров. В настоящее время многие организации для ведения своего бизнеса приобретают огромные парки вычислительных машин, и довольно часто выбор операционной системы решается в пользу Windows из соображений простоты и удобства использования. Если этой же организации необходимо было проводить массовые параллельные вычисления, то еще совсем недавно у нее практически не оставалось иного выбора, как приобретать Linux-кластер, поскольку стабильного и эффективного решения для Windows не существовало. Отсюда возникали различные сложности, связанные с интеграцией Linux-кластера в Windows-окружение, разработкой программного обеспечения под Linux и так далее. Фактически информационная инфраструктура организаций разделялась на Windows и Linux составляющие, поэтому много усилий уходило на то, чтобы организовать взаимодействие между ними.
9 июня 2006 года Microsoft объявила о выходе собственной системы управления Microsoft Compute Cluster Server 2003 (CCS). Система получила хорошую оценку и была признана очень удобной для небольших и средних Windows-кластеров. Крупные поставщики аппаратного обеспечения, такие как Hewlett Packard и IBM, практически сразу после появления CCS стали предлагать на ее основе интегрированные решения для HPC.
Появление CCS позволило снять целый ряд проблем. Существенно упростились процедуры разворачивания вычислительного кластера, его настройки и включения в информационную инфраструктуру организаций. Что особенно важно, вместе с CCS поставляется набор утилит для разработки параллельных приложений (реализация стандарта MPI2). Разработчики получили возможность разрабатывать и отлаживать параллельные программы в интегрированной среде Microsoft Visual Studio, а затем отправлять свои задания на кластер через дружественный графический интерфейс. Тем самым Microsoft обеспечил максимально простой переход разработчиков от последовательного программирования к параллельному, что раньше требовало приобретения массы дополнительных знаний, в том числе и об устройстве операционной системы Linux. Администратор Windows, даже без опыта в параллельных вычислениях, в состоянии развернуть CCS-кластер буквально за пару часов. Кластеры же на основе Linux при настройке обычно требуют значительных усилий и существенных знаний операци
онной системы Linux.
В сентябре 2008 года вышел Microsoft High Performance Computing Server (HPC Server 2008 или HPC 2008) - новая версия системы управления кластером от Microsoft. HPC 2008 является логическим продолжением и наследует все лучшие черты CCS: простоту в использовании, развертывании и администрировании. При этом в HPC 2008 реализовано множество новых возможностей, которые могут существенно повысить отдачу от использования вычислительных ресурсов. Среди новых реализованных возможностей можно отметить следующее:
Более эффективное распределение задач по узлам кластера:Возможность планирования на различных уровнях вычислительных ресурсов: ядра, сокеты, узлы,
Новые политики планирования: подбор наилучших ресурсов, соответствующих запросу задания (resource matchmaking), приоритетное прерывание обслуживания (preemption), адаптивное выделение ресурсов (adoptive allocation),
Поддержка стандарта HPC Basic Profile, разработанного Open Grid Forum, что дает возможность отправлять задания на кластер под управлением HPC 2008 из операционных систем и языков программирования, не поддерживаемых Microsoft,
Удобные инструменты администрирования систем:Возможность создания групп из вычислительных узлов для автоматизации развертывания и выполнения обновлений и шаблонов задач для более удобного разграничения прав пользователей по запуску различных типов задач,
Возможность использования нескольких головных узлов для повышения надежности системы,
Упрощение развертывания больших кластеров за счет использования Windows Deployment Services,
Новая, более удобная консоль администрирования, богатые возможности мониторинга вычислительных улов.
Оптимизация интерфейса передачи сообщений (MPI):Возможность использовать NetworkDirect, сетевого интерфейса, позволяющего существенно повысить производительность MPI приложений,
Оптимизация MPI операций, работающих через общую память,
Встроенные возможности профилирования,
Улучшенная поддержка высокопроизводительных систем хранения данных.
Microsoft High Performance Computing Server 2008 тесно интегрируется с другими новейшими продуктами и технологиями Microsoft, такими как Microsoft Office SharePoint Server 2007, Windows Workflow Foundation и др., позволяет использовать информацию из Active Directory, что дает возможность встроить высокопроизводительный кластер в имеющуюся Windows - инфраструктуру без привлечения дополнительных специалистов и/или крупных расходов на переобучение сотрудников.
Системные требования
В качестве вычислительных узлов кластера могут быть использованы x64 процессоры семейства Intel Pentium или Xeon c технологией EM64T, 64 битные процессоры семейства AMD Opteron, AMD Phenom, AMD Athlon и совместимые. Минимальный размер оперативной памяти - 512 Мб, минимальный размер свободного дискового пространства - 50 Гб.
На вычислительных узлах кластера должна быть установлена операционная система Microsoft Windows Server 2008 x64 (Standard или Enterprise).
Архитектура системы
Компоненты системы
На рис.2.1 условно представлена архитектура вычислительного кластера, функционирующего под управлением HPC 2008:
(рис 2.1) Архитектура кластераВычислительные узлы (compute nodes) . Узлы, на которых происходит непосредственный запуск счетных заданий. На вычислительных узлах устанавливается Microsoft MPI и другие сервисы HPC Server 2008 управления вычислениям,
Головной узел (head node). Выделенный узел, управляющий вычислениями на кластере. Головной узел принимает задания от пользователя, поддерживает очередь заданий, планирует запуски, собирает статистику выполнения и осуществляет другие служебные операции. Головной узел так же может совмещать роль вычислительного узла.
Дадим определение важнейшим понятиям, используемым в HPC 2008:
Задание (job) - запрос на выделение вычислительного ресурса кластера для выполнения задач. Каждое задание может содержать одну или несколько задач,
Задача (task) - команда или программа (в том числе, параллельная), которая должна быть выполнена на кластере. Задача не может существовать вне некоторого задания, при этом задание может содержать как несколько задач, так и одну,
Планировщик заданий (job scheduler) - сервис, отвечающий за поддержание очереди заданий, выделение системных ресурсов, постанову задач на выполнение, отслеживание состояния запущенных задач,
Узел (node) - вычислительный компьютер, включенный в кластер под управлением HPC 2008,
Сокет (socket) - один из, возможно, нескольких вычислительных устройств (процессоров) узла. Даже в том случае, если процессор содержит несколько ядер под количеством сокетов будет пониматься количество устройств физически вставленных в материнскую плату (например, на компьютере с 2 процессорами Intel Xeon по 2 ядра в каждом 2 сокета),
Ядро (core) - минимальный счетный элемент вычислительного узла. Количество ядер, доступное на вычислительном узле HPC 2008, совпадает с количеством виртуальных процессоров, отображаемых в программе Task Manager на узле,
Очередь (queue) - список заданий, отправленных планировщику для выполнения на кластере. Порядок выполнения заданий определяется принятой на кластере политикой планирования,
Список задач (task list) - эквивалент очереди заданий для задач каждого конкретного задания.
Microsoft MPI
Message Passing Interface (MPI, интерфейс передачи сообщений) - открытый стандарт, описывающий интерфейс обмена сообщениями между процессами параллельной программы. MPI объединяет узлы кластера вместе, предоставляя программисту функции, существенно упрощающие сложности, возникающие при программировании обмена данными между сотнями или тысячами узлов. В настоящее время MPI является наиболее часто используемым интерфейсом передачи сообщений на кластерных системах. Наиболее популярной реализации стандарта MPI является MPICH2, созданной в Argonne National Laboratory - организации, разработавшей и сам стандарт MPI.
MS MPI - реализация стандарта MPI (версии 2) от Microsoft. MS MPI основан на MPICH2 и продолжает разрабатываться так, чтобы остаться максимально совместимым с MPICH2. MS MPI включает всю функциональность, описанную в стандарте, за исключением динамического создания процессов.
При работе с HPC 2008 у пользователей остается возможность использовать реализации MPI сторонних компаний (например, MPICH2), но в этом случае часть функций HPC 2008 будет недоступна. Так, корректное освобождение всех ресурсов задания при его принудительной остановке гарантируется только при использовании MS MPI. Кроме того, использование MPI сторонних производителей, возможно, повлечет за собой необходимость ручного выполнения дополнительных административных операций.
Сетевые топологии
HPC 2008 может работать с различными сетевыми интерфейсами, среди которых наиболее популярные кластерные интерфейсы: Gigabit Ethernet, 10 Gigabit Ethernet, Infiniband и Myrinet. Для достижения наибольшей производительности рекомендуется использовать сетевое оборудование тех производителей, которые предоставляют NetworkDirect интерфейс, позволяющий максимально использовать сетевые ресурсы и при этом не загружать центральный процессор вспомогательной работой. Выигрыш от NetworkDirect интерфейса достигается за счет использования более короткой цепочки до сетевого оборудования, без промежуточного копирования пересылаемых данных, возникающего при использовании стандартного механизма сокетов.
Использование нескольких сетевых интерфейсов одновременно может повысить производительность системы за счет разделения служебного трафика и MPI трафика. HPC 2008 поддерживает 5 вариантов сетевых топологий (см. рис. 2.2 ).
(рис 2.2) Окно выбора сетевой топологии кластера под управлением HPC 2008Правильный выбор топологии позволяет оптимизировать работу Ваших MPI-программ и системы в целом. При описании топологий используются следующие понятия:
Открытая сеть ( Public network ) - корпоративная сеть организации, соединенная с головным и (возможно) вычислительными узлами кластера. Через открытую сеть пользователи подключаются к головному узлу для управления выполнением их заданий. MPI-трафик будет направлен через открытую сеть только в том случае, если нет закрытой или MPI - сети,
Закрытая сеть ( Private network ) - выделенная сеть, предназначенная для коммуникации между узлами вычислительного кластера. Эта сеть (если она есть) будет использована для административного трафика (удаленный рабочий стол, установка вычислительных узлов с использованием RIS и пр.). Кроме того, через закрытую сеть будет направлен MPI - трафик в том случае, если нет специальной MPI - сети,
MPI-сеть ( MPI network ) - выделенная сеть (предположительно, наиболее быстрая из 3 перечисленных), через которую идет трафик MPI - программ. В случае, если Ваша программа не использует MPI - библиотеки для передачи сообщений по сети, то MPI - сеть не будет использоваться.
Ниже приведено описание сетевых топологий, используемых в HPC 2008:
Безопасность
Кластера обычно используются несколькими десятками или даже сотнями пользователей одновременно. При этом пользователи могут не иметь глубоких знаний в системном программировании и администрировании кластеров. Поэтому вопрос безопасности при использовании кластеров является очень важным. Пользователь кластера не должен иметь возможность нарушить правила использования вычислительного ресурса, нарушить ход выполнения задач других пользователей, посмотреть чужие результаты работы или изменить настройки системы. HPC Server 2008 использует Active Directory для выполнения всех пользовательских задач и команд администратора в контексте и именно с теми правами, которые имеет запускающий пользователь. Все права закодированы и хранятся вместе с заданием до окончания его выполнения. Административный трафик HPC 2008 пересылается с использованием закодированных каналов, что предотвращает несанкционированный перехват трафика и выполнение административных команд пользователями
, не имеющими соответствующих прав. Механизмы безопасности, реализованные в MS MPI, не являются частью стандарта MPI, поэтому при использовании сторонних реализаций MPI информационная безопасность кластера может оказаться под угрозой.
Развертывание и диагностика
HPC 2008 упрощает развертывание больших кластеров за счет использования Windows Deployment Services. Установка кластера из нескольких тысяч узлов займет не больше часа! Установка состоит из 3 основных шагов: установка головного узла, установка вычислительных узлов, диагностика и устранение неполадок. Рассмотрим эти шаги по порядку.
Установка головного узла
На головной узел кластера необходимо предварительно установить операционную систему Microsoft Windows Server 2008 x64. Установка операционной системы осуществляется обычным образом и не требует пояснений сверх тех, которые приведены в руководстве к операционной системе. Следующий шаг - установка High Performance Computing Server 2008 Pack. Установка осуществляется с помощью стандартного инсталлятора (программа setup.exe). Инсталлятор может быть использован для инсталляции как головного, так и вычислительного узлов. В процессе инсталляции нужно выбрать тип устанавливаемого узла ("Create a new HPC cluster by creating a head node" в случае головного узла, см. рис. 2.3.). Третья опция на рис. 2.3 ("Install only the client utilities") предназначена для установки приложений доступа к кластеру с рабочих станций (см. схему на рис. 2.1).
(рис 2.3) Окно выбора типа устанавливаемого узлаДля работы сервисов HPC 2008 требуется некоторое программное обеспечение, которое не входит в стандартный комплект операционной системы. При необходимости что-то установить инсталлятор сам выведет необходимый список и запустит соответствующие инсталляторы (см. рис. 2.4)
(рис 2.4) Окно установки дополнительного программного обеспеченияПосле окончания установки головного узла появится окошко "To do list", которое содержит список действий, которые необходимо выполнить для окончания настройки кластера (см. ):
Configure your network - выбор сетевой топологии кластера. Администратору необходимо выбрать одну из пяти поддерживаемых сетевых топологий и указать, какой сетевой адаптер соответствует сетям административного, MPI трафика и открытой сети,
Provide installation credentials - выбор пользователя, под которым будет осуществляться добавление к кластеру новых узлов и запуск диагностических тестов. Пользователь должен иметь права записи в Active Directory,
Configure the naming of new nodes - выбор шаблона имени узлов кластера. Опция позволяет задать правила формирования имен добавляемых вычислительных узлов,
Create a node template - создание шаблона вычислительных узлов. Опция позволяет настроить автоматическую установку всего необходимого ПО на вычислительные узлы. Более подробное описание приведено в пункте "Установка вычислительных узлов".
(рис 2.5) Окно "to do list"
Установка вычислительных узлов
Установку вычислительных узлов можно проводить способом, аналогичным описанному для головного узла: сначала установка операционной системы, потом установка HPC Server 2008 Pack. В процессе установки пака нужно выбрать пункт "Joint an existing HPC cluster by creating a new compute node" (см. рис. 2.3) после чего указать имя головного узла, к которому будет добавлен устанавливаемый вычислительный узел. Такой способ установки подходит для небольших кластеров. В случае нескольких сотен узлов выполнение ручного запуска инсталляторов на каждом узле заняло бы слишком много времени. Для быстрой установки вычислительных узлов больших кластеров в HPC 2008 предусмотрена возможность заливки на вычислительные узлы операционной системы и всего необходимого программного обеспечения в автоматическом режиме. Сервисы Windows Deployment, установленные на головном узле, автоматически обнаружат вычислительные узлы и вып
олнят все необходимые шаги установки самостоятельно. Для этого необходимо предварительно создать шаблон вычислительных узлов с опцией "With operating system" (см. рис. 2.6) и указать образ операционной системы (см. рис. 2.7).
(рис 2.6) Окно выбора типа шаблона узла
(рис 2.7) Выбор образа операционной системы, устанавливаемой на вычислительные узлыШаблон узла позволяет так же выполнить автоматическую установку необходимых библиотек и программ. Для этого в шаблон необходимо добавить соответствующие задачи копирования на узел инсталляторов, библиотек, а также команду запуска их установки. Шаблоны узлов доступны в программе HPC Cluster Manager, на вкладке Configuration, пункт Node Templates (см. рис. 2.8).
(рис 2.8) Редактор параметров шаблона узлаПосле создания шаблонов необходимо просто включить вычислительные узлы. Если на узлах активирована среда PXE, то новые узлы появятся в списке All Nodes вкладки Node management программы HPC Cluster Manager в состоянии "Unknown". Узлам необходимо присвоить шаблон (команда "Assign Node Template"), после чего начнется установка (статус вычислительных узлов сменится на "Provisioning"). По окончании установки узлы будут добавлены в кластер.
Диагностика вычислительного кластера
Инструменты диагностики кластера позволяют упростить следующие административные задачи:
Проверка работоспособности кластера после развертывания или изменения конфигурации,
Установка причин ошибок в работе кластера,
Оценка производительность и предотвращение возможного падения производительности с течением времени.
HPC 2008 содержит 16 встроенных диагностических тестов:
Тесты готовности кластера к работе: проверка работы планировщика, проверка доступности всех узлов и запущенных на узлах сервисов, тест сетевых интерфейсов, проверка работы SOA компонент,
Сравнение конфигураций вычислительных узлов: построение отчетов, позволяющих проанализировать отличия в установленных приложениях, настройках сети, установленных обновлениях и сервисах на вычислительных узлах,
Производительность: тесты латентности и скорости сетевых интерфейсов.
Встроенные тесты позволяют выводить результаты своей работы в виде HTML страниц или таблиц Excel.
Работа с заданиями
Как уже упоминалось выше, в HPC 2008 разделяют 2 отдельных понятия: задание (job) и задача (task). Под заданием понимается запрос на выделение вычислительных ресурсов, тогда как задача - это команда или программа, которая должна быть выполнена на кластере. Задание может содержать как одну, так и несколько задач. Ресурсы, выделенные заданию, остаются закрепленными за этим заданием до того момента, когда закончит выполнение последняя задача, входящая в задание.
Задачи могут быть последовательными или параллельными. Для запуска параллельных заданий, осуществляющих обмен сообщениями с использованием интерфейса MPI, необходимо использовать команду mpiexec. Информация о параметрах команды mpiexec и примеры использования можно найти в лабораторной работе " Microsoft High Performance Computing Server 2008".
Для облегчения серийных запусков задач и указания последовательности выполнения в HPC 2008 выделяют два особых вида заданий:
(рис 2.9) Параметрическое множество задач
(рис 2.10) Поток задач
HPC 2008 предоставляет пользователю возможность выбрать, какой интерфейс использовать для запуска программ: графический, командный или интерфейс приложений. Каждый интерфейс имеет свои преимущества: графический интерфейс наиболее прост в использовании, командный интерфейс позволяет опытным пользователям автоматизировать запуск задач с использованием скриптов, прикладной интерфейс предоставляет неограниченные возможности интеграции с собственным программным обеспечением. Далее дается обзор каждого из интерфейсов. Более подробная информация по графическому и командному интерфейсам может быть получена в лабораторной работе.
Шаблоны заданий
Перед тем, как пользователи смогут запускать задания в Microsoft HPC 2008, администратор кластера должен задать правила, определяющие кто, на каких узлах и какие задания может запускать. Правила задаются с помощью, так называемых, шаблонов заданий ( job templates ). Изменить их может только администратор кластера.
Шаблон заданий позволяет задать следующие параметры (см. рис. 2.11):Minimum Cores/ Maximum Cores - минимальное и максимальное число ядер, которые может выбрать пользователь для своих заданий,
Minimum Nodes/ Maximum Nodes - минимальное и максимальное число узлов, которые может выбрать пользователь для своих заданий,
Minimum Sockets/ Maximum Sockets - минимальное и максимальное число сокетов, которые может выбрать пользователь для своих заданий,
Requested Resources - тип ресурсов, доступный для выбора (ядро, сокет, узел),
Exclusive - опция определяет, может ли пользователь выбирать, будет ли его задача эксклюзивно использовать ресурсы (эксклюзивность означает невозможность запуска других задач на вычислительных ресурсах одновременно с первой задачей). Опция позволяет администратору также задать значение параметра по умолчанию,
Run Until Cancelled - возможность задания параметра " Run Until Cancelled " позволяет пользователю запускать задания, которые не будут сняты до истечения заданного временного ресурса или принудительного снятия пользователем или администратором. Это позволяет сохранить закрепление вычислительных ресурсов за пользователем для последующего запуска новых задач по результатам выполнения предыдущих,
Priority - опция определяет список допустимых приоритетов заданий,
Auto Calculate Min/ Auto Calculate Max - задание опции " Auto Calculate " позволяет планировщику самостоятельно определять соответственно минимальные и максимальные требования задания к ресурсам на основании требований входящих в задание задач. С помощью шаблонов заданий администратор может запретить пользователям самостоятельно выбирать эту опцию,
FailOnTaskFailure - опция определяет, должна ли система управления завершить выполнение задания, если выполнение входящей в него задачи завершилось с ошибкой,
Preemptable - настройка " preemptable " позволяет системе управления прерывать выполнение низкоприоритетных задач при появлении более приоритетных.
(рис 2.11) Окно редактирования шаблона заданий
Графический интерфейс
Графический интерфейс управления заданиями представлен в HPC 2008 утилитой HPC Job Manager (см. рис. 2.12). Утилита выводит список заданий на кластере с указанием их текущего состояния, пользователя, осуществившего запуск, приоритета и другой информации. При выборе задания в нижнем списке отображаются задачи, из которых состоит выделенное задание. Предусмотрена возможность фильтрации заданий по различным параметрам.
(рис 2.12) Окно управления очередью заданийЗапуск нового задание осуществляется командой Action->Job Submission->New Job. Остановка и изменение параметров заданий и задач осуществляется соответствующими командами контекстного меню.
Командный интерфейс
HPC 2008 предоставляет командный интерфейс для управления заданиями и вычислительными узлами. Эти команды позволяют пользователям создавать, отправлять и контролировать задания, а администраторам - управлять самим кластером. Также командный интерфейс может быть использован для написания сценариев, так, например, администраторы могут автоматизировать некоторые операции по работе с очередью заданий или с вычислительными узлами.
Собственно сам интерфейс состоит из пяти ключевых команд: job, task, cluscfg, clusrun и node. Эти команды, вызываемые с различными аргументами, дают доступ практически ко всей функциональности планировщика заданий. Для удобства пользователей вся необходимая им функциональность доступна через команды job и task. Фактически эти две команды полностью покрывают всю функциональность графического менеджера заданий.
Сочетание, например, следующих трех команд: job new, job add, job submit и job view, с соответствующими аргументами, позволяет создать новое задание, поставить его в очередь, подтвердить необходимость запуска, а затем узнать его состояние. Для быстрого запуска задания можно воспользоваться, например, следующей строкой:
job submit /numpcores:4 /stdin:infile /stdout:outfile mpiexec myapp.exe
В результате на кластере будет запущено параллельное приложение myapp из 4 процессов, которое в качестве стандартного потока ввода использует файл c именем infile, а в качестве стандартного потока вывода - outfile.
Командный интерфейс достаточно хорошо документирован и достаточно прост в освоении. Кроме того, Microsoft предлагает широкий выбор уже готовых сценариев для работы с HPC 2008, которые будут полезны каждому администратору.
PowerShell
PowerShell - скриптовый язык, разработанный Microsoft для ускорения и автоматизации задач, выполняемых системным администратором.
PowerShell работает с объектами Microsoft .NET, что позволяет использовать всю мощь.NET, сохраняя простоту интерактивной оболочки. Пользователи HPC 2008 имеют возможность управлять системой с помощью PowerShell, что предоставляет существенно большие возможности, чем те, что дает обычная командная строка.
Проиллюстрируем мощь и простоту PowerShell на коротком примере (пример из [[2.1]).
В следующем скрипте администратор собирает все узлы имеющие, как минимум, 8 процессоров, в группу "FastNodes". После этого он тестирует группу, запуская на ней задание "TestJob":]
Get-HpcNode | where {$_.NumProcessors -gt 8} | Add-HpcGroup "FastNodes"
New-HpcJob -Name "TestJob" -NodeGroup "FastNodes" | Submit-HpcJob
Интерфейс приложений
HPC 2008 предоставляет возможность управлять кластером через .NET интерфейсы, реализованные в библиотеках Microsoft.Hpc.Scheduler.dll, Microsoft.Hpc.Scheduler.Properties.dll и Microsoft.Hpc.Scheduler.Session.dll.
В качестве примера (пример из [[2.1]) использования интерфейса приложений рассмотрим добавление задания в очередь.
Для этого необходимо выполнить следующие действия:]
Соединиться с кластером (метод IScheduler.Connect )
Создание задание (метод IScheduler.CreateJob )
Создать задачу (метод ISchedulerJob.CreateTask )
Добавить задачу в задание (метод ISchedulerJob.AddTask )
Отправить задание на выполнение (метод ISchedulerJob.SubmitJob )
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Hpc.Scheduler;
using Microsoft.Hpc.Scheduler.Properties;
using System.Threading;
namespace JobSubV2
{
class Program
{
private static ManualResetEvent jobFinishEvt = new ManualResetEvent(false);
static void Main(string[] args)
{
Scheduler scheduler = new Scheduler();
scheduler.Connect("localhost");
ISchedulerJob job = scheduler.CreateJob();
job.MinimumNumberOfNodes = 1;
job.MaximumNumberOfNodes = 1;
ISchedulerTask task = job.CreateTask();
task.CommandLine = "ComputeTask.exe";
task.WorkDirectory = @"\\filer\appData";
job.AddTask(task);
job.OnJobState += new EventHandler<JobStateEventArg>(job_OnJobState);
scheduler.SubmitJob(job, null, null);
jobFinishEvt.WaitOne();
}
static void job_OnJobState(object sender, JobStateEventArg e)
{
Console.WriteLine("Job <{0}> has changed from state <{1}> to <{2}>",
e.JobId,e.PreviousState.ToString(),
e.NewState.ToString());
if (e.NewState.Equals(JobState.Finished))
{
Console.WriteLine("Job <{0}> has finished", e.JobId);
jobFinishEvt.Set();
}
}
}
}
HPC Basic Profile
Одно из наиболее интересных нововведений HPC 2008 по сравнению с Compute Cluster Server 2003 состоит в добавлении к интерфейсам взаимодействия веб-сервиса, известного как High Performance Computing Basic Profile (HPCBP). Спецификация HPCBP была разработана Open Grid Forum ([[2.2]) и является открытой. Реализация HPCBP в HPC 2008 дает возможность использовать возможности кластеров под управлением Windows High Performance Server 2008 из операционных систем и языков программирования, не поддерживаемых группой HPC в Microsoft: например, Java и Python. HPCBP устанавливается вместе с HPC 2008, но по умолчанию не запускается. Для запуска HPCBP требуется запустить сервис HPC Basic Profile Web Service на головном узле и провести настройки в соответствии с поставляемой документацией.]
Для доступа к HPCBP из C/C++ программ, работающих под управлением Linux, можно воспользоваться, например, проектом BES++ ([[2.3]), доступном в открытом исходном коде.]
Ниже приведен пример кода на C#, взаимодействующего с HPCBP (пример из [[2.1]):]
public class HPCBPClient
{
static int main(string[] args)
{
if (args.Length != 4) {
Console.WriteLine("HPCBPClient [service URL]
[JSDL job file] [username] [password]");
return 1;
}
string serviceUrl = args[0];
string jsdlFileName = args[1];
string userName = args[2];
string password = args[3];
HPCBPClient hpcbp = new HPCBPClient(serviceUrl, userName, password);
EndpointReferenceType[] eprs = new EndpointReferenceType[1];
eprs[0] = hpcbp.CreateActivity(jsdlFileName);
GetActivityStatusResponseType[] status = null;
do { // Loop polling the service to see if the job is over
Thread.Sleep(5000);
status = hpcbp.GetActivityStatuses(eprs);
} while (status[0].ActivityStatus.state == ActivityStateEnumeration.Pending
|| status[0].ActivityStatus.state == ActivityStateEnumeration.Running);
return 0;
}
}
Введение
Во всю историю вычислительной техники не было момента, чтобы уровня развития вычислительной техники было достаточно для решения всех стоящих перед человечеством задач. Постоянно ставятся новые, все более сложные задачи, требующие все более мощных вычислительных ресурсов для своего решения. И современные технологии создания вычислительной техники подошли к рубежу, когда дальнейшее наращивание скорости работы индивидуальных устройств становится практически невозможным. В связи с этим развитие вычислительной техники пошло по экстенсивному пути, основанному на дублировании вычислительных устройств, которые в параллели могут работать над общей задачей. Вместе с этим родилось параллельное программирование, призванное дать возможность эффективно использовать параллельные архитектуры. И сегодня разработчики программных систем используют параллелизм на всех уровнях, начиная от нескольких конвейеров суперскалярных процессоров, и заканчивая параллельно работающими вычислительными узлами в GRID.
Отдельный класс параллельных архитектур представляют кластерные системы. Кластер - это совокупность вычислительных узлов, объединенных сетью. Параллельное приложение для кластерной системы представляет собой несколько процессов, которые общаются друг с другом по сети. Таким образом, если пользователь сумеет эффективно распределить свою задачу между несколькими процессорами на узлах кластера, то он может получить выигрыш в скорости работы, пропорциональный числу процессоров.
Как правило, кластерные системы крайне интенсивно используются для проведения вычислений. Предприятия и организации чаще всего приобретают кластеры для решения потока задач. И зачастую потребности желающих воспользоваться вычислительными ресурсами превосходят доступный объем ресурсов, поэтому к кластерам можно наблюдать очереди. Ситуация очень похожа на ту, что существовала с мэйнфреймами на заре компьютерной эпохи. В то время для эффективного управления потоками задач создавались так называемые системы пакетной обработки. Пользователи помещали свои задачи в очередь этих систем, а за результатом приходили через нескольких часов, а иногда и дней.
Примерно то же самое происходит сейчас на кластерах, поэтому правильное распределение нагрузки по вычислительным узлам кластера имеет очень большое значение. Этот вопрос приобретает еще большую важность в случае, если кластер имеет неоднородную структуру: различается мощность центральных процессоров, объем оперативной памяти, скорость участков локальной сети. Если не учитывать особенности аппаратуры, то можно наблюдать, как параллельное приложение простаивает, дожидаясь процесса, который был распределен на самый медленный вычислительный узел.
Помимо эффективного планирования запуска задач на кластере, необходимо также автоматизировать процессы приема пользовательских задач, постановки их в очередь, запуска и сбора результатов. Важно обеспечить безопасность использования кластера, его отказоустойчивость, сделав при этом работу с кластером максимально простой, избавляя пользователей от лишних технических подробностей. Все эти факторы приводят к необходимости создания специализированных систем управления кластерами, основная цель которых - предоставить удобные средства эффективного использования кластера.
История появления Microsoft High Performance Computing Server 2008
Долгое время среди операционных систем для кластеров лидировали UNIX-подобные системы. Прежде всего, это объясняется тем, что кластеры функционировали в основном в исследовательских организациях, большинство из которых по историческим причинам ориентированы на использование UNIX. Еще одним сдерживающим фактором распространения Windows на кластерах было отсутствие хорошей системы управления. Впоследствии, однако, многие системы управления были перенесены с UNIX на Windows (Condor, PBS, Platform LSF), но при этом остались трудны в эксплуатации для рядового пользователя Windows.
Отсутствие надежной и удобной системы управления причиняло многочисленные неудобства пользователям Windows-кластеров. В настоящее время многие организации для ведения своего бизнеса приобретают огромные парки вычислительных машин, и довольно часто выбор операционной системы решается в пользу Windows из соображений простоты и удобства использования. Если этой же организации необходимо было проводить массовые параллельные вычисления, то еще совсем недавно у нее практически не оставалось иного выбора, как приобретать Linux-кластер, поскольку стабильного и эффективного решения для Windows не существовало. Отсюда возникали различные сложности, связанные с интеграцией Linux-кластера в Windows-окружение, разработкой программного обеспечения под Linux и так далее. Фактически информационная инфраструктура организаций разделялась на Windows и Linux составляющие, поэтому много усилий уходило на то, чтобы организовать взаимодействие между ними.
9 июня 2006 года Microsoft объявила о выходе собственной системы управления Microsoft Compute Cluster Server 2003 (CCS). Система получила хорошую оценку и была признана очень удобной для небольших и средних Windows-кластеров. Крупные поставщики аппаратного обеспечения, такие как Hewlett Packard и IBM, практически сразу после появления CCS стали предлагать на ее основе интегрированные решения для HPC.
Появление CCS позволило снять целый ряд проблем. Существенно упростились процедуры разворачивания вычислительного кластера, его настройки и включения в информационную инфраструктуру организаций. Что особенно важно, вместе с CCS поставляется набор утилит для разработки параллельных приложений (реализация стандарта MPI2). Разработчики получили возможность разрабатывать и отлаживать параллельные программы в интегрированной среде Microsoft Visual Studio, а затем отправлять свои задания на кластер через дружественный графический интерфейс. Тем самым Microsoft обеспечил максимально простой переход разработчиков от последовательного программирования к параллельному, что раньше требовало приобретения массы дополнительных знаний, в том числе и об устройстве операционной системы Linux. Администратор Windows, даже без опыта в параллельных вычислениях, в состоянии развернуть CCS-кластер буквально за пару часов. Кластеры же на основе Linux при настройке обычно требуют значительных усилий и существенных знаний операци
онной системы Linux.
В сентябре 2008 года вышел Microsoft High Performance Computing Server (HPC Server 2008 или HPC 2008) - новая версия системы управления кластером от Microsoft. HPC 2008 является логическим продолжением и наследует все лучшие черты CCS: простоту в использовании, развертывании и администрировании. При этом в HPC 2008 реализовано множество новых возможностей, которые могут существенно повысить отдачу от использования вычислительных ресурсов. Среди новых реализованных возможностей можно отметить следующее:
Более эффективное распределение задач по узлам кластера:Возможность планирования на различных уровнях вычислительных ресурсов: ядра, сокеты, узлы,
Новые политики планирования: подбор наилучших ресурсов, соответствующих запросу задания (resource matchmaking), приоритетное прерывание обслуживания (preemption), адаптивное выделение ресурсов (adoptive allocation),
Поддержка стандарта HPC Basic Profile, разработанного Open Grid Forum, что дает возможность отправлять задания на кластер под управлением HPC 2008 из операционных систем и языков программирования, не поддерживаемых Microsoft,
Удобные инструменты администрирования систем:Возможность создания групп из вычислительных узлов для автоматизации развертывания и выполнения обновлений и шаблонов задач для более удобного разграничения прав пользователей по запуску различных типов задач,
Возможность использования нескольких головных узлов для повышения надежности системы,
Упрощение развертывания больших кластеров за счет использования Windows Deployment Services,
Новая, более удобная консоль администрирования, богатые возможности мониторинга вычислительных улов.
Оптимизация интерфейса передачи сообщений (MPI):Возможность использовать NetworkDirect, сетевого интерфейса, позволяющего существенно повысить производительность MPI приложений,
Оптимизация MPI операций, работающих через общую память,
Встроенные возможности профилирования,
Улучшенная поддержка высокопроизводительных систем хранения данных.
Microsoft High Performance Computing Server 2008 тесно интегрируется с другими новейшими продуктами и технологиями Microsoft, такими как Microsoft Office SharePoint Server 2007, Windows Workflow Foundation и др., позволяет использовать информацию из Active Directory, что дает возможность встроить высокопроизводительный кластер в имеющуюся Windows - инфраструктуру без привлечения дополнительных специалистов и/или крупных расходов на переобучение сотрудников.
Системные требования
В качестве вычислительных узлов кластера могут быть использованы x64 процессоры семейства Intel Pentium или Xeon c технологией EM64T, 64 битные процессоры семейства AMD Opteron, AMD Phenom, AMD Athlon и совместимые. Минимальный размер оперативной памяти - 512 Мб, минимальный размер свободного дискового пространства - 50 Гб.
На вычислительных узлах кластера должна быть установлена операционная система Microsoft Windows Server 2008 x64 (Standard или Enterprise).
Архитектура системы
Компоненты системы
На рис.2.1 условно представлена архитектура вычислительного кластера, функционирующего под управлением HPC 2008:
(рис 2.1) Архитектура кластераВычислительные узлы (compute nodes) . Узлы, на которых происходит непосредственный запуск счетных заданий. На вычислительных узлах устанавливается Microsoft MPI и другие сервисы HPC Server 2008 управления вычислениям,
Головной узел (head node). Выделенный узел, управляющий вычислениями на кластере. Головной узел принимает задания от пользователя, поддерживает очередь заданий, планирует запуски, собирает статистику выполнения и осуществляет другие служебные операции. Головной узел так же может совмещать роль вычислительного узла.
Дадим определение важнейшим понятиям, используемым в HPC 2008:
Задание (job) - запрос на выделение вычислительного ресурса кластера для выполнения задач. Каждое задание может содержать одну или несколько задач,
Задача (task) - команда или программа (в том числе, параллельная), которая должна быть выполнена на кластере. Задача не может существовать вне некоторого задания, при этом задание может содержать как несколько задач, так и одну,
Планировщик заданий (job scheduler) - сервис, отвечающий за поддержание очереди заданий, выделение системных ресурсов, постанову задач на выполнение, отслеживание состояния запущенных задач,
Узел (node) - вычислительный компьютер, включенный в кластер под управлением HPC 2008,
Сокет (socket) - один из, возможно, нескольких вычислительных устройств (процессоров) узла. Даже в том случае, если процессор содержит несколько ядер под количеством сокетов будет пониматься количество устройств физически вставленных в материнскую плату (например, на компьютере с 2 процессорами Intel Xeon по 2 ядра в каждом 2 сокета),
Ядро (core) - минимальный счетный элемент вычислительного узла. Количество ядер, доступное на вычислительном узле HPC 2008, совпадает с количеством виртуальных процессоров, отображаемых в программе Task Manager на узле,
Очередь (queue) - список заданий, отправленных планировщику для выполнения на кластере. Порядок выполнения заданий определяется принятой на кластере политикой планирования,
Список задач (task list) - эквивалент очереди заданий для задач каждого конкретного задания.
Microsoft MPI
Message Passing Interface (MPI, интерфейс передачи сообщений) - открытый стандарт, описывающий интерфейс обмена сообщениями между процессами параллельной программы. MPI объединяет узлы кластера вместе, предоставляя программисту функции, существенно упрощающие сложности, возникающие при программировании обмена данными между сотнями или тысячами узлов. В настоящее время MPI является наиболее часто используемым интерфейсом передачи сообщений на кластерных системах. Наиболее популярной реализации стандарта MPI является MPICH2, созданной в Argonne National Laboratory - организации, разработавшей и сам стандарт MPI.
MS MPI - реализация стандарта MPI (версии 2) от Microsoft. MS MPI основан на MPICH2 и продолжает разрабатываться так, чтобы остаться максимально совместимым с MPICH2. MS MPI включает всю функциональность, описанную в стандарте, за исключением динамического создания процессов.
При работе с HPC 2008 у пользователей остается возможность использовать реализации MPI сторонних компаний (например, MPICH2), но в этом случае часть функций HPC 2008 будет недоступна. Так, корректное освобождение всех ресурсов задания при его принудительной остановке гарантируется только при использовании MS MPI. Кроме того, использование MPI сторонних производителей, возможно, повлечет за собой необходимость ручного выполнения дополнительных административных операций.
Сетевые топологии
HPC 2008 может работать с различными сетевыми интерфейсами, среди которых наиболее популярные кластерные интерфейсы: Gigabit Ethernet, 10 Gigabit Ethernet, Infiniband и Myrinet. Для достижения наибольшей производительности рекомендуется использовать сетевое оборудование тех производителей, которые предоставляют NetworkDirect интерфейс, позволяющий максимально использовать сетевые ресурсы и при этом не загружать центральный процессор вспомогательной работой. Выигрыш от NetworkDirect интерфейса достигается за счет использования более короткой цепочки до сетевого оборудования, без промежуточного копирования пересылаемых данных, возникающего при использовании стандартного механизма сокетов.
Использование нескольких сетевых интерфейсов одновременно может повысить производительность системы за счет разделения служебного трафика и MPI трафика. HPC 2008 поддерживает 5 вариантов сетевых топологий (см. рис. 2.2 ).
(рис 2.2) Окно выбора сетевой топологии кластера под управлением HPC 2008Правильный выбор топологии позволяет оптимизировать работу Ваших MPI-программ и системы в целом. При описании топологий используются следующие понятия:
Открытая сеть ( Public network ) - корпоративная сеть организации, соединенная с головным и (возможно) вычислительными узлами кластера. Через открытую сеть пользователи подключаются к головному узлу для управления выполнением их заданий. MPI-трафик будет направлен через открытую сеть только в том случае, если нет закрытой или MPI - сети,
Закрытая сеть ( Private network ) - выделенная сеть, предназначенная для коммуникации между узлами вычислительного кластера. Эта сеть (если она есть) будет использована для административного трафика (удаленный рабочий стол, установка вычислительных узлов с использованием RIS и пр.). Кроме того, через закрытую сеть будет направлен MPI - трафик в том случае, если нет специальной MPI - сети,
MPI-сеть ( MPI network ) - выделенная сеть (предположительно, наиболее быстрая из 3 перечисленных), через которую идет трафик MPI - программ. В случае, если Ваша программа не использует MPI - библиотеки для передачи сообщений по сети, то MPI - сеть не будет использоваться.
Ниже приведено описание сетевых топологий, используемых в HPC 2008:
Безопасность
Кластера обычно используются несколькими десятками или даже сотнями пользователей одновременно. При этом пользователи могут не иметь глубоких знаний в системном программировании и администрировании кластеров. Поэтому вопрос безопасности при использовании кластеров является очень важным. Пользователь кластера не должен иметь возможность нарушить правила использования вычислительного ресурса, нарушить ход выполнения задач других пользователей, посмотреть чужие результаты работы или изменить настройки системы. HPC Server 2008 использует Active Directory для выполнения всех пользовательских задач и команд администратора в контексте и именно с теми правами, которые имеет запускающий пользователь. Все права закодированы и хранятся вместе с заданием до окончания его выполнения. Административный трафик HPC 2008 пересылается с использованием закодированных каналов, что предотвращает несанкционированный перехват трафика и выполнение административных команд пользователями
, не имеющими соответствующих прав. Механизмы безопасности, реализованные в MS MPI, не являются частью стандарта MPI, поэтому при использовании сторонних реализаций MPI информационная безопасность кластера может оказаться под угрозой.
Развертывание и диагностика
HPC 2008 упрощает развертывание больших кластеров за счет использования Windows Deployment Services. Установка кластера из нескольких тысяч узлов займет не больше часа! Установка состоит из 3 основных шагов: установка головного узла, установка вычислительных узлов, диагностика и устранение неполадок. Рассмотрим эти шаги по порядку.
Установка головного узла
На головной узел кластера необходимо предварительно установить операционную систему Microsoft Windows Server 2008 x64. Установка операционной системы осуществляется обычным образом и не требует пояснений сверх тех, которые приведены в руководстве к операционной системе. Следующий шаг - установка High Performance Computing Server 2008 Pack. Установка осуществляется с помощью стандартного инсталлятора (программа setup.exe). Инсталлятор может быть использован для инсталляции как головного, так и вычислительного узлов. В процессе инсталляции нужно выбрать тип устанавливаемого узла ("Create a new HPC cluster by creating a head node" в случае головного узла, см. рис. 2.3.). Третья опция на рис. 2.3 ("Install only the client utilities") предназначена для установки приложений доступа к кластеру с рабочих станций (см. схему на рис. 2.1).
(рис 2.3) Окно выбора типа устанавливаемого узлаДля работы сервисов HPC 2008 требуется некоторое программное обеспечение, которое не входит в стандартный комплект операционной системы. При необходимости что-то установить инсталлятор сам выведет необходимый список и запустит соответствующие инсталляторы (см. рис. 2.4)
(рис 2.4) Окно установки дополнительного программного обеспеченияПосле окончания установки головного узла появится окошко "To do list", которое содержит список действий, которые необходимо выполнить для окончания настройки кластера (см. ):
Configure your network - выбор сетевой топологии кластера. Администратору необходимо выбрать одну из пяти поддерживаемых сетевых топологий и указать, какой сетевой адаптер соответствует сетям административного, MPI трафика и открытой сети,
Provide installation credentials - выбор пользователя, под которым будет осуществляться добавление к кластеру новых узлов и запуск диагностических тестов. Пользователь должен иметь права записи в Active Directory,
Configure the naming of new nodes - выбор шаблона имени узлов кластера. Опция позволяет задать правила формирования имен добавляемых вычислительных узлов,
Create a node template - создание шаблона вычислительных узлов. Опция позволяет настроить автоматическую установку всего необходимого ПО на вычислительные узлы. Более подробное описание приведено в пункте "Установка вычислительных узлов".
(рис 2.5) Окно "to do list"
Установка вычислительных узлов
Установку вычислительных узлов можно проводить способом, аналогичным описанному для головного узла: сначала установка операционной системы, потом установка HPC Server 2008 Pack. В процессе установки пака нужно выбрать пункт "Joint an existing HPC cluster by creating a new compute node" (см. рис. 2.3) после чего указать имя головного узла, к которому будет добавлен устанавливаемый вычислительный узел. Такой способ установки подходит для небольших кластеров. В случае нескольких сотен узлов выполнение ручного запуска инсталляторов на каждом узле заняло бы слишком много времени. Для быстрой установки вычислительных узлов больших кластеров в HPC 2008 предусмотрена возможность заливки на вычислительные узлы операционной системы и всего необходимого программного обеспечения в автоматическом режиме. Сервисы Windows Deployment, установленные на головном узле, автоматически обнаружат вычислительные узлы и вып
олнят все необходимые шаги установки самостоятельно. Для этого необходимо предварительно создать шаблон вычислительных узлов с опцией "With operating system" (см. рис. 2.6) и указать образ операционной системы (см. рис. 2.7).
(рис 2.6) Окно выбора типа шаблона узла
(рис 2.7) Выбор образа операционной системы, устанавливаемой на вычислительные узлыШаблон узла позволяет так же выполнить автоматическую установку необходимых библиотек и программ. Для этого в шаблон необходимо добавить соответствующие задачи копирования на узел инсталляторов, библиотек, а также команду запуска их установки. Шаблоны узлов доступны в программе HPC Cluster Manager, на вкладке Configuration, пункт Node Templates (см. рис. 2.8).
(рис 2.8) Редактор параметров шаблона узлаПосле создания шаблонов необходимо просто включить вычислительные узлы. Если на узлах активирована среда PXE, то новые узлы появятся в списке All Nodes вкладки Node management программы HPC Cluster Manager в состоянии "Unknown". Узлам необходимо присвоить шаблон (команда "Assign Node Template"), после чего начнется установка (статус вычислительных узлов сменится на "Provisioning"). По окончании установки узлы будут добавлены в кластер.
Диагностика вычислительного кластера
Инструменты диагностики кластера позволяют упростить следующие административные задачи:
Проверка работоспособности кластера после развертывания или изменения конфигурации,
Установка причин ошибок в работе кластера,
Оценка производительность и предотвращение возможного падения производительности с течением времени.
HPC 2008 содержит 16 встроенных диагностических тестов:
Тесты готовности кластера к работе: проверка работы планировщика, проверка доступности всех узлов и запущенных на узлах сервисов, тест сетевых интерфейсов, проверка работы SOA компонент,
Сравнение конфигураций вычислительных узлов: построение отчетов, позволяющих проанализировать отличия в установленных приложениях, настройках сети, установленных обновлениях и сервисах на вычислительных узлах,
Производительность: тесты латентности и скорости сетевых интерфейсов.
Встроенные тесты позволяют выводить результаты своей работы в виде HTML страниц или таблиц Excel.
Работа с заданиями
Как уже упоминалось выше, в HPC 2008 разделяют 2 отдельных понятия: задание (job) и задача (task). Под заданием понимается запрос на выделение вычислительных ресурсов, тогда как задача - это команда или программа, которая должна быть выполнена на кластере. Задание может содержать как одну, так и несколько задач. Ресурсы, выделенные заданию, остаются закрепленными за этим заданием до того момента, когда закончит выполнение последняя задача, входящая в задание.
Задачи могут быть последовательными или параллельными. Для запуска параллельных заданий, осуществляющих обмен сообщениями с использованием интерфейса MPI, необходимо использовать команду mpiexec. Информация о параметрах команды mpiexec и примеры использования можно найти в лабораторной работе " Microsoft High Performance Computing Server 2008".
Для облегчения серийных запусков задач и указания последовательности выполнения в HPC 2008 выделяют два особых вида заданий:
(рис 2.9) Параметрическое множество задач
(рис 2.10) Поток задач
HPC 2008 предоставляет пользователю возможность выбрать, какой интерфейс использовать для запуска программ: графический, командный или интерфейс приложений. Каждый интерфейс имеет свои преимущества: графический интерфейс наиболее прост в использовании, командный интерфейс позволяет опытным пользователям автоматизировать запуск задач с использованием скриптов, прикладной интерфейс предоставляет неограниченные возможности интеграции с собственным программным обеспечением. Далее дается обзор каждого из интерфейсов. Более подробная информация по графическому и командному интерфейсам может быть получена в лабораторной работе.
Шаблоны заданий
Перед тем, как пользователи смогут запускать задания в Microsoft HPC 2008, администратор кластера должен задать правила, определяющие кто, на каких узлах и какие задания может запускать. Правила задаются с помощью, так называемых, шаблонов заданий ( job templates ). Изменить их может только администратор кластера.
Шаблон заданий позволяет задать следующие параметры (см. рис. 2.11):Minimum Cores/ Maximum Cores - минимальное и максимальное число ядер, которые может выбрать пользователь для своих заданий,
Minimum Nodes/ Maximum Nodes - минимальное и максимальное число узлов, которые может выбрать пользователь для своих заданий,
Minimum Sockets/ Maximum Sockets - минимальное и максимальное число сокетов, которые может выбрать пользователь для своих заданий,
Requested Resources - тип ресурсов, доступный для выбора (ядро, сокет, узел),
Exclusive - опция определяет, может ли пользователь выбирать, будет ли его задача эксклюзивно использовать ресурсы (эксклюзивность означает невозможность запуска других задач на вычислительных ресурсах одновременно с первой задачей). Опция позволяет администратору также задать значение параметра по умолчанию,
Run Until Cancelled - возможность задания параметра " Run Until Cancelled " позволяет пользователю запускать задания, которые не будут сняты до истечения заданного временного ресурса или принудительного снятия пользователем или администратором. Это позволяет сохранить закрепление вычислительных ресурсов за пользователем для последующего запуска новых задач по результатам выполнения предыдущих,
Priority - опция определяет список допустимых приоритетов заданий,
Auto Calculate Min/ Auto Calculate Max - задание опции " Auto Calculate " позволяет планировщику самостоятельно определять соответственно минимальные и максимальные требования задания к ресурсам на основании требований входящих в задание задач. С помощью шаблонов заданий администратор может запретить пользователям самостоятельно выбирать эту опцию,
FailOnTaskFailure - опция определяет, должна ли система управления завершить выполнение задания, если выполнение входящей в него задачи завершилось с ошибкой,
Preemptable - настройка " preemptable " позволяет системе управления прерывать выполнение низкоприоритетных задач при появлении более приоритетных.
(рис 2.11) Окно редактирования шаблона заданий
Графический интерфейс
Графический интерфейс управления заданиями представлен в HPC 2008 утилитой HPC Job Manager (см. рис. 2.12). Утилита выводит список заданий на кластере с указанием их текущего состояния, пользователя, осуществившего запуск, приоритета и другой информации. При выборе задания в нижнем списке отображаются задачи, из которых состоит выделенное задание. Предусмотрена возможность фильтрации заданий по различным параметрам.
(рис 2.12) Окно управления очередью заданийЗапуск нового задание осуществляется командой Action->Job Submission->New Job. Остановка и изменение параметров заданий и задач осуществляется соответствующими командами контекстного меню.
Командный интерфейс
HPC 2008 предоставляет командный интерфейс для управления заданиями и вычислительными узлами. Эти команды позволяют пользователям создавать, отправлять и контролировать задания, а администраторам - управлять самим кластером. Также командный интерфейс может быть использован для написания сценариев, так, например, администраторы могут автоматизировать некоторые операции по работе с очередью заданий или с вычислительными узлами.
Собственно сам интерфейс состоит из пяти ключевых команд: job, task, cluscfg, clusrun и node. Эти команды, вызываемые с различными аргументами, дают доступ практически ко всей функциональности планировщика заданий. Для удобства пользователей вся необходимая им функциональность доступна через команды job и task. Фактически эти две команды полностью покрывают всю функциональность графического менеджера заданий.
Сочетание, например, следующих трех команд: job new, job add, job submit и job view, с соответствующими аргументами, позволяет создать новое задание, поставить его в очередь, подтвердить необходимость запуска, а затем узнать его состояние. Для быстрого запуска задания можно воспользоваться, например, следующей строкой:
job submit /numpcores:4 /stdin:infile /stdout:outfile mpiexec myapp.exe
В результате на кластере будет запущено параллельное приложение myapp из 4 процессов, которое в качестве стандартного потока ввода использует файл c именем infile, а в качестве стандартного потока вывода - outfile.
Командный интерфейс достаточно хорошо документирован и достаточно прост в освоении. Кроме того, Microsoft предлагает широкий выбор уже готовых сценариев для работы с HPC 2008, которые будут полезны каждому администратору.
PowerShell
PowerShell - скриптовый язык, разработанный Microsoft для ускорения и автоматизации задач, выполняемых системным администратором.
PowerShell работает с объектами Microsoft .NET, что позволяет использовать всю мощь.NET, сохраняя простоту интерактивной оболочки. Пользователи HPC 2008 имеют возможность управлять системой с помощью PowerShell, что предоставляет существенно большие возможности, чем те, что дает обычная командная строка.
Проиллюстрируем мощь и простоту PowerShell на коротком примере (пример из [[2.1]).
В следующем скрипте администратор собирает все узлы имеющие, как минимум, 8 процессоров, в группу "FastNodes". После этого он тестирует группу, запуская на ней задание "TestJob":]
Get-HpcNode | where {$_.NumProcessors -gt 8} | Add-HpcGroup "FastNodes"
New-HpcJob -Name "TestJob" -NodeGroup "FastNodes" | Submit-HpcJob
Интерфейс приложений
HPC 2008 предоставляет возможность управлять кластером через .NET интерфейсы, реализованные в библиотеках Microsoft.Hpc.Scheduler.dll, Microsoft.Hpc.Scheduler.Properties.dll и Microsoft.Hpc.Scheduler.Session.dll.
В качестве примера (пример из [[2.1]) использования интерфейса приложений рассмотрим добавление задания в очередь.
Для этого необходимо выполнить следующие действия:]
Соединиться с кластером (метод IScheduler.Connect )
Создание задание (метод IScheduler.CreateJob )
Создать задачу (метод ISchedulerJob.CreateTask )
Добавить задачу в задание (метод ISchedulerJob.AddTask )
Отправить задание на выполнение (метод ISchedulerJob.SubmitJob )
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Hpc.Scheduler;
using Microsoft.Hpc.Scheduler.Properties;
using System.Threading;
namespace JobSubV2
{
class Program
{
private static ManualResetEvent jobFinishEvt = new ManualResetEvent(false);
static void Main(string[] args)
{
Scheduler scheduler = new Scheduler();
scheduler.Connect("localhost");
ISchedulerJob job = scheduler.CreateJob();
job.MinimumNumberOfNodes = 1;
job.MaximumNumberOfNodes = 1;
ISchedulerTask task = job.CreateTask();
task.CommandLine = "ComputeTask.exe";
task.WorkDirectory = @"\\filer\appData";
job.AddTask(task);
job.OnJobState += new EventHandler<JobStateEventArg>(job_OnJobState);
scheduler.SubmitJob(job, null, null);
jobFinishEvt.WaitOne();
}
static void job_OnJobState(object sender, JobStateEventArg e)
{
Console.WriteLine("Job <{0}> has changed from state <{1}> to <{2}>",
e.JobId,e.PreviousState.ToString(),
e.NewState.ToString());
if (e.NewState.Equals(JobState.Finished))
{
Console.WriteLine("Job <{0}> has finished", e.JobId);
jobFinishEvt.Set();
}
}
}
}
HPC Basic Profile
Одно из наиболее интересных нововведений HPC 2008 по сравнению с Compute Cluster Server 2003 состоит в добавлении к интерфейсам взаимодействия веб-сервиса, известного как High Performance Computing Basic Profile (HPCBP). Спецификация HPCBP была разработана Open Grid Forum ([[2.2]) и является открытой. Реализация HPCBP в HPC 2008 дает возможность использовать возможности кластеров под управлением Windows High Performance Server 2008 из операционных систем и языков программирования, не поддерживаемых группой HPC в Microsoft: например, Java и Python. HPCBP устанавливается вместе с HPC 2008, но по умолчанию не запускается. Для запуска HPCBP требуется запустить сервис HPC Basic Profile Web Service на головном узле и провести настройки в соответствии с поставляемой документацией.]
Для доступа к HPCBP из C/C++ программ, работающих под управлением Linux, можно воспользоваться, например, проектом BES++ ([[2.3]), доступном в открытом исходном коде.]
Ниже приведен пример кода на C#, взаимодействующего с HPCBP (пример из [[2.1]):]
public class HPCBPClient
{
static int main(string[] args)
{
if (args.Length != 4) {
Console.WriteLine("HPCBPClient [service URL]
[JSDL job file] [username] [password]");
return 1;
}
string serviceUrl = args[0];
string jsdlFileName = args[1];
string userName = args[2];
string password = args[3];
HPCBPClient hpcbp = new HPCBPClient(serviceUrl, userName, password);
EndpointReferenceType[] eprs = new EndpointReferenceType[1];
eprs[0] = hpcbp.CreateActivity(jsdlFileName);
GetActivityStatusResponseType[] status = null;
do { // Loop polling the service to see if the job is over
Thread.Sleep(5000);
status = hpcbp.GetActivityStatuses(eprs);
} while (status[0].ActivityStatus.state == ActivityStateEnumeration.Pending
|| status[0].ActivityStatus.state == ActivityStateEnumeration.Running);
return 0;
}
}