2009-09-25

Seti@Home

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

Наверняка все уже слышали о распределённых вычислениях. Для тех, кто не в курсе, совсем вкратце: большую задачу можно разбить на много мелких и раскидать их по разным компьютерам в Сети. Получается гигантский (ну или не очень) кластер, который может делать что-то полезное. Ну, или не делать.
Одним из проектов университета Беркли является поиск вероятных внеземных сигналов. Для этого нужно проанализировать гигантские объёмы данных, что не под силу даже современным супермейнфреймам. Тут в игру вступает сообщество - отдав немножко вычислительных ресурсов компьютера (главным образом во время простоя) можно конкретно помочь такой благородной цели. Вообще, кроме поиска внеземного разума, проектов, использующих cloud computing вагон и тележка, и каждый может найти то, во что ему интересно внести свою лепту.

Для большинства из этих проектов используется программная платформа Boinc, которая от версии к версии всё больше обрастает разным полезным функционалом. По аналогии с распараллеливанием на разные компьютеры, при наличии нескольких ядер/процессоров поступившую задачу можно разделить на разные потоки. Одним из наиболее инновационных решений для расчётов является технология от Nvidia под названием CUDA. Если быть кратким, то она позволяет использовать вычислительные мощности процессоров видеокарты в пользовательских приложениях, а не только при использовании DirectX/OpenGL API.
Процессоры видеокарт довольно "узкоспециализированы" - они заточены под выполнение лишь некоторых математических преобразований, используемых для 3D-рендера. Однако многие эти же преобразования используются в упомянутых научных вычислениях, что может дать значительный прирост в скорости обсчёта и обработки данных. Эти же алгоритмы могут быть использованы, кстати, для сжатия видео тем же h264-кодеком - и этот подход предоставляет впечатляющие результаты. По сравнению даже с топовыми процессорами средняя видеокарта при полном использовании её процессоров даёт прирост вплоть до 10-20 раз! Это достигается не только "заточенностью" шейдеров видеокарты, но и большим её количеством - в моей далеко не самой новой Geforce 9600GT таких процессоров 64, причём каждый из них - многопоточный, и может брать на себя до 512 потоков. Таким образом, использование CUDA для многих сложных математических расчётов имеет более чем очевидную причину.

Ну, теперь от теории перейдём к сухой практике. Я запускал boinc-client на Ubuntu 9.04 x86-64, и хоть и дистрибутив и является самым популярным, "с полпинка" это дело не завелось.
Итак, первое, что нужно установить - это последние бета-драйвера от nvidia (на момент написания - 190.32). Подключение соответствующего репозитория описано в предыдущей записи этого блога, единственное, что хочу подчеркнуть - ставить нужно именно 190-ю версию драйвера, а не стабильную 185-ю.
После установки драйверов мы имеем поддержку CUDA (а также бонусом vdpau). Следущее, что нужно поставить отсюда - CUDA Toolkit и (опционально, но я рекомендую) CUDA SDK. Установка очевидна, так что вдаваться в подробности не буду. Жаль, конечно, что всё это инсталлируется из .sh-файлов, а не идеологически верных .deb-пакетов - надеюсь, скоро этот досадный недочёт исправят, и появится как минимум launchpad-репозиторий с соотв. содержанием.
После установки нужно "дообъяснять" системе, что CUDA есть и функционально - для этого в PATH нужно добавить путь к исполняемым файлам "куды" (по-дефолту /usr/local/cuda/bin), и дописать к LD_LIBRARY_PATH директорию с соответствующими библиотеками (/usr/local/cuda/lib или lib64). Проще всего создать новый .conf-файл в /etc/ld.so.conf.d/. Будьте внимательны, если у вас 64-разрядная система, прописывать нужно именно путь к lib64-директории!
После этого можно установить SDK (от пользователя) и попробовать скомпилировать тамошние примеры - есть интересные штуки, наглядно показывающие преимущества шейдеров над ЦП, ну и заодно можно проверить работоспособность самой технологии.

Итак, если всё вышеперечисленное заработало, можно "завершать операцию". Установка непосредственно boinc предельно проста - разве что я ставил его не из основного репозитория убунты, а из getdeb-а - там он самый свежий и точно "умеет" Cuda, если версия младше, кажется, 6.3, то уже ничего не получится. Ставить нужно только пакеты boinc и boinc-client, ну и boinc-seti-app-seti, если хотите присоединиться именно к поиску иноплане-тян. Для удобства настройки и использования также рекомендую пакет boinc-manager - он позволит управляться с демоном из гуя.

Несмотря на заявленную поддержку, сразу ничего не заработало, как водится - в логах упрямо пишется, что CUDA not found.
Первое, что нужно сделать - навести симлинк на /usr/local/cuda/lib/libcudart.so в /var/lib/boinc-client/ или, если не помогло, в /usr/lib/boinc-client/. Ну, не забывайте про особенности 64-битных систем - в их случае симлинк наводится на либу из соответствующей директории.
Из-за того, что демон boinc-а запускается под своим, отдельным юзером, возникает довольно неочевидная проблема - пользователь этот не имеет прямого доступа к видеокарточке. Исправить это можно, добавив его в группу video (usermod -a -G video boinc).

Собственно, после этого всё внезапно должно заработать - об этом довольно очевидно сообщат надписи в логе boinc вида "CUDA devices found" и "Coprocessor: GeForce 9600 GT (1)".

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

Если заметите какие-то неточности в описании, или возникнут сложности - пишите, попробуем разобраться вместе.

10 комментария(ев):

najar комментирует...

а результаты эти ученые с Беркли публикуют? Что там они вычисляют непонятно...

Ravil комментирует...

@najar да, где-то выкладывают, я раньше находил, когда ещё на старом полусервере считал всю эту хренотень.

dsent комментирует...

http://xkcd.com/638/

Valdos the Fat Troll комментирует...

интересная штука)

как сжирает интернет? раздаче торрентов не мешает?

Ravil комментирует...

@dsent да ладно, вдруг на что-то наткнёмся. Законы физики ж не только в Солнечной системе действуют... К тому ж там ещё полно других проектов.

@valdos инет почти не ест, в основном просто пилит-считает. Пока есть активность других процессов - не вылезает, начинает работать только если комп не используется...

XeHK комментирует...

А есть уверенность, что боинк считает именно видеокартой после этих манипуляций? Ну там температура видюхи резко возрастает или в боинк-менеджере это должно быть видно, когда он выводит немного несоответствующее время обработки пакета процессором? Потому как официальной считалки seti@home с поддержкой CUDA, под линукс нет. Насколько я знаю есть альфа-версия неофициальной CUDA-считалки и ее надо искать на форуме http://lunatics.kwsn.net и отдельно с ней шаманить, на свой страх и риск. А CUDA devices found боинк мне пишет и на 180х драйверах, только применительно к S@H нужна считалка, поддерживающая это самое CUDA. Так что извините, но, похоже вы неправы.

Ravil комментирует...

@XeHK ну, я так понял, что основной показатель - не просто надпись "CUDA device found", а запись в логе о работающем сопроцессоре.

XeHK комментирует...

Эта запись из найденного девайса и следует. Только лог этот выдает боинк, но он сам не считает пакеты, а считает их seti@home-приложение, скачиваемое боинком или подсунутое ему вручную. По ссылке http://setiathome.berkeley.edu/apps.php можно увидеть список официальных приложений seti@home для разных платформ, и CUDA из них поддерживает, к сожалению пока только виндовый вариант версии 6.08. Однако если вас интересует высокопроизводительный обсчет пакетов, то настоятельно советую зайти на сайт "лунатиков" и попробовать там оптимизированные считалки для CPU. Они есть на любой вкус, для разных систем и процессоров. Их как раз и можно подсунуть боинку вручную, главное четко следовать инструкции. А видеокарту пока можно озадачить только в виндах или каким-нибудь другим проектом.

Doctor_ORZ комментирует...

Люди, а подскажите, как стартовать в убунту клиента не как программу, а как сервис? В винде - там по умолчанию такой режим работы. А тут как быть?

Sasha комментирует...

В Ubuntu boinc изначально ставится как демон (сервис).

Отправить комментарий