Центр колективного користування
«Ресурсний центр для грід- та хмарних технологій»
Інституту теоретичної фізики ім.М.М.Боголюбова НАН України
Обчислювальний грід-кластер

Gaussian

Даний документ описує роботу користувачів ІТФ з встановленим на кластері пакетом Gaussian 03.

Даний документ розрахований на користувачів кластеру Інституту теоретичної фізики ім. М.М.Боголюбова НАНУ, які мають досвід роботи з програмою Gaussian, і тому в ньому описуються лише особливості використання пакету на кластері. Опис власне програми Gaussian та її команд та параметрів не є метою створення даного документу. Для ознайомлення з програмою Gaussian можна прочитати керівництво на сайті розробника, а також пошукати додаткові матеріали в Інтернеті. Із зауваженнями та пропозиціями щодо цього документу прохання звертатися за однією з адресс pelyh@grid.bitp.kiev.ua, alitovchenko@bitp.kiev.ua чи svistunov@bitp.kiev.ua.

Зміст

1. Загальні зауваження
2. Інтерактивна робота з Gaussian
3. Gaussian через систему PBSPro
4. Розпаралелення Gaussian на декілька вузлів з використанням Linda

1. Загальні зауваження

1. На даний момент доступ до пакету мають лише користувачі кластеру ІТФ, що входять до групи gaussian. Якщо ви бажаєте використовувати Gaussian для своїх задач, слід звернутися до адміністратора кластеру Володимира Пелиха (pelyh@grid.bitp.kiev.ua) з проханням додати ваш акаунт до вищевказаної групи.

2. Після того, як адміністратор внесе користувача до групи gaussian, користувач повинен створити у своїй домашній директорії файл .cshrc, до якого треба занести дані ініціалізації оболонки csh, яку використовує Gaussian. Все це можна зробити наступними командами:

[user@clusterui ~]$ cat << EOF > .cshrc
> #!/bin/csh
> setenv g03root "/opt"
> setenv GAUSS_SCRDIR "/local/gaussian"
> source $g03root/g03/bsd/g03.login
> EOF
[user@clusterui ~]$


3. Інтерактивна робота з Gaussian допускається лише для ознайомлення користувача з пакетом, використовуючи нетривалі та невимогливі до ресурсів задачі. Після того, як користувач оволодіє навчиками роботи з Gaussian, слід використовувати Gaussian через систему PBSPro. Тривалі за часом та вимогливі до ресурсів задачі ні в якому разі не можна запускати в інтерактивному режимі.

4. Інформація щодо використання параметрів %mem та %nproc: задачі Gaussian виконуються на вузлах, що мають 8 процесорів та 8192 Mb оперативної пам'яті. Якщо для задачі потрібно більше ніж 8 процесорів, їх можливо отримати лише розпаралеливши задачу на декілька вузлів за допомогою ПЗ Linda.

5. Інформація щодо параметрів, які керують допоміжними файлами Gaussian (%chk, %rwf і т.п.): місцезнаходженням усіх цих файлів слід вказувати директорію /local/gaussian. Наприклад:

 %chk=/local/gaussian/task_restart 

2. Інтерактивна робота з Gaussian

Прямий доступ до пакету Gaussian можливий лише з внутрішніх вузлів кластеру, тому користувач повинен зайти з вхідного вузлу кластера clusterui.bitp.kiev.ua на будь-який внутрішній вузол (мають імена з a20 по a31). Після цього користувач повинен змінити командну оболонку з bash на csh за допомогою команди /bin/csh, оскільки Gaussian використовує саме оболонку csh. Після зміни оболонки користувач отримує доступ до команд Gaussian та може запускати за їх допомогою задачі. При цьому при запуску задачі на виконання слід використати команди nohup та nice, а саме виконання задачі перевести у фоновий режим. Тобто команда запуску задачі Gaussian повинна мати вигляд:

nohup nice g03 "шлях_до_вхідного_файлу" &

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

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

Після виконання даної послідовності команд програма розпочне роботу над вказаним вхідним файлом. При цьому робота програми буде проходити у фоновому режимі, тобто процес ніяк не буде сигналізувати про хід роботи та своє завершення. Для того, щоб дізнатися, чи завершила свою роботу програма, слід знову зайти на вузол, де була запущена програма, та подивитися, чи є вона у списку активних процесів, запущених користувачем. Це робиться за допомогою команди ps aux | grep g03 | grep "ім'я_користувача". Змінювати оболонку перед виконанням цієї команди не треба, оскільки список процесів на вузлі однаковий незалежно від використовуваної оболонки. Ознакою того, що програма завершила свою роботу, буде присутність лише одного рядку у виводі даної команди. Наприклад:

[user@а22 ~]$ ps aux | grep g03 | grep user
user 3072 0.0 0.0 83708 784 pts/1 S+ 23:02 0:00 grep g03
[user@a22 ~]$


Якщо ж команда видає декілька рядків з більш ніж одним процесом, це свідчить про те, що програма все ще продовжує свою роботу. Наприклад:

[user@а22 ~]$ ps aux | grep g03 | grep user
user 3072 0.0 0.0 83708 784 pts/1 S+ 23:02 0:00 grep g03
user 3079 0.0 0.0 16452 860 pts/1 SN 23:05 0:00 g03 test002.com
user 3092 29.0 0.1 146764 12924 pts/1 RN 23:06 0:01 /opt/g03/l701.exe 0 /local/gaussian/Gau-3092.chk 0 /local/gaussian/Gau-3092.int 0 /local/gaussian/Gau-3092.rwf 0 /local/gaussian/Gau-3092.d2e 0 /local/gaussian/Gau-3092.scr 0 /local/gaussian/Gau-3079.inp 0 junk.out 0
[user@a22 ~]$


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

Нижче наведений приклад повного циклу роботи користувача з Gaussian

[user@clusterui ~]$ ssh a22
Last login: Tue Apr 7 22:59:46 2009 from clusterui.bitp.kiev.ua
[user@alice22 ~]$ /bin/csh
[user@alice22 ~]$ cd gaussian_test
[user@alice22 ~/gaussian_test]$ nohup nice g03 test000.com &
[1] 4591
[user@alice22 ~/gaussian_test]$ exit
exit
[user@alice22 ~]$ exit
logout
Connection to a22 closed.


Після чого можна покинути кластер та повернутися на нього через деякий час для перевірки стану програми:

[user@clusterui ~]$ ssh a22
Last login: Tue Apr 7 23:19:51 2009 from clusterui.bitp.kiev.ua
[user@alice22 ~]$ ps aux | grep g03 | grep user
user 4729 0.0 0.0 83708 776 pts/0 S+ 23:28 0:00 grep g03
[user@alice22 ~]$ cd gaussian_test
[user@alice22 gaussian_test]$ ls
fort.7 test000.com test000.log

3. Gaussian через систему PBSPro

Для використання Gaussian через систему PBSPro користувач повинен створити відповідний скрипт для запуску Gaussian, дотримуючись наступних правил.

  •  
    • На початку скрипта слід обов'язково вказати, що він повинен бути виконаний оболонкою csh.
    • Усі вхідні файли слід скопіювати до скретч-каталогу Gaussian (змінна оточення $GAUSS_SCRDIR).
    • Запуск Gaussian повинен відбуватися також зі скретч-каталогу.
    • По завершенню роботи Gaussian слід скопіювати усі вихідні файли за допомогою команди cp зі скретч-каталогу до каталогу, з якого користувач запускав скрипт (змінна оточення $PBS_O_WORKDIR).
    • Усі скопійовані у попередньому пункті файли, а також вхідні файли слід видалити зі скретч-каталогу за допомогою команди rm. Це потрібно для того, щоб не захаращувати скретч-каталог вже непотрібними файлами

Нижче наведено приклад такого скрипта під назвою gauss.sh. Він копіює вхідний файл Gaussian g03_task.com до скретч-каталогу, в цьому ж каталозі запускає Gaussian, по завершенню повертає вихідні файли g03_task.log та fort.7 разом з файлом перезапуску restart_file.chk та видаляє усі вже непотрібні файли зі скретч-каталогу

 #!/bin/csh 
  
 cd $GAUSS_SCRDIR 
 cp $PBS_O_WORKDIR/g03_task.com . 
  
 g03 g03_task.com 
  
 cp restart_file.chk fort.7 g03_task.log $PBS_O_WORKDIR 
  
 rm restart_file.chk fort.7 g03_task.log g03_task.com 


Створений скрипт потрібно подати на виконання стандартними засобами PBSPro:

[user@clusterui ~]$ qsub gauss.sh


Якщо користувач не знайомий з PBSPro, слід прочитати керівництво користувача.

3.1 Особливості використання параметрів %mem та %nproc

Якщо, користувач використовує у вхідних файлах Gaussian параметри %mem та %nproc для запиту необхідних об'єму оперативної пам'яті та кількості процесорів відповідно, слід повідомити про це системі PBSPro під час подачі скрипта на виконання за допомогою відповідних параметрів команди qsub. Інформація щодо пам'яті та процесору надається за допомогою параметру -l та модифікаторів цього параметру select, mem та ncpus у вигляді:

-l select=<кількість_вузлів>:mem=<об'єм_пам'яті_на_вузлі>:ncpus=<кількість_процесорів_на_вузлі>

При цьому рекомендується при подачі скрипту вказувати модифікатор mem приблизно на 500 Мб більше, ніж відповідний параметр %mem у вхідному файлі Gaussian.

Наприклад, якщо користувач вказав у вхідному файлі параметри %mem=1000MB та %nproc=3, при подачі скрипта слід задати команді qsub наступні параметри:

[user@clusterui ~]$ qsub -l select=1:mem=1500MB:ncpus=3 gauss.sh

4. Розпаралелення Gaussian на декілька вузлів з використанням Linda

На кластері ІТФ встановлено ПЗ Linda, за допомогою якого можливо розпаралелити задачу Gaussian на декілька вузлів, і, таким чином використовувати більш ніж 8 процесорів для виконання задачі. Розпаралеленню за допомогою Linda підлягають обчислювання типу HF , CIS=Direct, DFT та обчислення енергій та градієнтів у типах TDDFT і MP2. Обчислення типу PBC розпаралеленню не підлягають.

4.1 Підготовка середовища Linda

Для нормальної роботи Linda потрібно заздалегідь зробити наступні кроки:

1. Налаштувати Linda на роботу з ssh замість rsh. Для цього слід у своїй домашній директорії створити файл .tsnet.config, до якого слід занести наступний рядок:

Tsnet.Node.lindarsharg:ssh

Це можна зробити, наприклад, наступною командою:

[user@clusterui ~]$ echo "Tsnet.Node.lindarsharg:ssh" > .tsnet.config


2. Переконатися, що користувач має безпарольний доступ по ssh на всі вузли кластеру. Для цього слід створити ssh-ключ користувача та помістити його до файлу .ssh/authorized_keys в домашній директорії користувача. Як це зробити -- повідомляється кожний раз у повідомленні при логіні на clusterui.bitp.kiev.ua. Якщо користувач вже зробив це раніше -- повторно команди можна не виконувати.

3. Забезпечити безпарольний вхід по ssh на всі вузли кластеру без додаткового підтвердження. Для цього потрібно включити до файлу .ssh/known_hosts в домашній директорії користувача ssh-ключі всіх вузлів кластеру. За адресою http://clustermon.bitp.kiev.ua/upload/ssh_key_fetcher.sh знаходиться скрипт, що робить це автоматично. Слід завантажити його до своєї домашньої директорії, надати відповідні права на виконання та запустити. Наприклад:

[user@clusterui ~]$ wget http://clustermon.bitp.kiev.ua/upload/ssh_key_fetcher.sh
[user@clusterui ~]$ chmod u+x ssh_key_fetcher.sh
[user@clusterui ~]$ ./ssh_key_fetcher.sh
4.2 Особливості вхідних файлів Gaussian при використанні Linda

1. До вхідного файлу Gaussian вноситься параметр %NProcLinda. Цей параметр вказує на загальну кількість процесорів, яку потребує задача. Приклад використання:

 %NProcLinda=10 


2. Для зазначеної загальної кількості процесорів слід розрахувати, кількість вузлів N_NODES які займе задача, та кількість процесорів на кожному вузлі P_PER_NODE, яку вона буде потребувати. Слід вважати, що усі паралельні процеси будуть рівномірно розподілені на якомога меншу кількість вузлів з 8 процесорами на кожному. Тобто, якщо задача потребує 10 процесорів, то N_NODES дорівнює 2, P_PER_NODE -- 5. Якщо 18 процесорів загалом -- N_NODES дорівнює 3, P_PER_NODE -- 6, і т.д. Ці дані не вказуються у вхідному файлі, але будуть потрібні при оформленні скрипта для PBS та для подачі його на виконання

3. Параметр %mem в паралельному режим вказує на те, скільки пам'яті повинна використовувати Linda на кожному вузлі. Тобто його слід вказувати таким же чином, як і при звичайному використанні Gaussian, в рамках одного вузлу (максимум 8192 Mb). Загалом цей параметр в даному випадку дорівнює P_PER_NODE * об'єм_пам'яті_на_один_процесор

4. Параметр %nproc не слід вказувати взагалі -- версія Linda, встановлена на кластері, його ігнорує. Нижче буде показано, як вказати Linda на кількість процесорів на кожному вузлі.

5. До вхідного файлу після списку параметрів слід додати рядок Int=FMMNAtoms=300. Це необхідно для ефективного розпаралелення задачі.

4.2 Особливості скрипта для PBS при використанні Linda

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

1. Замість команди g03 для запуску Gaussian використовується команда g03l.

2. Перед виконанням команди запуску Gaussian слід встановити спеціальну змінну оточення GAUSS_LFLAGS, яка має наступний формат:

-nodelist "<список_вузлів_Linda>" -mp <P_PER_NODE>

У параметрі список_вузлів_Linda слід вказати імена тих вузлів, що були надані задачі системою PBS. Список цих вузлів знаходиться у змінній оточення PBS_NODEFILE

Для зручності користувачів був створений спеціальний скрипт, що враховує усі висунуті вимоги. Завантажити його можна за адресою: http://clustermon.bitp.kiev.ua/upload/gauss_linda.sh. Перед запуском цього скрипта користувачу слід змінити три рядки на початку:

 setenv P_PER_NODE 2 
 setenv INPUT_FILENAMES "myinput.com" 
 setenv OUTPUT_FILENAMES "myinput.log myrestart.chk" 



Замість поставлених там значень користувачу слід вказати відповідно: розраховане ним для своєї задачі значення P_PER_NODE; ім'я вхідного файлу; імена вихідних файлів. Всі інші дії скрипт зробить самостійно.

4.3 Особливості подання скрипту на виконання у PBS при використанні Linda

Оскільки Linda використовує декілька вузлів, слід повідомити про це PBS. Крім того, слід повідомити про кількість процесорів на кожному з вузлів, що будуть зайняті задачею, та про об'єм пам'яті, який задача займе на вузлі. Тому команда подачі скрипта у PBS повинна мати наступний вигляд:

qsub -l nodes=<N_NODES>:ppn=<P_PER_NODE>,mem=<%mem> <ім'я_скрипту>

Наприклад, якщо Linda буде потребувати 10 процесорів загалом, тобто N_NODES = 2, а P_PER_NODES = 5, при цьому користувач хоче використовувати на кожному вузлі по 1 Гб пам'яті на процесор, тобто приблизно 5500 Mb загалом (враховуючи 500 Мб згори, для надійності), команда запуску скрипта буде мати наступний вигляд:

[user@clusterui ~]$ qsub -l nodes=2:ppn=5,mem=5500MB gauss_linda.sh