Журнал LinuxFormat - перейти на главную

LXF160:Кластеры Beowulf

Материал из Linuxformat
Версия от 04:41, 30 сентября 2018; Olkol (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск


Су­пер­ком­пь­ю­те­ры. При­сое­ди­няй­тесь к LXF в ми­ро­вом гос­под­стве... или к Folding@home

Соз­да­ем свой су­пер­ком­пь­ю­тер

Мы в LXF лю­бим су­пер­ком­пь­ю­те­ры и све­рты­вание бе­лка, так по­че­му бы не объ­е­ди­нить это вме­сте в су­пер-­ру­ко­вод­ст­ве от Дэ­ви­да Хей­вор­да?

(thumbnail)
Наш эксперт. Дэ­ви­да Хей­вор­да вы­рас­ти­ли тю­ле­ни, при­род­ные вра­ги пин­гви­нов, но это от­нюдь не ме­ша­ло ему лю­бить Linux.

Что та­кое су­пер­ком­пь­ю­тер? Не мо­но­лит­ное ли это чу­до­ви­ще, гу­дя­щее в по­тай­ной сер­вер­ной с кон­ди­ционером? Или, когда вы слы­ши­те это сло­во, на ум при­хо­дят ком­пь­ю­те­ры из «Во­ен­ных игр» или «Су­пер­ме­на 3»? Ныне тер­мин «су­пер­ком­пь­ю­тер» оз­на­ча­ет про­сто груп­пу про­цес­со­ров, па­рал­лель­но ра­бо­таю­щих над вы­полнением лю­бой по­став­лен­ной за­да­чи. Со­вре­мен­ный су­пер­ком­пь­ю­тер – про­сто на­бор оп­ре­де­лен­ным об­ра­зом на­стро­ен­ных ком­пь­ю­те­ров (уз­лов кла­сте­ра), иногда со спе­циа­ли­зи­ро­ван­ной опе­ра­ци­он­ной сис­те­мой или на­бо­ром про­грамм для па­рал­лель­ной об­ра­бот­ки дан­ных.

Кла­сте­ри­за­ция для всех

Конеч­но, на са­мом де­ле все немно­го сложнее, но за­бе­рись мы в деб­ри су­пер­ком­пь­ю­те­ров и кла­сте­ри­за­ции, на рас­сказ ушел бы весь день; по­это­му не бу­дем. Обыч­но мы пред­став­ля­ем се­бе су­пер­ком­пь­ю­те­ры (или кла­сте­ры, как мы бу­дем на­зы­вать их да­лее) как что-то недоступ­ное нам, про­стым смерт­ным, и при­над­ле­жа­щее по­лу­бо­гам IT, чья ра­бо­та – оби­тать в тем­ных угол­ках сер­вер­ных ком­нат, спря­тан­ных глу­бо­ко во внут­рен­но­стях ог­ром­ных кор­по­ра­ций, кор­мить кла­сте­ры и удов­ле­тво­рять их по­треб­но­сти.

На са­мом де­ле все со­всем не так, по крайней ме­ре, в основ­ном, но до са­мых недавних пор кла­сте­ри­за­ция бы­ла недоступ­на обыч­ным лю­дям. С по­яв­лением Linux и бес­плат­ных от­кры­тых опе­ра­ци­он­ных сис­тем ка­ж­дый, у ко­го есть немно­го знаний и по мень­шей ме­ре па­ра ком­пь­ю­те­ров, мо­жет успеш­но соз­дать кла­стер и поль­зо­вать­ся им поч­ти так же, как это де­ла­ют в NASA. Кла­сте­ры мож­но при­ме­нять для ре­шения мно­гих по­все­днев­ных за­дач, сто­ит толь­ко за­хо­теть. В кла­сте­рах вы­со­кой доступ­но­сти HA (High Availability) есть из­бы­точ­ные уз­лы, вво­ди­мые в дей­ст­вие, ес­ли дру­гой узел вы­хо­дит из строя. Они ис­поль­зу­ют­ся в основ­ном для ра­бо­чих це­лей, но вы мо­же­те поль­зо­вать­ся ими и до­ма, на­при­мер, для за­пуска web-хостин­га.

У вас мо­жет быть кла­стер хранения фай­лов, ко­то­рый пре­достав­ля­ет дис­ко­вое про­стран­ст­во для ис­поль­зо­вания несколь­ки­ми ком­пь­ю­те­ра­ми че­рез сеть – до­ма его мож­но ис­поль­зо­вать как сер­вер муль­ти­ме­диа. Эта идея ле­жит в осно­ве мно­гих по­пу­ляр­ных об­лач­ных сер­ви­сов.

У нас мо­жет быть кла­стер об­ра­бот­ки дан­ных, или вы­чис­ли­тель­ный кла­стер. Он ис­поль­зу­ет цик­лы про­стоя про­цес­со­ров на ка­ж­дом уз­ле для вы­полнения вы­чис­лений или мо­де­ли­ро­вания. По­следним мы и зай­мем­ся да­лее, за­пустив его по­верх на­шей локаль­ной се­ти и ис­поль­зуя доступ­ные нам ре­сур­сы. По­доб­ная ар­хи­тек­ту­ра так­же из­вест­на как кла­стер Бе­о­вульф.

Folding@Home

Folding@Home, или FAH, су­ще­ст­ву­ет несколь­ко лет. С по­мо­щью рас­пре­де­лен­ных вы­чис­лений про­ект по­мо­га­ет по­нять, как мо­ле­ку­лы бел­ка свер­ты­ва­ют­ся, ре­на­ту­ри­ру­ют и вы­зы­ва­ют за­бо­ле­вания. Уча­стие в этом про­ек­те по­зво­ля­ет уче­ным про­яснить те­чение син­дро­мов Альц­гей­ме­ра, Хан­тинг­то­на и Пар­кин­со­на и, бу­дем на­де­ять­ся, оп­ре­де­лить ме­ханизм ле­чения. Ес­ли вам ин­те­рес­ны под­роб­но­сти, зай­ди­те на http://folding.stanford.edu/English/HomePage и про­чти­те текст о нау­ке, стоя­щей за этим ПО.

Конеч­но, кро­ме гу­ман­но­го ас­пек­та здесь есть и иг­ро­вой эле­мент. Ко­ман­ды, «свер­нув­шие» наи­боль­шее ко­ли­че­­ст­во бел­ков, по­па­да­ют в чар­ты. Мы с на­шим кла­сте­ром не стре­мим­ся по­пасть на вер­ши­ну чар­тов, мы про­сто хо­тим немно­го по­рез­вить­ся с су­пер­ком­пь­ю­те­ра­ми и по­мочь про­ек­ту FAH. Для это­го мы соз­да­ли Ко­ман­ду свер­ты­вания бел­ков Linux Format (Linux Format Folding Team), или LXFFT, под но­ме­ром 217805, и ею мы восполь­зу­ем­ся на на­шем уро­ке.

Пер­вые ша­ги к успе­ху кла­сте­ра

За­гляните во врез­ку «Что нам на­до»; мы пред­по­ла­га­ем, что у вас уже есть два ком­пь­ю­те­ра и локаль­ная сеть. Без них соз­дание кла­сте­ра мо­жет усложнить­ся. Мы так­же уточнили, что сеть долж­на быть про­вод­ной, так как не уве­ре­ны, что опе­ра­ци­он­ная сис­те­ма BCCD под­дер­жит все функ­ции всех бес­про­вод­ных уст­ройств, ко­то­рые мо­гут у вас ока­зать­ся. Хо­тя боль­шин­ст­во ди­ст­ри­бу­ти­вов Linux хо­ро­шо под­дер­жи­ва­ют бес­про­вод­ные се­ти, луч­ше восполь­зо­вать­ся про­вод­ной, чем остать­ся без кла­сте­ра.

Сле­дую­щий пункт в спи­ске – эк­зем­п­ляр ISO BCCD. BCCD, со­кра­щение от Bootable Cluster CD [За­гру­зоч­ный диск кла­сте­ра]; это об­раз Knoppix Linux, по­став­ляе­мый с го­то­вы­ми сис­те­ма­ми рас­пре­де­лен­ных вы­чис­лений.

Возь­ми­те ISO-об­раз с на­ше­го дис­ка или за­гру­зи­те его с bit.ly/oOtbcO. Мы восполь­зо­ва­лись 32-бит­ным об­ра­зом вер­сии 3.x. За­пи­ши­те об­раз на несколь­ко дис­ков с по­мо­щью сво­ей лю­би­мой про­грам­мы или на несколь­ко USB-брел­ков с по­мо­щью Unetbootin. По­че­му на несколь­ко? Ну, вы ведь хо­ти­те за­пускать это не на од­ном ком­пь­ю­те­ре, прав­да?

По­кон­чив с за­пи­сью (мы восполь­зо­ва­лись брел­ка­ми), вклю­чите свой пер­вый ком­пь­ю­тер, или глав­ный узел, как мы бу­дем его на­зы­вать, от­крой­те ме­ню за­груз­ки ПК, обыч­но кла­ви­шей F12 или по­хо­жей, и вы­бе­ри­те но­си­тель, с ко­то­ро­го нуж­но за­гру­жать­ся. Это Live-об­раз, и он не по­влия­ет на дан­ные, хранимые на же­ст­ком дис­ке – но, как и в боль­шин­ст­ве та­ких слу­ча­ев, луч­ше сде­лать ре­зерв­ную ко­пию.

За­груз­ка глав­но­го уз­ла

Во вре­мя за­груз­ки BCCD за­даст несколь­ко во­про­сов; пер­вым из них бу­дет пред­ло­жение на­жать Enter для за­груз­ки. Ес­ли при по­яв­лении за­став­ки BCCD это­го не про­ис­хо­дит, не вол­нуй­тесь, это за­груз­чик Unetbootin (или что-то по­хо­жее) пе­ре­хва­ты­ва­ет управ­ление. Ес­ли в вер­ху эк­ра­на есть пин­гви­ны и об­раз за­гру­жа­ет­ся, все хо­ро­шо.

За­тем бу­дет за­про­шен па­роль (имя хоста за­пол­ня­ет­ся ав­то­ма­ти­че­­ски). Про­сто на­жи­ма­ем Enter, что­бы оста­вить его пустым (мы сде­ла­ли так на обо­их ком­пь­ю­те­рах); по­следнее, что нам нуж­но – что­бы па­ро­ли не сов­па­ли из-за невер­но на­пе­ча­тан­но­го сло­ва, по­это­му на­жми­те Enter для за­дания пусто­го па­ро­ля и еще раз – для под­твер­ждения (см. рис. 1).

Сеть

Ес­ли сис­те­ма BCCD рас­по­зна­ет се­те­вую кар­ту в ва­шей сис­те­ме, сле­дую­щий во­прос бу­дет про­стым: «Это ваш се­те­вой ад­рес от DHCP (обыч­но, от мар­шру­ти­за­то­ра), при­нять? [this is your network address from the DHCP (usually your router), do you accept?]». От­вет в об­щем слу­чае – да, так как здесь мы не хо­тим слиш­ком мно­го во­зить­ся с се­те­вы­ми на­строй­ка­ми BCCD. Про­сто на­жми­те Enter на от­ве­те «да [yes]», и за­груз­ка про­дол­жит­ся. См. рис. 2.

Ра­бо­чий стол BCCD

Вслед за этим дол­жен поя­вить­ся ра­бо­чий стол BCCD. Ес­ли это­го не про­ис­хо­дит и вы остае­тесь в тек­сто­вом ре­жи­ме, при­чи­на, воз­мож­но, в том, что не уда­лось за­гру­зить X-сер­вер; в этом слу­чае на­бе­ри­те startx и по­до­ж­ди­те, по­ка ра­бо­чий стол за­гру­зит­ся. Ес­ли все прой­дет успеш­но, вы уви­дите на экране нечто вроде рис. 3.

Про­по­ло­щем, по­сти­ра­ем, по­вто­рим

От­лич­но, пер­вый барь­ер пре­одо­лен. Ос­тавь­те пер­вый ком­пь­ю­тер и пе­рей­ди­те ко вто­ро­му, он же – узел 2. По­вто­ри­те те же дей­ст­вия: пустой па­роль и т. д. Се­те­вая кар­та долж­на по­лу­чить дру­гой IP-ад­рес (ес­ли нет, пе­ре­за­гру­зи­тесь и по­про­буй­те сно­ва), и че­рез ми­ну­ту или две вы долж­ны смот­реть на два оди­на­ко­вых ра­бо­чих сто­ла BCCD.

Соз­дание кла­сте­ра

Пре­ж­де чем на­чать сме­ять­ся злоб­ным сме­хом и гла­дить бе­лую кош­ку, на­бе­рем несколь­ко команд, с целью убе­дить­ся, что два ком­пь­ю­те­ра мо­гут свя­зать­ся друг с дру­гом и кла­стер бу­дет ра­бо­тать. На глав­ном уз­ле в верхнем окне Тер­ми­нал [Terminal] RXVT (с чер­ным фо­ном) вве­ди­те сле­дую­щие ко­ман­ды:

bccd-allowall

Эта ко­ман­да со­бе­рет клю­чи SSH хостов, что по­зво­лит об­менивать­ся дан­ны­ми ме­ж­ду дву­мя хоста­ми без вво­да па­ро­лей. Те­перь вве­ди­те ко­ман­ду:

bccd-snarfhosts

Она соз­даст или пе­ре­за­пи­шет файл machines, ис­поль­зуе­мый про­грам­мой MPI – под­робнее о ней чуть поз­же. Сде­лай­те то же са­мое на уз­ле 2; хо­тя в тео­рии это­го не тре­бу­ет­ся, мы об­на­ру­жи­ли. что BCCD луч­ше ра­бо­та­ет с оди­на­ко­вы­ми фай­ла­ми machines. Ес­ли вам ин­те­рес­но, что в этом фай­ле, на­бе­ри­те в окне тер­ми­на­ла глав­но­го уз­ла ко­ман­ду:

vi ~/machines

От­кро­ет­ся тек­сто­вый файл, со­стоя­щий из несколь­ких строк. Пер­вой бу­дет нечто вро­де node000.bccd.net slots=1. Это глав­ный узел – так BCCD иден­ти­фи­ци­ру­ет его в се­ти. Во вто­рой стро­ке бу­дет узел 2, как BCCD иден­ти­фи­ци­ру­ет его в се­ти – node009.bccd.net slots=1. Ес­ли в фай­лах machines од­но и то же, от­лич­но, вы поч­ти у це­ли. Для вы­хо­да из Vi на­бе­ри­те

quit

и на­жми­те Enter.

Раз­во­ра­чи­ва­ем FAH

Ос­во­ить FAH нетруд­но. Несмотря на то, что последняя вер­сия – 7, мы восполь­зу­ем­ся вер­си­ей 6, так как она уж точ­но ра­бо­та­ет с BCCD. На глав­ном уз­ле вве­ди­те сле­дую­щую ко­ман­ду в окне тер­ми­на­ла:

mkdir -p ~/folding

Соз­да­ст­ся ка­та­лог folding с ро­ди­тель­ски­ми ка­та­ло­га­ми (при необ­хо­ди­мо­сти). За­тем вы­полните ко­ман­ду

cd ~/folding

Вы пе­рей­де­те в но­вый ка­та­лог folding. Ко­ман­да

wget http://www.stanford.edu/group/pandegroup/folding/release/FAH6.02-Linux.tgz

за­гру­зит кли­ент FAH в 32-бит­ной вер­сии с внеш­не­го сер­ве­ра. Ко­ман­да

tar xzf FAH6.02-Linux.tgz /

рас­па­ку­ет ар­хив и из­вле­чет не­об­хо­ди­мые фай­лы.

Те­перь у нас есть кли­ент, и его нуж­но на­стро­ить для ра­бо­ты в BCCD. Для это­го вве­ди­те сле­дую­щую ко­ман­ду:

chmod +x fah6

Она сде­ла­ет про­грам­му fah6 ис­пол­няе­мой. На­конец, нуж­но сде­лать так, что­бы кли­ент ра­бо­тал с долж­ной ко­ман­дой уча­стников и именем поль­зо­ва­те­ля. Вве­ди­те ко­ман­ду:

./fah6 -configonly

Бу­дет за­пу­ще­на ути­ли­та на­строй­ки кли­ен­та FAH. У вас за­про­сят имя поль­зо­ва­те­ля (не важ­но, что вы вве­де­те, ес­ли у вас его по­ка нет) и ко­ман­ду бойцов, за ко­то­рую вы хо­ти­те «сво­ра­чи­вать» бел­ки – мож­но вы­брать свою соб­ст­вен­ную или при­сое­динить­ся к ко­ман­де Linux Format с но­ме­ром 217805. Ос­таль­ные па­ра­мет­ры луч­ше не ме­нять, по­это­му про­сто на­жми­те Enter. Ес­ли вы осоз­нае­те, что де­лае­те с FAH, за­дай­те те зна­чения, ко­то­рые луч­ше все­го со­от­вет­ст­ву­ют ва­шим по­треб­но­стям.

MPI: ввод и вы­вод

MPI (Message Passing Interface – ин­тер­фейс пе­ре­да­чи со­об­щений) – про­грам­ма, ко­то­рая по­зво­ля­ет про­цес­сам взаи­мо­дей­ст­во­вать друг с дру­гом пу­тем от­прав­ки и прие­ма со­об­щений че­рез сеть. Она ис­поль­зу­ет­ся для про­грам­ми­ро­вания па­рал­лель­ных вы­чис­лений и вы­сту­па­ет в ка­че­­ст­ве по­средника ме­ж­ду мно­ги­ми уз­ла­ми, ко­то­рые по­тен­ци­аль­но мо­гут об­щать­ся друг с дру­гом.

Дру­ги­ми сло­ва­ми, она нуж­на нам за­тем, что­бы FAH ис­поль­зо­вал про­цес­со­ры на обо­их ком­пь­ю­те­рах так, как ес­ли бы он ра­бо­тал на од­ном ком­пь­ю­те­ре. На са­мом де­ле это очень слож­но. MPI управ­ля­ет вво­дом и вы­во­дом дан­ных и га­ран­ти­ру­ет, что они вер­ны и в них нет оши­бок; это неза­менимо для про­грам­мы вроде FAH.

Ра­бо­тай, MPI, ра­бо­тай

Ес­ли про­сто за­пустить FAH на глав­ном уз­ле, то кли­ент бу­дет принимать па­ке­ты и об­ра­ба­ты­вать их, но без по­мо­щи вто­ро­го уз­ла. Те­перь нам нуж­но со­об­щить глав­но­му уз­лу, что он бу­дет за­пускать кли­ент FAH в кла­сте­ре из двух уже иден­ти­фи­ци­ро­ван­ных уз­лов (са­мо­го се­бя и уз­ла 2) в со­от­вет­ст­вии с фай­лом machines, так что ему бу­дут доступ­ны вы­чис­ли­тель­ная мощ­ность и ре­зуль­та­ты об­ра­бот­ки с обо­их ком­пь­ю­те­ров. Не спешите пу­гаться – это значи­тельно про­ще, чем ка­жет­ся.

Пер­вая за­да­ча – син­хронизи­ро­вать ка­та­лог folding с обо­и­ми уз­ла­ми. Для это­го пе­рей­ди­те во вновь соз­дан­ный ка­та­лог folding (на глав­ном уз­ле), на­брав в тер­ми­на­ле: cd ~/folding. Те­ку­щий ка­та­лог мож­но оп­ре­де­лить по стро­ке при­гла­шения. Она долж­на быть bccd@node000:~/folding$, как на рис. 4. Когда вы ока­же­тесь в ка­та­ло­ге FAH, вве­ди­те сле­дую­щую ко­ман­ду (толь­ко на глав­ном уз­ле): bccd-syncdir . ~/machines.

Она соз­даст син­хронизи­руе­мую пап­ку на осно­ве ин­фор­ма­ции из фай­ла machines, это ка­та­лог ~/folding, а иден­ти­фи­ци­ро­ван­ные в кла­сте­ре ком­пь­ю­те­ры, ко­то­рые по­лу­ча­ют доступ к это­му фай­лу – node000 и node009 (глав­ный узел и узел 2). Че­рез па­ру ми­нут на эк­ране долж­но поя­вить­ся ок­но, по­ка­зан­ное на рис. 5.

За­пи­ши­те вре­мен­ный ка­та­лог, ис­поль­зо­ван­ный при син­хрониза­ции, в дан­ном слу­чае это /tmp/node000-bccd. Он по­на­до­бит­ся нам на сле­дую­щем ша­ге. За­тем на­жми­те OK для воз­вра­та в тер­ми­нал. Син­хрониза­ция на­строе­на; оста­лось вы­звать MPI для за­пуска кли­ен­та FAH в син­хронизи­руе­мом ка­та­ло­ге, доступ к ко­то­ро­му име­ют оба наших уз­ла.

Что­бы за­пустить FAH в кла­сте­ре, вве­ди­те сле­дую­щую ко­ман­ду в ок­но тер­ми­на­ла:

mpirun -machinefile ~/machines -np 6 /tmp/node000-bccd/./fah6 -verbosity 9

Эта ко­ман­да про­сит MPI за­пустить­ся и за­гля­нуть в фай­лы machines для оп­ре­де­ления ак­тив­ных уз­лов. Ключ –np 6 со­об­ща­ет MPI, что ис­пол­няе­мая ко­ман­да долж­на ис­поль­зо­вать шесть про­цес­со­ров. Ка­та­лог /tmp – вре­мен­ный, он ис­поль­зу­ет­ся при син­хрониза­ции. Часть ./fah6 -verbosity – ис­пол­няе­мый файл, ко­то­рый за­пуска­ет FAH. На­жми­те Enter, и вы долж­ны уви­деть ок­но, по­ка­зан­ное на рис. 6.

Кла­стер бла­го­деяний

Ну вот и все – по­здрав­ляю, вы толь­ко что соз­да­ли свой пер­вый су­пер­ком­пь­ю­тер, или кла­стер. И по­слу­жи­ли на бла­го лю­дям. Ес­ли вы жда­ли за­вы­вания си­рен и де­сантников в масках, вры­ваю­щихся в ком­на­ту че­рез ок­но – про­сти­те, что раз­оча­ро­вал. Щелк­нув пра­вой кноп­кой мы­ши на ра­бо­чем сто­ле ка­ж­до­го уз­ла, вы мо­же­те от­крыть ути­ли­ты X и в них Xload; так вы по­лу­чи­те ба­зо­вую ин­фор­ма­цию по за­груз­ке про­цес­со­ра.

Ес­ли вам понадобятся гра­фи­че­­ские кли­ен­ты для сбо­ра ста­ти­сти­ки, по­ищи­те са­ми и вы­бе­ри­те наилуч­ший для вас. Но для начала щелк­ните пра­вой кноп­кой мы­ши на ра­бо­чем сто­ле, вы­бе­ри­те Clustering [Кла­сте­ры] и за­тем XPVM. Кликните на Hosts [Хосты] и до­бавь­те дру­гой хост (node000 или node 009), за­тем кликните на Tasks > Spawn [За­дания > Раз­мно­жить] и в команд­ной стро­ке на­бе­ри­те:

/tmp/node000-bccd/fah6

По­смот­ри­те на раз­лич­ные пред­став­ления – они долж­ны дать вам приблизительное понятие о про­ис­хо­дящих там процессах.

Ос­таль­ное – за ва­ми: как да­ле­ко вы намерены зай­ти в этом про­ек­те? Есть ли у вас дру­гие ком­пь­ю­те­ры, ко­то­рые мож­но до­ба­вить в кла­стер? Что бы вы ни ре­ши­ли, помните, что здесь мы толь­ко косну­лись по­верх­но­сти, по­это­му дви­гай­тесь даль­ше и учреждай­те кла­сте­ры во славу Linux Format. |

Персональные инструменты
купить
подписаться
Яндекс.Метрика