РАСПРЕДЕЛЁННЫЕ ВЫЧИСЛЕНИЯ ПОД LINUX

РАСПРЕДЕЛЁННЫЕ ВЫЧИСЛЕНИЯ ПОД LINUX

ЧТО ТАКОЕ РАСПРЕДЕЛЁННЫЕ ВЫЧИСЛЕНИЯ?


Большую часть времени своего нахождения во включенном состоянии, среднестатический современный компьютер занимается тем, что простаивает, ожидая ввода данных от пользователя. Для многогигагерцовых процессоров, время между нажатиями клавиш при печати, время пока пользователь читает с экрана какой-нибудь текст, или ненадолго отошёл от компьютера — целая вечность.


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

В этой статье речь пойдёт о проектах РВ работающих через Интернет, и задействующих компьютеры обычных его пользователей (с их ведома, разумеется) для выполнения разного рода сложных научных расчётов. Участвуя в подобных проектах можно помочь исследовать строение белков и генетических структур, найти лекарство от рака и СПИДа, или даже обнаружить сигналы от внеземных цивилизаций. Обычной работе (или игре) на компьютере это абсолютно не мешает — используются только моменты бездействия.

И, конечно же, говорить мы будем только о тех проектах, участие в которых доступно для пользователей Linux.


С ЧЕГО ВСЁ НАЧАЛОСЬ

Можно сказать, что история массовых распределённых вычислений через Интернет началась с проекта distributed.net. Самый популярный из его подпроектов, RC5, занимается взломом зашифрованных одноимённым криптоалгоритмом сообщений. Этот подпроект обязан своим существованием компании RSA Data Security, которая время от времени, с целью продемонстрировать надёжность разрабатываемых ею алгоритмов шифрования, устраивает публичные конкурсы по взлому зашифрованных ими сообщений, с призами в несколько тысяч долларов каждый. Участники проекта distributed.net уже выиграли несколько таких конкурсов, успешно подобрав ключ к зашифрованным алгоритмами RC5-56 и RC5-64 сообщениям. В данное время идёт соревнование по взлому RC5-72, однако по некоторым оценкам, из-за возросшей по сравнению с прежними проектами длины ключа, получения результата, даже с учётом постоянного роста доступных проекту вычислительных мощностей, придётся ждать несколько тысяч лет.

Хотя distributed.net существует очень давно, пределом его мечтаний до сих пор является внимание энтузиастов либо распределённых вычислений как таковых, либо интересующихся криптографией и математикой. А первым проектом, получившим по-настоящему широкую известность и популярность среди "обычных" пользователей, стал, несомненно, SETI@home. Руководители этого проекта предложили всем желающим принять участие в поиске сигналов от внеземной цивилизации. Принцип работы проекта прост: радиотелескоп обсерватории в Аресибо постоянно записывает космический шум, ленты с ним пересылаются в "штаб-квартиру" SETI@home в Беркли, там специальные серверы ("сплиттеры") нарезают данные на мелкие кусочки и рассылают компьютерам участников для обработки.

В поисках подобных аномалий на графике, фанаты проекта просиживали за мониторами долгие часы. В данном случае, тревога оказалась ложной — мы засекли всего лишь понижение чувствительности приёмника на опорной частоте в 1420 мгц. А здесь — интерференцию с наземными источниками, или спутниками. Хотя, кто знает...

Однако, высокая популярность – в проекте зарегистрировано более 4 миллионов участников – обернулась для SETI@home и головной болью. Дело в том, что рост доступных проекту вычислительных мощностей шёл гораздо быстрее, чем рост количества поступающих с телескопа данных для анализа и способностей "сплиттеров" по их переработке. Поэтому, чтобы не отказывать в регистрации или блоках данных новым участникам, проекту пришлось начать рассылать одни и те же, уже обработанные данные по многу раз. По данным независимого сайта статистики, избыточность "классической" версии SETI@home достигала фантастических величин в 50-100 крат.

Помимо рассылки одних и тех же данных, для борьбы с «избытком» вычислительной мощности существует и другой способ. Руководители проекта SETI@home внесли в третью версию клиентского ПО новые, гораздо более тщательные и медленные алгоритмы анализа блоков данных. Но, по мнению некоторых, с точки зрения возможности ими что-то обнаружить, эти алгоритмы являлись довольно-таки бесполезными. При этом рост вычислительной мощности продолжался, и вскоре проект достиг показателей избыточности, немногим уступающих тем, что были до выхода "замедленной" версии.


КУДА ИДЁМ?

Способ использования "лишних" вычислительных мощностей, заключающийся в повторном обсчёте уже обсчитанного, либо в искусственном и не приносящем особой пользы усложнении обработки одних и тех же данных, не понравился никому, включая самих авторов SETI@home. Гораздо логичнее было бы, если бы проект, у которого на момент обращения компьютера участника за новой порцией данных обсчитывать было бы особо нечего, смог, вместо повторной отправки "старой", уже обработанной порции, честно заявить – "работы сейчас нет, зайдите позже". А клиентская программа участника смогла бы этот ответ понять, и переключиться на помощь какому-нибудь другому проекту – тому, которому дополнительные ресурсы в этот конкретный момент времени действительно нужны и полезны. Данный подход и был реализован авторами SETI@home в их новой платформе для распределённых вычислений, получившей название "BOINC".


BOINC

Berkeley Open Infrastructure for Internet Computing (BOINC) – это весьма успешная, и уже очень популярная как среди авторов, так и среди участников проектов РВ вычислительная платформа, задача которой – унификация общих по функциональности модулей клиентского и серверного ПО различных проектов. Разработчикам распределённых научных проектов, учёным – специалистам в области биологии, медицины, криптографии и прочих наук – она пришлась по вкусу благодаря тому, что при её использовании им больше не нужно разбираться с такими скучными, и бесконечно далёкими от области их исследований вещами как организация системы регистрации пользователей, разработка системы статистики, отладка взаимодействия клиентского и серверного ПО, и т.д. Всё уже готово – придумано, написано и отлажено авторами BOINC. Остаётся брать и пользоваться. "Брать" предлагается любое ПО BOINC – от клиентского модуля до серверных PHP-скриптов – в исходниках, под лицензией GNU GPL, а "пользоваться" всем этим помогает доступная на сайте BOINC подробнейшая, GNU FDL-лицензированная, документация по созданию на основе этой платформы собственного проекта РВ с нуля.


ROSETTA@HOME

Итак, пора перейти от теории к практике. Рассмотрим процесс присоединения к работающему на платформе BOINC проекту, на примере запущенного недавно Rosetta@home.

Rosetta@home – это научный проект, проводимый одной из лабораторий университета г. Вашингтона, результатами которого должны стать новые методы (алгоритмы), с помощью которых можно будет с высокой точностью заниматься моделированием, предсказанием и дизайном белков. Наличие проверенных алгоритмов моделирования поможет исследователям разрабатывать лекарства для различных вызываемых нарушениями их структуры болезней. Своим названием проект обязан лежащему в основе его клиентского ПО модулю Rosetta, который был изначально создан для предсказания трёхмерной структуры белка из его аминокислотной последовательности. Со временем, в Rosetta появились функции дизайна и предсказания белковых комплексов. Авторы проекта надеются продолжить постепенно улучшать используемые в Rosetta физическую модель и алгоритмы поиска. А помочь им в этом должны результаты проекта Rosetta@home.

Ядро Rosetta – это физическая модель макромолекулярных взаимодействий и алгоритмов поиска структуры с наименьшей энергией для заданной аминокислотной последовательности (при предсказании структуры белка), комлекса белок-белок (при расчёте стыковки белков), а также поиска аминокислотной последовательности с наименьшей энергией для заданной белковой структуры или комлекса белок-белок (при дизайне белков).


Для участия в проекте, нам прежде всего понадобится базовый клиент BOINC. Скачиваем с сайта boinc . berkeley . ed / файл с самой свежей версией — на момент написания статьи это "boinc_5.2.7_i686-pc-linux-gnu" размером 3.4 МБ, и запускаем. Дистрибутив создаёт в текущем каталоге подкаталог BOINC, куда и распаковывает всё своё содержимое, после чего сообщает, что для запуска консольной версии BOINC следует использовать скрипт run_client, а для запуска версии с графическим интерфейсом – run_manager. Кроме того, он прописывает в этих скриптах полный путь к созданному подкаталогу, так что при необходимости куда-либо его его переместить, необходимо это учесть, и соответствующим образом их подправить.

Запускаем графическую версию BOINC. Поскольку этот запуск – первый, нам будет предложено указать адрес главной страницы проекта, к которому мы желаем присоединиться.

Для подключения к проекту, прежде всего нужно указать URL его главной страницы Зарегистрировать новый эккаунт теперь можно и из самого клиента - ранее, для этого приходилось идти на сайт Всё готово!

На следующем экране мастера нужно либо указать E-Mail и пароль к уже созданному в проекте эккаунту, либо зарегистрировать новый (в этом случае пароль попросят ввести дважды).

Стоит отметить, что такая схема авторизации – по E-Mail и паролю – для BOINC относительно нова. Ранее, в основанных на нём проектах использовалась авторизация по секретному Account Key, выступавшему одновременно в роли и уникального идентификатора, и пароля на изменение информации. Кое-где такая схема используется и по сей день (в этом случае клиент BOINC корректно её обнаруживает, и вместо поля с вводом пароля появляется поле для Account Key); существенным её недостатком является отсутствие возможности зарегистрировать новый эккаунт прямо из клиента: необходимо идти на сайт проекта, регистрироваться там, ждать на почту заветный Account Key, и только после этого "подключаться" к проекту в клиенте BOINC.

После создания нового эккаунта, BOINC предложит настроить его параметры, открыв в браузере раздел настроек на сайте проекта. Впрочем, сделать это можно и позже, просто зайдя на сайте проекта в раздел Your Account и указав выбранные при регистрации адрес почты и пароль. Там настраивается выделяемое под проекты BOINC место на диске, можно установить режим работы клиента (допустим, можно сделать, чтобы он работал только в определённые часы), настроить отображаемую им графику (если она есть), и т.д. Во всех проектах BOINC есть не только личный "зачёт", в котором участники выстраиваются в порядке количества набранных ими за обработку блоков данных очков, но и командный, где соревнуются образованные ими команды. Поэтому там же, в разделе настроек эккаунта, есть возможность либо присоединиться к одной из команд (например, к "Russia", объединяющей российских участников проекта), либо создать свою.

Вернёмся к "подключаемому" нами проекту. Сразу после присоединения можно открыть закладку Transfers, и увидеть, что BOINC уже вовсю занялся закачкой модулей, необходимых для участия в Rosetta@home. На сегодняшний момент – это около 17-ти мегабайт. Важно отметить, что подобный объём трафика довольно-таки нетипичен для проектов РВ. Обычно, совокупный объём всех скачиваемых даже во время первоначального присоединения к какому-либо проекту файлов в разы меньше этого значения, а для проектов, занимающихся криптографией или математикой — и вовсё, практически равен нулю.

Самым большим среди россыпи закачиваемых проектом Rosetta@home файлов является собственно расчётный модуль Rosetta – около 7 мегабайт. Очевидно, что загрузка этого модуля потребуется лишь при первоначальном подключении к проекту, ну и при выходе его более новых версий. Вторым по размеру является 6-мегабайтный файл с загадочным названием bbdep02.May.sortlib.gz не обновлялся аж с мая месяца (возможно даже 2002-го года), и не собирается, будем надеяться, слишком часто обновляться и в дальнейшем. Такое поведение довольно часто встречается среди распределённых проектов: скачанные при первоначальном подключении файлы в дальшейшем подвергаются повторному использованию настолько, насколько это является возможным.

На закладке Work уже отображается прогресс обработки текущего блока данных (пока нулевой, состояние – Downloading), затраченное на его обработку время, и так называемый дедлайн – т.е. финальная дата, до которой нужно обязательно посчитать этот блок и вернуть результат, иначе его отправят на обработку кому-нибудь другому.

К сожалению, каких-либо возможностей визуально оценить процесс моделирования (например, своими глазами увидеть создаваемую модель белка) Rosetta@home в данное время не предоставляет. Относится это не только к данному проекту, но и к большинству других, имеющих версии под Linux. Среди опробованных мною BOINC-проектов, графику под Linux на текущий момент показывает только Einstein@home. Однако, в скором времени наверняка можно ожидать изменения ситуации: последняя новость на сайте Rosetta@home сообщает о начавшемся тестировании новой версии скринсейвера (т.е. версии расчётного модуля с полноценной графической частью, наверняка и под Linux тоже). От других проектов тоже, логично ожидать выпуска в скором будущем Linux-версий с поддержкой визуализации расчётов, ведь в большинстве из них она написана под OpenGL, который портируется между платформами довольно просто.

Но, что-то мы отвлеклись. Возвращаемся к клиенту BOINC и видим, что закачка расчётных модулей Rosett'ы уже завершилась, и проект начал расчёты. Теперь можно свернуть окно BOINC Manager'а и заняться своими делами. Rosetta, равно как и любой другой современный проект распределённых вычислений, другим запущенным на компьютере программам никогда не помешает. Чтобы удостовериться, можно открыть top, и увидеть, что процесс rosetta_4.79 хотя и занимает 98% CPU, он при этом имеет самый низкий из возможных приоритет, а значит, как только CPU становится нужен любой другой программе, Rosetta тут же в нужном объёме его освобождает.


Окно BOINC Manager'а с информацией о назначенных компьютеру заданиях

Чтобы воспользоваться основным преимуществом BOINC — динамическим переключением между проектами, нужно присоединиться ещё хотя бы к одному проекту, а лучше — к нескольким. Не знаю кому как, но, по-моему, участвовать одновременно в нескольких проектах гораздо интереснее, чем в каком-то одном. Тем более, что ничего сложного в этом нет: процесс подключения у всех BOINC-проектов идентичен с описанным на примере Rosetta@home.


CLIMATE PREDICTION

Проект Climate Prediction, как следует из его названия, занимается моделированием и предсказанием климата на земле. Упрощённо, можно сказать, что результатом работы проекта должен стать "прогноз погоды" на 50 лет вперёд. Его руководители хотят определить, насколько точны существующие методы долговременного предсказания погоды, и насколько сильно на их точность влияют погрешности в исходных данных.

"Мы хотим исследовать небольшие изменения в общей модели, " — говорит координатор проекта, доктор Дэйв Фрэйм из Оксфордского университета. — "Единственный способ сделать это – провести очень много экспериментов, проверить все возможные варианты. То есть сделать то, что заняло бы у суперкомпьютера несколько тысяч лет. Но, решая это как распределенную задачу, мы можем сделать это гораздо быстрее".

Работающий на платформе BOINC вычислительный модуль проекта занимается моделированием долгосрочных изменений климата Земли. Каждый участвующий компьютер получает немного разные входные данные, поэтому результат работы каждого из них будет уникальным. Руководители проекта выберут среди полученных результатов наиболее точно отражающие происходившее до 2000 года, и сделают вывод о наиболее вероятных изменениях, ожидающих нас в будущем.

Этот проект является, несомненно, рекордсменом по количеству скачиваемых при подключении данных. Сразу после присоединения, BOINC-закладка Transfers проинформировала меня о том, что проект climateprediction.net заказал получение файлов на общую "сумму" аж в 44 мегабайта! Поэтому если вам трафик дорог как память, возможно стоит от участия в этом проекте отказаться. Справедливости ради стоит сказать, что единожды закачанный блок данных ClimatePrediction будет считаться очень долго – как минимум месяц, и это на довольно быстром компьютере, причём работающем в круглосуточном режиме. А при расчёте последующих блоков, скачивать большую часть уже полученных данных повторно не потребуется.

Linux-версии многих расчётных модулей основанных на BOINC проектов не предоставляют, пока, никакой возможности визуально оценить процесс расчёта (покрутить модель молекулы, узнать погоду на виртуальном глобусе Земли, полюбоваться на пики графика с космическим шумом). В общем случае, Windows-версия проекта имеет красивую визуализацию, а в Linux кнопка BOINC-менеджера "Show graphics" отключена. Это относится к LHC@home, Climate Prediction и SETI@home. Это связано не только, и, наверное, даже не столько с пониженным вниманием к Linux-версиям со стороны авторов, сколько с совсем недавним переходом BOINC со старой, четвёртой, на новую – пятую версию платформы. По сообщениям участников, на четвёртой версии BOINC графику умело показывать гораздо большее число проектов, а в пятой – кое где её нет даже под Windows.

Скриншоты приводятся из Windows-версии клиента, Linux-графика, когда она появится (по слухам, для некоторых типов расчётных блоков она уже доступна), вряд ли будет сильно отличаться.


EINSTEIN@HOME

Проект Einstein@home занимается составлением для всего неба атласа излучаемых звёздами-пульсарами гравитационных полей. Такой атлас должен помочь в проверке гипотезы Эйнштейна, предсказывающей теоретическую возможность существования гравитационных волн, возникающих при столкновениях чёрных дыр и взрывах звёзд. Пока, никому из учёных обнаружить эти волны не удалось.

Данные для анализа будут поступать с Лазерно-интерферометрной Обсерватории Гравитационных Полей (LIGO). Рабочая часть задействованной в проекте обсерватории LIGO состоит из двух точнейшим образом установленных зеркал, и путешествующего между ними луча лазера. При наличии волн в гравитационном поле, путь лазера чуть-чуть отклоняется, что позволяет учёным замечать и измерять эти волны. Большее расстояние между зеркалами означает большую чувствительность интерферометра, поэтому зеркала LIGO установлены в четырёх километрах друг от друга. Это позволяет замечать изменения в положении луча лазера вплоть до одной стомиллионной диаметра атома водорода.

Точки - это звёзды, а полоса поперёк сферы — млечный путь. Видны два из трёх маркеров, символизирующих позиции зенитов для собирающих информацию приборов.

Этот проект, как упоминалось выше, на сегодняшний момент является единственным, имеющим полноценное отображение визуализации расчётов как под Windows, так и под Linux. Русский перевод описания того, что означают различные элементы этой визуализации можно найти по адресу http://distributed.ru/?einstein_starsphere=.

FOLDING@HOME

Можно сколько угодно говорить о текущем глобальном переходе на BOINC, однако того факта, что существуют как участники, так и разработчики РВ, которым BOINC по разным причинам либо не нравится, либо просто не приносит, по их мнению, никакой пользы по сравнению с "традиционной" архитектурой проекта. Особенно, если последняя уже давно запущена и успешно функционирует.

Среди таких проектов наиболее примечателен Folding@home. Его разработчики сразу же после появления BOINC заявили, что никаких преимуществ от перехода на BOINC они не видят, а когда увидят, тогда просто создадут дополнительную BOINC-версию своего клиента, оставив, наравне с ней, и "классическую". Кстати, на данный момент BOINC-версия клиента этого проекта всё-таки уже существует, и проходит бета-тестирование.

Цель Folding@home — получение более точного представления о болезнях, вызываемых дефектными белками. Изучаются белки, имеющие отношение к болезни Альцгеймера, Паркинсона, диабету типа II, коровьему бешенству и рассеянному склерозу. Поняв, почему возникают дефекты в белках одного типа, ученые смогут выяснить, почему это происходит и с другими белками. Все желающие имеют свободный доступ к результатам. На сайте выкладываются все публикации, ролики смоделированных процессов, и т.п.

Клиент состоит из двух частей: оболочки, и расчётного ядра. Некоторые из расчётных ядер оптимизированы под расширенные наборы инструкций — SSE и 3DNow!, либо SSE2. Но руководители проекта на этом останавливаться не собираются. Исследуется возможность создания версии клиента, использующей для расчётов графический процессор видеокарты, и даже разрабатывается версия, за действующая специальную PCI'ную плату-ускоритель.

На сайте http://folding.stanford.edu/ под Linux предлагается только консольная, без всякой графики, версия клиента. Однако, для Folding@home существует несколько очень красивых сторонних программ для визуализации расчётов (работающих, в том числе, и под Linux), например, fpd.


ДРУГИЕ ПРОЕКТЫ

К сожалению, в рамках статьи невозможно описать и половины всех работающих на BOINC проектов, не говоря уж о гораздо более многочисленных, имеющих "традиционную" архитектуру.

Если тема распределённых вычислений вас заинтересовала, но описанного здесь показалось недостаточно, советую посетить официальный сайт BOINC, на котором перечислены все проекты, использующие в работе эту платформу; сайт http://distributed.ru/, где можно найти русскоязычные описания наиболее популярных проектов, новости о них, и довольно активный форум; и, конечно же, монструозный ресурс http://distributedcomputing.info/, где есть краткие описания, наверное, ВСЕХ проектов — существующих сейчас, когда-либо существовавших, а также ещё только планируемых к запуску.

В общем, выбирайте себе проект по вкусу, и присоединяйтесь!