внимание! эта страничка - зеркало официального сайта TSC! Russia
РАСПРЕДЕЛЕННЫЕ ВЫЧИСЛЕНИЯ - TSC! Russia

Присоединяйтесь к команде распределенных вычислений TSC! Russia!


о команде | новости | ссылки | файлы | форум команды
наши герои | наши даты | наши достижения

Проект Folding@Home | Другие проекты

Работа с клиентом Find-a-Drug и распределенные вычисления

Структура клиента Find-a-Drug

Управление клиентом через иконку в трее

Управление очередью заданий

Работа с "одноранговыми" нодами

Организация ферм Find-a-Drug и работа с ними

Организация работы через импорт/экспорт

На этой страничке даны инструкции по управлению клиентом Find-a-Drug, по использованию специальных способов работы с ним.

В данный момент страничка находится в разработке, впоследствии планируется разбить её на две. - Hil


1. Структура клиента Find-a-Drug

Клиент Find-a-Drug с точки зрения пользователя состоит из трёх основных модулей:

а) THINK.exe - это собственно вычислительный модуль, отвечающий также за вывод графического изображения просчитываемых в данный момент молекул;

б) SERVER.exe - так называемый "сервер", обеспечивающий всю работу с очередью заданий для счёта, а именно: закачку свежих заданий с сервера проекта, отправку готовых заданий на сервер, очистку очереди от уже устаревших (сосчитанных другими и полученных сервером) заданий, выделение заданий под каждый задействованный в вычислениях процессор (реальный или виртуальный, локальный или сетевой). Строго говоря, выделение производится не под физический процессор, а под запущенный процесс THINK.exe, далее именуемый также "нода", что не совсем одно и то же. Также данный модуль является средством управления очередью заданий для пользователя, о чём будет подробнее рассказано ниже;

в) FADSETUP.exe - модуль двойного назначения (в прошлых версиях клиента вместо него было два модуля, что идеологически было логичнее, но практически не имело большого смысла). Запущенный без ключей или вызванный через пункт меню Setup иконки клиента в трее, он обеспечивает задание сохраняемых настроек клиента (подробно см. страничку установки клиента). В обычной работе он запускается модулем loader.exe с ключом -tray, что приводит к созданию иконки в трее (через которую осуществляется наиболее удобный доступ к модулям и настройкам клиента), если только её отображение не запрещено в настройках клиента. Независимо от отображения иконки, при запуске этого модуля с данным ключом он остаётся в памяти, обеспечивая перезапуск процесса THINK.exe в случае его сбоя или временной приостановки.

Есть и четвёртый (вспомогательный) модуль - loader.exe, который сам не грузится в память, а только запускает нужное сочетание вышеназванных трёх модулей, в зависимости от настроек клиента. Всякий раз, когда вы сохраняете настройки, нажимая Save (Register) в FADSETUP.exe, в папку "Автозагрузка" вашего компьютера помещается файл think.lgo (в том случае, если его там ещё не имеется), который (при правильной установке клиента) есть не что иное, как своего рода "ярлык" для запуска loader.exe. Такая схема надёжно обеспечивает автозагрузку клиента в нужной конфигурации, но одновременно создаёт небольшие трудности для тех, кто не хотел бы использовать именно такой способ запуска клиента.

Какие существуют альтернативы этому способу запуска? Можно запускать вместо loader.exe собственно упомянутые выше модули клиента. Итак, если мы хотим полностью заменить запуск loader.exe, то надо запускать:

а) THINK.exe без ключей, нужное количество раз по числу процессоров в системе (включая виртуальные HT-процессоры);

б) SERVER.exe без ключей, если клиент установлен локально на данной машине (исключения будут рассмотрены ниже). А вот по сети его, как правило, запускать не надо. Обратите внимание, что он может быть запущен только на одной машине "фермы";

в) FADSETUP.exe с ключом -tray. Без этого вы не увидите иконки клиента в трее, что затрудняет управление клиентом, а также не будет автоматического перезапуска процесса THINK.exe в случае временного прекращения счёта ("Snooze") или сбоя, приведшего к его завершению.

Зачем это может быть нужно? Есть несколько применений. Во-первых, чтобы с помощью сторонних программ обеспечить счёт ДО логона и БЕЗ логона, сделав THINK.exe "псевдосервисом" Windows 2000/XP/2003. Конечно, вы можете использовать автологон, но далеко не всегда это поощряется политикой вашей компании или устраивает вас с точки зрения безопасности. Для этих целей обычно используют или nnCron (бесплатный для жителей бывшего СССР), или FireDaemon.

Во-вторых, можно не запускать часть модулей. Например, FADSETUP.exe, если ни иконка в трее, ни перезапуск клиента вам совершенно не нужны (не бывает ни сбоев, ни намеренного завершения процесса THINK.exe). С сервером очереди заданий сложнее, его можно не запускать, но тогда придётся периодически запускать его вручную, и не только для связи с сервером проекта, а и для выделения нодам заданий для счёта. Пока SERVER.exe не пометил (Allocate) задание для конкретной ноды (обычно ноде присваивается сетевое имя компьютера, если же на одном компьютере запускается несколько процессов THINK.exe одновременно - намеренно или случайно, то создаются ещё дополнительные имена типа "сетевое имя - 1", "сетевое имя - 2"), то считать это задание THINK.exe НЕ БУДЕТ.

Allocate делается SERVER.exe автоматически незадолго до предполагаемого завершения данной нодой предыдущего задания или же сразу после закачки новых заданий, если нода ожидает работы. К слову, при каких-то обстоятельствах (пока не уточнено), если задания закончились, а выход в Интернет недоступен, SERVER.exe из уже сосчитанных заданий генерирует новые, несколько отличающиеся - это менее полезно, чем считать совершенно новые задания, но позволяет получить хотя бы некоторую пользу во время вынужденного простоя. Если же вы хотите не запускать SERVER.exe как можно дольше (хотя я вам это всё-таки не советую), то после закачки новой партии заданий можно сделать Allocate вручную для каждого закачанного задания, выделив каждой ноде желаемое (лучше пропорционально её расчётной мощи * типичное процессорное время) количество заданий.

2. Управление клиентом через иконку в трее

Как управлять клиентом? Начнём с описания возможностей tray-меню. Щёлкнув правой кнопкой на значок Find-a-Drug в трее, вы можете увидеть (в версии 1.25g, локально) следующее меню:

Graphics
Queue
Job Info
Setup
Snooze
Sleep
Exit
Close menu

Около первых четырёх строчек могут стоять галочки, означающие, что соответствующее окно (приложение) в данный момент открыто и видимо. Если какая-либо из первых трёх строчек выделена серым и не может быть нажата, это значит, что THINK.exe или SERVER.exe в данный момент не запущены или выгружены.

Нажатие на первую строчку меню приведёт к открытию окна THINK graphics, то есть графическому отображению той молекулы, над которой, собственно, трудится ваш клиент в данный момент, пытаясь определить её потенциал как лекарства.

Вторая строчка соответствует серверу очереди (queue) заданий.

Третья открывает текстовое окно (окна, по числу процессов think.exe, запущенных на данном компьютере), в котором отображаются наиболее важные данные по работе, выполняемой модулями think.exe: название задания, проект, для которого идёт счёт (рак, ВИЧ и т. д.), имя файла, содержащего "пакет" молекул, конкретная просчитываемая молекула,  количество хитов (потенциально пригодных молекул) в данном задании, прогресс расчёта задания в процентах, затраченное на данное задание процессорное время, усреднённый за всё время счёта данного задания процессорный рейтинг. По расположенным в окне кнопкам можно закрыть само окно, открыть в браузере по умолчанию файл, в который клиент записывает краткие архивные сведения по всем просчитанным в данной инсталляции клиента заданиям (хранится в файле history.htm, который лежит в папке клиента. Более полные, но неудобные для просмотра данные хранятся в файле server.dat, который трогать вам ни в коем случае не советую, тем более, что структура этого файла намеренно не документирована!), и, наконец, перейти на веб-сайт проекта - в данной версии клиента это http://www.find-a-drug.org, откуда, впрочем, вас немедленно переадресуют на http://www.find-a-drug.org.uk.

Нажатие на 4-ю строчку - "Setup" - открывает окно настройки клиента, аналогично простому запуску fadsetup.exe без ключей.

Строчки "Snooze" и "Sleep" используются для временной ("Snooze") или бессрочной ("Sleep") приостановки счёта. Останавливается (выгружается из памяти) при этом только THINK.exe. Продолжительность временной приостановки можно настроить через Setup (по умолчанию 15 минут).

"Exit" немедленно выгружает все модули клиента, включая "иконку" в трее.

И наконец, "Close menu" закрывает данное меню, если вы случайно зашли в него и оно не хочет закрываться само.

3. Управление очередью заданий

С помощью графического интерфейса модуля SERVER.exe можно управлять очередью заданий, за исключением установления периодичности соединения с сервером, которая определяется через настройку клиента.

Продолжение следует - Hil.

4. Работа с "одноранговыми" нодами

Базовый способ организации расчётов в проекте Find-a-Drug на нескольких машинах одновременно - установка отдельной ноды с самостоятельным доступом в Интернет на каждом из компьютеров. При относительно небольшом числе нод этот способ довольно эффективен, но при значительном их количестве его трудоёмкость растёт пропорционально количеству. В результате это приводит к необходимости организовать работу "фермой" или воспользоваться последними разработками участника нашей команды blackbird по автоматизации импорта/экспорта.

Необходимо отметить необходимость отдельной установки каждой ноды - просто копировать их нельзя! Одинаковые задания, посчитанные более одного раза на нодах с одинаковым идентификационным номером (независимо от того, установлена ли такая нода на разных компьютерах, или нет), будут засчитаны только один раз. А ведь закачать одинаковые задания совершенно несложно, и в конце просчёта каждой цели одно и то же задание может быть роздано сотням нод...

Главная проблема с этим способом работы - необходимость доступа каждого компьютера в Интернет непосредственно или через прокси-сервер, причём последний вариант достаточно проблемен в реализации. Настройки прокси-сервера клиент берёт из настроек Internet Explorer, но если прокси требует авторизации, то без ухищрений не обойтись - штатный механизм авторизации работает только в клиенте под Linux, да и то через пень-колоду.

5. Организация ферм Find-a-Drug и работа с ними

"Ферма" Find-a-Drug - это способ организации расчётов, при котором нормальная установка клиента производится на один компьютер, желательно имеющий выход в Интернет (хотя это не обязательно), а к нему по локальной сети подключаются для расчёта заданий другие компьютеры. Папка установленного клиента при этом должна быть открыта для полного доступа (и на чтение, и на запись).

Компьютер, на котором установлен клиент и хранится очередь заданий для счёта, будет "сервером" фермы. Остальные компьютеры будут "клиентами" фермы. Следует сразу отметить, что эта возможность не есть нечто нештатное: клиент рассчитан на такую работу, специально приспособлен для неё.

Как всё это работает? Помимо локального запуска модуля think.exe (то есть, собственно модуля расчётов), возможен его одновременный запуск по сети с любого количества машин (лишь бы Windows позволяла одновременный доступ более 10 клиентов к папке ;). При этом каждая машина создаёт в папке файл <сетевое имя машины>.tlg (для многопроцессорных машин и машин с HyperThreading помимо этого файла создаётся соответствующее количество файлов с постфиксами -1, -2 и так далее на каждый процессор сверх первого), а сервер очереди заданий (server.exe) следит за тем, чтобы под это имя всегда имелось выделенное задание для расчётов. 

Задания считываются из локального кэша заданий сервера фермы. Результаты расчётов, в том числе промежуточные, хранятся там же. В версии 1.23 и ранее на клиентах фермы в принципе никакой информации не хранится. В версии 1.24 появилась возможность запускать клиента из локальной копии во временной папке, что, с одной стороны, удобно (без этого главной проблемой была попытка запустить клиента в момент, когда сервер недоступен, например, после полной перезагрузки всех систем или просто сервер грузится позже клиента), с другой стороны, в некоторых случаях демаскирует работу клиента.

"Штатно" клиенты фермы должны запускаться через файл loader.exe (он сам не висит в памяти, а лишь загружает в память клиента два других модуля: think.exe и fadsetup.exe), однако как вариант возможен запуск только think.exe. При этом затрудняется перезапуск клиента в случае сбоя сети или сервера фермы (он организуется через fadsetup.exe), однако это простой путь для организации полностью невидимой работы.

Другой вариант - отключить через Setup (меню иконки в трее или просто запустить fadsetup.exe без ключей) опцию "Show system tray icon" (показывать иконку клиента в системном трее). Тогда при штатном запуске loader.exe на клиентах фермы, с одной стороны, перезагрузка сервера или временный сбой сети не приведут к остановке расчётов, с другой стороны, иконка не будет висеть в трее каждого компьютера-клиента. Если только она там Вам не нужна, конечно. У меня на всех клиентах висит и никому не мешает.

Теперь поговорим о том, как обеспечить безопасность работы фермы. Не во всех случаях безопасно открыть полный доступ к папке клиента, чтобы его видел каждый, кто просматривает сетевое окружение и заглянул на Ваш компьютер. Для этих целей в Windows имеется способ скрыть папку для просмотра, не изменяя возможностей доступа к ней. Сетевое имя папки должно заканчиваться значком "доллар" - $.

Например, откроем доступ к папке C:\Program Files\Find-a-Drug\ и назовём её FAD$. Можно убедиться, что папка не видна через "Сетевое окружение", но прямой ввод адреса \\сервер_фермы\FAD$\ раскрывает папку клиента как обычно. На клиентах фермы запускаем loader так: \\сервер_фермы\FAD$\loader.exe.

Остаётся обеспечить автозагрузку loader/think по сети, своевременное пополнение кэша заданий для расчёта, и Ваша ферма будет радовать Вас растущим поголовьем пойманных и препарированных жаб. :)

6. Организация работы через импорт/экспорт

И наконец, возможно организовать работу нод, совершенно не имеющих доступа ни к общим серверам, ни непосредственно к Интернету. На такой крайний случай клиент Find-a-Drug поддерживает экспорт и импорт заданий для счёта. Впрочем, эту возможность, конечно же, можно использовать и для нод, имеющих такой доступ.

Обычно на компьютерах, которые не имеют доступа в Интернет, но которые очень хочется присоединить к парку считающих машин, ;) устанавливаются ноды без регистрации (при установке такой ноды после настройки нужных параметров нажимается не кнопка Register, а кнопка Offline). С такой ноды сливать задания не стоит, а не то они просто пропадут, причём уже безвозвратно (в будущих версиях обещают заблокировать слив, но пока эта проблема остаётся актуальной). Зато такую ноду можно свободно копировать на любое количество компьютеров ("клонировать") - в отличие от "одноранговых" нод с независимым сливом в данном случае никаких проблем не будет.

Выше уже говорилось о том, что в нашей команде разрабатывается менеджер для автоматизации процесса экспорта/импорта. Но он пока ещё находится в бета-тестировании (невзирая на положительные отзывы), кроме того, он предназначен для локальных сетей, а в случае, скажем, когда задания для расчёта Вы несёте на диске из дома на работу, где Интернет отсутствует как класс, он Вам не помощник.

Вручную этот процесс можно провести с помощью очереди заданий (server.exe, Queue). Для этого на компьютере, имеющем доступ в Интернет, нужно установить ноду, закачать нужное количество заданий, которые будут предназначены для экспорта (часть заданий можно оставить для локального расчёта; обычно удобно их выделить другой целью). 

Сделав это, нужно выделить в окне очереди некоторое количество закачанных, но ещё не просчитанных заданий (мышью с использованием клавиш Shift или Ctrl), и выбрать в меню File раздел Export. Выделенные задания (не логи, а задания!) экспортируем в файл на сменном носителе (или на жёсткий диск, иное удобное место) и несём их к компьютеру, где их нужно импортировать для расчёта. Ни в коем случае нельзя удалять задания со статусом Exported на том компьютере, где они были закачаны! 

Теперь открываем окно очереди заданий на компьютере, который у Вас будет считать закачанное в другом месте. Выбираем File - Import и находим наш файл с экспортированной группой заданий. Они становятся в очередь данной ноды (очень удобно, если в Вашей возможной локальной сети этот компьютер будет одновременно сервером фермы).

Если в очереди на этом компьютере уже есть рассчитанные ранее импортированные задания, самое время выделить их и экспортировать для импорта на той самой ноде, откуда они "есть, пошли". 

Внимание! Импортировать непросчитанные задания можно на любой компьютер или даже несколько компьютеров (но это ненужно, так как в зачёт потом они пойдут только один раз), а вот импортировать просчитанные задания можно только на ту самую ноду, откуда они были ранее (непросчитанными) экспортированы!

Надеюсь, это поможет Вам в работе.

Данный материал подготовлен Hil.

Высказывать свои предложения и пожелания можно, как обычно, в нашем форуме.

Hosted by uCoz
Hosted by uCoz
Hosted by uCoz