Просто про складне: високопродуктивні обчислення для інженерних і науково-дослідницьких завдань

Що потрібно щоб скопати город? При наявності городу, потрібні робочі інструменти і робоча сила (працівники). А що робити якщо потрібно скопати швидше чи більше? Можна покликати друзів або найняти інших людей, тобто збільшити кількість працівників. Ось це і є прикладом високопродуктивного скопування городу. Не завжди можна збільшувати продуктивність скопування городу шляхом пошуку сильних працівників, так як продуктивність кожного окремо взятого працівника обмежена. Тому і доводиться вдаватися до послуг більшого числа працівників.

Аналогічно і з високопродуктивними обчисленнями. Працівниками (анг. workers) так і називаються окремі комп'ютери і процесорні ядра в обчислювальних кластерах, якщо спиратися на термінологію пакету МАТЛАБ (англ. MATLAB). У документації інших кластерів ці ядра і комп'ютери називаються нодами (англ. nodes), так і буду їх називати в цій замітці.

Просто про складне: високопродуктивні обчислення для інженерних і науково-дослідницьких завдань

Введення
На Хабрахабре вже багато писалося про високопродуктивних розподілених і паралельних обчисленнях (ВВ). freetonik вже зробив докладний і наочне введення в паралельні обчислення і продовження тут, ВВ були розглянуті автором keleg тут, теорія розподілених обчислень була розкрита в примітках автора mkosyakov, Melges описав досвід організації паралельних обчислень по мережі на Сі і XakepRU описав як можна розпаралелити процеси в Linux. Перечитавши їх я зрозумів що немає нотатки яка могла б допомогти почати використовувати ВВ для вирішення інженерних і наукових задач. Це швидше за все загальна особливість багатьох джерел інформації по даній тематиці. Програмісти пишуть хороші програми які виконують покладені на них завдання. Університетські викладачі доступно пояснюють, як і чому варто використовувати високопродуктивні обчислення. Але як тільки дослідники усвідомлюють що їм пора скористатися ВВ, то вони стикаються з малим числом 'містків' які пов'язують розуміння ВВ з безпосереднім використанням ВВ систем в їх роботі. В університетах студенти можуть знайти такий місток' на лабораторних і практичних роботах. А я спробую заповнити цю прогалину в надії що матеріал буде корисним для тих хто цього не вивчав і допоможе їм почати користуватися ВВ. Спочатку буде короткий вступ у ВР, після чого будуть розглянуті можливості використання МАТЛАБ, HPCondor суперкомп'ютерів.

Високопродуктивні обчислення (ВВ) приходять на допомогу в тих випадках коли потрібно скоротити час розрахунків або отримати доступ до більшого обсягу пам'яті. Наприклад, ваша програма може проводити необхідні обчислення протягом тижня, але вам потрібно отримати результати завтра. Якщо розділити цю програму на частини і виконувати кожну з них на окремому ноде, то теоретично можна прискорити розрахунки пропорційно кількості залучених нодів. Але це тільки теоретично, а на практиці цього завжди щось заважає (про що докладно йшлося тут). Тут варто згадати й інший випадок, коли ваша програма вимагає великий обсяг оперативної пам'яті. Наприклад, у вашому комп'ютері встановлено 4 Гб оперативної пам'яті, а для розрахунків потрібно хоча б 64 Гб. У системах ВВ на кожному ноде встановлена пам'ять певної ємності. Так якщо кожному ноду доступно 2 Гб пам'яті, то знову ж можна розділити програму на 32 частини, кожна з яких буде виконуватися на окремому ноде, буде взаємодіяти з іншими частинами, обмінюватися даними і, в кінцевому підсумку, програма в цілому буде мати доступ до 64 Гб пам'яті.

З цих прикладів ви напевно зрозуміли що високопродуктивні обчислення — це обчислення проводяться на комп'ютерних системах зі специфікаціями, які значно перевищують звичайні комп'ютери. Це поняття умовне, можливо є і більш точне визначення, але я його зараз не зміг знайти. Існують паралельні, розподілені ВВ, а так само їх комбінації.

Паралельні обчислення передбачають розробку програм, які під час їх виконання являють собою кілька паралельних і взаємодіючих між собою процесів. Наприклад, моделювання характеристик комірки сонячної батареї передбачає взаємодію трьох моделей описують: перенесення носіїв заряду, поширення падаючого світла всередині комірки, температурні ефекти, розтяг-стиск. Так перенесення носіїв, розтяг-стиск і показник заломлення матеріалу, який використовується в оптичній моделі падаючого світла, залежать від температури і моделі, що описують ці ефекти, повинні взаємодіяти один з одним у процесі розрахунку. Щоб прискорити розрахунки можна код моделі описує транспорт носіїв виконувати на одному ноде, код який відповідає за поширення світла — на іншому, температурну модель — на третьому, і так далі. Тобто, ноди будуть виконувати взаємодіючі розрахунки паралельно.

Розподілені обчислення передбачають використання кількох не взаємодіючих один з одним нодів і процесів. Дуже часто в такому випадку виконується один і той же код на різних ноди. Наприклад, нам потрібно оцінити розтяг і стиск тієї ж комірки сонячної батареї в залежності від температури. В такому випадку, температура — вхідний параметр моделі і один і той же програмний код цієї моделі можна виконати на різних ноди для різних значень температури.

Вибір між розподіленими і паралельними розрахунками залежить від організації програмного коду використовується для розрахунків, самої фізичної моделі, доступності систем ВВ для кінцевого користувача. Далі в цій замітці про те
  • як кінцевий користувач взаємодіє з системою ВВ;
  • які ВВ системи доступні і які у них обмеження;
  • про кластери побудованих ЗА допомогою Кондор (англ. Condor) і МАТЛАБ (вибір припав на них просто з причини досвіду автора з ними);
  • трохи про суперкомп'ютери та гридах;
  • і про те як усім цим господарством можна скористатися.


Взаємодія користувача з системою високопродуктивних обчислень
Якщо користувач використовує ВВ системи віддалено, то йому потрібен комп'ютер, на якому він буде:
  • готувати програми для запуску на системах ВВ;
  • запускати розрахунки на системах ВВ або підключатися до систем ВВ для запуску програм;
  • на якому він буде обробляти результати розрахунків.


Тут багато чого залежить від особистих уподобань користувача, доступність потрібного програмного забезпечення та інших вимог. Є можливість вибору мови програмування, операційної системи робочого комп'ютера і кластера, використовуваних програмних бібліотек і для організації кластерів. Особисто я весь час намагаюся писати програми на С або с++ З використанням MPI і openMP для Лінукс (тут і тут вже є хороші статті по цій темі цих тат і мам високопродуктивних обчислень ), але з різних причин це не завжди виходить. Типова ситуація — приходить шеф в п'ятницю і каже що нам терміново потрібні результати. Закінчується це тим, що пишеться програма в МАТЛАБ для проведення потрібних розрахунків. А щоб швидше отримати результати, ця програма працює на кластері МАТЛАБ нашої організації до понеділка.

Що стосується операційної системи робочого комп'ютера користувача, то в більшості випадків зручніше всього використовувати ту ж операційну систему і її дистрибутив що встановлена на системі ВВ. У даний момент більшість ВВ систем працює під управлінням різних дистрибутивів Лінукс. Якщо на нашому кластері варто Scientific Linux, то й на робочий комп'ютер простіше поставити цю ж систему щоб надалі не плутатися в командах. Якщо плануєте використовувати кластер на базі МАТЛАБ, то вибір операційної системи ролі не грає, так як програми написані на МАТЛАБ можуть виконуватися на комп'ютерах з будь-якими ОС (доступними для установки МАТЛАБ, природно).

Якщо ж ви вибираєте змішану схему, при якій у вас на комп'ютері встановлена ОС сімейства MS Windows, а ВВ система побудована на ОС Лінукс, то вам знадобиться клієнт для підключення до віддаленої системи (наприклад, PuTTY), і, можливо X-сервер або ж відразу Cygwin, в якому це все є. У виборі програмного забезпечення вам завжди допоможуть локальні адміністратори ВВ системи.

Важливий момент: ВВ системи зазвичай або не підтримують програми вимагають роботи в інтерактивному режимі (які в процесі виконання запитують введення даних, очікують інших дій користувача таких, як натискання клавіш або маніпуляцій мишкою) або підтримують їх обмежено. Аналогічно і щодо графічного інтерфейсу — його використання найчастіше не передбачено і ВВ системи використовуються в текстовому режимі командного рядка (виняток — той же МАТЛАБ). Перед використанням вашої програми в СТ системі, вона повинна бути налагоджена й потім перетворена так щоб вона могла бути запущена на СТ системі і без подальшого втручання людини вона провела розрахунки і зберегла результати в файлах або передала їх користувачеві іншим способом.

До продуктивності комп'ютера користувача вимоги мінімальні, так як основні розрахунки все одно планується проводити на системах ВВ. Стежити за станом розрахунків, запускати і зупиняти їх можна з мінімальній конфігурації комп'ютера і з мобільного телефону.

Деякі системи ВВ
Загальний огляд
Найчастіше для проведення ВВ використовуються суперкомп'ютери, комп'ютерні кластери і гріди (англ. computing grids).
Суперкомп'ютери — комп'ютерні системи, що значно перевищують більшість існуючих комп'ютерів по своїм параметрам, таким як продуктивність, доступна оперативна пам'ять, доступне число процесорів. Для більшої інформації про них ви можете подивитися список п'ятисот самих продуктивних суперкомп'ютерів світу.

Комп'ютерний кластер — група комп'ютерів, які можуть взаємодіяти один з одним для нарощування доступної пам'яті і числа процесорів залучених у роботу. Найчастіше такі кластери будуються всередині дослідних груп або організацій.

Гріди — це групи кластерів і суперкомп'ютерів, розкиданих по різних містах і країнах. Так, наприклад, ви можете передати свою обчислювальну задачу на сервер в Швейцарії, але вона буде виконуватися або на кластерах в Німеччині, Франції чи Польщі. Найбільш відомий приклад гріду — європейська грід-система EGEE, що поєднує в собі близько сорока тисяч процесорів і кілька петабайтов дискового простору.

Кінцевому користувачеві часто важко або не можливо розрізнити суперкомп'ютери і кластери. Ось три приклади:

1. Не рідко суперкомп'ютерами називають і групу комп'ютерів підключених один до одного через високошвидкісні мережі зв'язку, що по суті — той же самий комп'ютерний кластер;

2. У той же час існують кластери побудовані на базі програмного забезпечення HPCondor, так це група комп'ютерів, що взаємодіють з сервером локальної мережі (часто — повільної мережі) і не хто не ризикне назвати такі кластери суперкомп'ютерами;

3. Є ж суперкомп'ютери NVIDIA (які мають системний блок більшого розміру ніж звичайні офісні комп'ютери, у яких вся обчислювальна система не розкидана по мережі, а вміщується в цьому системному блоці.

Якщо взяти приклади 2 і 3, то різниця між суперкомп'ютером і кластером очевидна. У першому і третьому, особливої межі не видно, знову ж обидві системи з цих двох прикладів називають суперкомп'ютерами.

Кластери HPCondor (англ. Condor, після 2012 року — HTCondor)
Програмне забезпечення для організації такого кластера можна безкоштовно завантажити зі сторінки проекту. Кластери даного типу складаються з робочих комп'ютерів і сервери. Перевага такого кластера в тому що робочими комп'ютерами можуть виступати звичайні офісні та лабораторні комп'ютери, на яких встановлено клієнтське ПЗ. У денний час ці комп'ютери можуть використовуватися для основної роботи, але як тільки ними перестають користуватися (це залежить від налаштувань) сервер починає запускати на цих комп'ютерах завдання які були передані йому раніше. Обов'язковою умовою використання цього кластера є установка клієнтського ПЗ і на той комп'ютер, з якого користувачі передають завдання. Тобто і їх комп'ютер повинен бути частиною кластеру. Підтримувані операційні системи: MS Windows, MacOS і Linux.

Для виконання програми, ця програма повинна бути складена в виконуваний код потрібної для ОС і разом з необхідними бібліотеками передана на сервер. Це застосовно і до програм написаних для МАТЛАБ — вам так само необхідно відкомпілювати їх використовуючи компілятор C, який поставляється з МАТЛАБ. Для запуску цієї програми в кластері, необхідно написати простий конфігураційний скрипт, в якому записані вимоги до середовища виконання вашої програми (розмір оперативної пам'яті, операційна система і так далі) і список передаються разом з цією програмою файлів. В якості прикладу нижче наведено текст з одного з таких файлів (назвемо його cost_top.txt):

universe = vanilla 
executable = cost_top.bat 
transfer_input_files = cost_top.exe 
output = dump.txt 
error = errdump.txt 
log = foo.log 
вимога = (OpSys == "WINNT51") 
rank = kflops 
transfer_files = ALWAYS 
queue


Впевнений, що Ви вже здогадалися — це файл «пояснює» Кондор такі важливі моменти як ім'я виконуваної програми, які файли необхідно передати в кластер, який файл записувати результати виконання програми, в будь — повідомлення про помилки, в будь — додаткові повідомлення, які саме вимоги висуваються до ОС нода та її продуктивності і передавати файли.

Вміст файлу cost_top.bat, який виконується на ноді:

path=c:\windows\system32;c:\windows;c:\windows\system;p:\matlab6\bin\win32 
cost_top.exe 


Швидше за все ви зрозумієте, що перший рядок у цьому скрипті відповідає за додавання потрібних шляхів в змінну оточення, друга — за запуск потрібної нам програми.

Для передачі вашої задачі на сервер кластера, потрібно в командному рядку набрати 'condor_submit cost_top.txt'. Після цього ваше завдання буде поставлено в чергу і через деякий час сервер буде готовий запустити вашу завдання на клієнтських комп'ютерах. Час очікування в черзі залежить пріоритету кожного з користувачів і навантаження на кластер і вибирається системою балансування завдань сервера.

У кластерів даного типу є обмеження:
  • з моменту постановки завдання в чергу і до моменту закінчення розрахунку ваш клієнтський комп'ютер повинен бути включений і подкючен до локальної мережі так як сервер і клієнт обмінюються файлами;
  • даний кластер підтримує тільки розподілені СТ завдання;
  • є складнощі у використанні будь-якої сторонньої програми (відмінною від написаної і откопелированной вами) і програм потребують бібліотек.


Кластери МАТЛАБ
МАТЛАБ сам по собі здатний створити кластер. Для цього вам знадобиться відповідні бібліотеки і сервер — Distributed Computing Toolbox і Distributed Computing Server. Зараз сучасні процесори комп'ютерів мають більш ніж одне ядро і МАТЛАБ здатний розгорнути ваш власний локальний кластер прямо на базі вашого робочого комп'ютера. Така конфігурація кластера відома як локальна конфігурація. Вона зручна в тих випадках коли хочеться трохи прискорити розрахунки без особливих зусиль як і тоді коли потрібно протестувати програму перед її стартом на більш серйозною СТ системі такий як суперкомп'ютер або кластер.

Поряд з локальною конфігурацією існує й інші конфігурації. Наприклад для кластера об'єднує групу комп'ютерів в локальній мережі, групу комп'ютерів в кластері або у гріді. Якщо у адміністраторів є можливість і вони не лінуються, то вони зазвичай налаштовують кластери МАТЛАБ і проводять навчальні курси для того, щоб користувачам було легко користуватися такими кластерами.

Переваги кластерів МАТЛАБ:
  • клієнтський комп'ютер, з якого передаються завдання для розрахунку, може бути виключений після передачі завдання і користувач може забрати результати розрахунків пізніше;
  • можуть виконувати як розподілені так і паралельні обчислювальні задачі;
  • користувачам МАТЛАБ легше почати користуватися такими кластерами, так як мова програмування вже знайомий;
  • програми не вимагають компіляції;
  • адаптація програми для паралельних розрахунків в якій вже є оператори циклу 'for' дуже проста — достатньо замінити такий оператор на 'parfor' і додати пару рядків для ініціалізації кластера і його закриття після закінчення роботи.


Наприклад, код без використання parfor:

clear all; 
Na=4:50; 
Nc=4:30; 
for i1=1:length(Na), 
for i2=1:length(Nc), 
[out1,out2]=fom(Na(i1),Na(i1),Nc(i2),0) ; 
end 
end 
save FigOM.dat FigOM-ascii 
save dF.dat dF-ascii 
exit


А тепер те ж саме з використанням parfor і чотирьох нодів:

clear all; 
matlabpool open 4 
Na=4:50; 
Nc=4:30; 
for i1=1:length(Na), 
parfor i2=1:length(Nc), 
[out1,out2]=fom(Na(i1),Na(i1),Nc(i2),0) 
end 
end 
matlabpool close 
save FigOM.dat FigOM-ascii 
save dF.dat dF-ascii 
exit


Недоліки:
  • МАТЛАБ — не безкоштовний продукт і частини користувачів він просто не по кишені;
  • кластерний ЗА не поставляється з програмою для балансування навантаження (вона може бути встановлена окремо), що призводить до ситуацій, коли деякі користувачі займають все ноди кластера і блокують доступ інших користувачів.


Суперкомп'ютери і гріди
Як вже було вище згадано, іноді складно знайти відмінність між суперкомп'ютером, обчислювальним кластером і гридом. З цього боку вікна терміналу всі вони виглядають однаково. Всі вони мають велику кількість процесорів і пам'яті в СТ системі. Серед встановленого програмного забезпечення у них є компілятори та бібліотеки MPI і OpenMP. Іноді встановлений МАТЛАБ та інші програми підтримують використання групи нсд та їх пам'яті.

Найбільш часто зустрічається алгоритм роботи такий:
  • користувач підключається (як правило по SSH) до спеціальних нодам (англ. login nodes) на яких він інтерактивно може виконувати частину команд і з яких може контролювати свої розрахунки;
  • завантажує модулі, необхідні для виконання тієї чи іншої задачі, наприклад, компілятор gcc і бібліотеки MPI;
  • якщо необхідно, то компілює свою програму з підтримкою потрібних бібліотек;
  • аналогічно кластеру HPCondor, готує файл налаштувань і команд для виконання своєї програми (англ. job submiossion file);
  • передає цей файл налаштувань і команд за допомогою команди 'qsub ім'я_файлу' в чергу на виконання;
  • як тільки виконання програми буде завершено, користувач може отримати результати її виконання (та їх простіше зберігати у файли).


Файли налаштувань аналогічні файлів кластерів HPCondor. Наприклад для того щоб запустити вищенаведений приклад з parfor можна скористатися наступним файлом:

#!/bin/sh 
#$ -l h_rt=10:00:00 
/usr/local/bin/matlab /home/el/calmap.m


У другому рядку зазначається максимальний час, необхідний для виконання даної задачі, а третьою — команда яку необхідно виконати на даній системі для запуску потрібної користувачеві програмного коду МАТЛАБ.
Ще один приклад файлу для запуску програми, яка використовує бібліотеки MPI:

#!/bin/bash 
#$ -l h_rt=4:00:00 
#$ -pe mvapich2-ib 12 
# 
LDFLAGS="-L$HOME/opt/lib-lm" export LDFLAGS 
CPPFLAGS="-I$HOME/opt/include" export CPPFLAGS 
LD_LIBRARY_PATH="$HOME/opt/lib:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH 
PATH=$PATH:$HOME/opt/bin export PATH 
add module компілятори/intel/12.1.15 
add module mpi/intel/mvapich2/1.8.1 
mpirun-np 12 m-mpi test7.ct


У другому рядку — максимальне час, необхідний для розрахунку, у третій — зазначення імені середовища для паралельних розрахунків (задано адміністраторами) і кількість запитуваних нодів, далі 4 рядки з присвоєнням потрібного значення змінних оточення, після чого два рядки, які відповідають за підключення потрібних модулів і в кінці скрипта — запуск потрібної програми, яка буде використовувати 12 нодів.

Висновок
Не можна осягнути неосяжне, але намагатися можна і потрібно. У цій замітці я спробував зробити огляд систем високопродуктивних обчислень, допомогти починаючим користувачам розібратися зі спектром можливостей і зрозуміти що доступно і як це можна використовувати. Як ви бачите, навіть якщо у вас немає доступу до суперкомпьютерам і гридам, то можна побудувати свій кластер на основі МАТЛАБ або безкоштовного ЗА Кондор.

p.s. Якщо можете доповнити цю замітку чи знайшли помилку, то прошу написати про це нижче. Врешті-решт це буде тільки на користь знань і розуміння питання і це дасть можливість поліпшити замітку.
p.p.s. Є ще можливість використання технології CUDA для прискорення розрахунків в С/C++ і МАТЛАБ шляхом залучення ядер графічного процесора в роботу, але про це написано багато.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.