Краткое руководство по установке NWChem

вопросы строения молекул и квантовой химии
Ответить
mizuchi
Сообщения: 95
Зарегистрирован: Ср фев 23, 2011 5:10 pm

Краткое руководство по установке NWChem

Сообщение mizuchi » Вс мар 25, 2018 6:08 pm

NWChem - это программный пакет для вычислительной химии и физики твердого тела, распространяемый в виде исходных текстов под лицензией образовательного сообщества (ECL 2.0). Возможности NWChem чрезвычайно широки:
  • Исследование электронной структуры молекул с помощью большого разнообразия методов - от Хартри-Фока и теории функционала плотности до различных вариаций связанных кластеров и конфигурационного взаимодействия;
  • Изучение больших молекулярных систем путем использования модуля QM/MM;
  • Для твердых тел и иных периодических структур можно применять плосковолновой модуль, который позволяет проводить расчеты на уровне теории функционала плотности как в плосковолновом базисе с использованием псевдопотенциалов, так и по линеаризованному методу присоединенных плоских волн с проектор-функцией (PAW);
  • Молекулярная динамика с использованием классических силовых полей AMBER и CHARMM или квантово-механического и смешанного подхода.
Преимуществом открытого кода данного программного комплекса является возможность его работы на практически любом оборудовании - от ноутбука до мощнейшего кластера с сотнями тысяч ядер. Но в открытом исходном коде заключена и проблема его правильной компиляции в бинарный код, которая может вызвать сложности у человека, работавшего только с готовыми программами. Частному решению этой задачи и посвящен настоящий пост.

В современном мире суперкомпьютерные технологии получили большое распространение, однако, бюрократические сложности отталкивают исследователей от применения многопользовательских сверхмощных машин в специализированных центрах в сторону лабораторных рабочих станций, на которых удельное количество вычислительных ресурсов на человека, как правило, больше, чем на суперкомпьютере. Поэтому рассмотрим несколько вариантов установки NWChem на рабочую станцию под управлением операционной системы GNU/Linux.

Итак, что понадобится:
1. Исходный код NWChem. На момент написания поста номер последнего релиза 6.8.
2. Компиляторы C++ и FORTRAN. В целом, здесь есть два разумных варианта: GNU GCC и Intel C++/Fortran. Первый вариант бесплатный и присутствует в любом дистрибутиве GNU/Linux, второй коммерческий, скорость исполнения генерируемого кода которого чуть выше, а надежность ниже, лично я предпочитаю GCC (хотя во многих научных коллективах принято использовать Intel, поскольку в стародавние времена качество их компиляторов значительно превосходило свободные от GNU).
3. Одна из реализаций Message Passing Interface, он же MPI (мы же хотим использовать все процессорные ядра, правильно?). Количество вариантов растет: среди свободных есть два - OpenMPI и MPICH, OpenMPI находится в большинстве репозиториев GNU/Linux, MPICH придется собирать самостоятельно из исходных кодов (его надежность и удобство в использовании, как показывает практика, несколько выше, чем у OpenMPI). Впрочем, при использовании компиляторов от Intel любой из этих реализаций MPI придется собирать самому. Но есть еще одна опция: коммерческий Intel MPI, который поставляется в кластерной версии Intel Studio и является вариацией на тему MVAPICH (японский MPICH).
4. Математические библиотеки BLAS, LAPACK, SCALAPACK. Тоже два варианта, от сообщества - OpenBLAS + SCALAPACK и от Intel - Math Kernel Libraries. Также существуют нетлибовские библиотеки, с которых, собственно, и началось существование рутин BLAS и LAPACK, но их рассматривать не будем ввиду довольно серьезного отставания в производительности от OpenBLAS и MKL. Здесь я бы порекомендовал использовать MKL, которые бесплатны и быстры. Для скачивания версии 2018.2.199 ткнуть здесь.

Из обязательного это всё. Также если хотим использовать скрипты на Python понадобится оный версии 2.7; CUDA для ускорения расчетов CCSD(T) лишней не будет.

Далее последовательность действий такова:
1. Открываем терминал, распаковываем NWChem в любое удобное место и идем туда.
2. Сохраняем скрипт с набором переменных прямо в директорию NWChem под каким угодно именем, у меня config.sh

Код: Выделить всё

#===================================================#
#                   GA Settings                     #
#===================================================#

export CC=gcc
export CXX=g++
export FC=gfortran
export F77=gfortran

export USE_MPI=yes

export MPI_LOC=/usr
export MPI_LIB=$MPI_LOC/lib
export MPI_INCLUDE=$MPI_LOC/include
export LIBMPI="-lmpifort -lmpi"

export ARMCI_NETWORK=MPI-TS
export MSG_COMMS=MPI

#===================================================#
#                   NWChem Settings                 #
#===================================================#

export TARGET=LINUX64
export NWCHEM_TARGET=LINUX64
export NWCHEM_MODULES="all nwxc python"
export NWCHEM_TOP=$(pwd)
export NWCHEM_LONG_PATHS=Y
export NWCHEM_MPIF_WRAP=$MPI_LOC/bin/mpifort
export NWCHEM_MPIC_WRAP=$MPI_LOC/bin/mpicc
export NWCHEM_MPICXX_WRAP=$MPI_LOC/bin/mpicxx

export LARGE_FILES=TRUE
export USE_NOFSCHECK=TRUE
export MRCC_METHODS=TRUE

#===================================================#
#                   Python Settings                 #
#===================================================#

export PYTHONVERSION=2.7
export PYTHONHOME=/usr
export PYTHONLIBTYPE=so
export USE_PYTHON64=y

#===================================================#
#               BLAS/LAPACK Settings                #
#===================================================#

export BLAS_SIZE=8
export LAPACK_SIZE=8
export SCALAPACK_SIZE=8
export HAS_BLAS=yes
export USE_SCALAPACK=y
export MKLLIB=$MKLROOT/lib/intel64
export MKLINC=$MKLROOT/include
export BLASOPT="-L$MKLLIB -lmkl_gf_ilp64 -lmkl_core -lmkl_sequential -lpthread -lm"
export LAPACK_LIB="-L$MKLLIB -lmkl_gf_ilp64 -lmkl_core -lmkl_sequential -lpthread -lm"
export SCALAPACK="-L$MKLLIB -lmkl_scalapack_ilp64 -lmkl_gf_ilp64 -lmkl_core -lmkl_sequential -lmkl_blacs_intelmpi_ilp64 -lpthread -lm"

#===================================================#
#                   CUDA Settings                   #
#===================================================#

#export TCE_CUDA=y
#export CUDA_HOME=/opt/cuda
#export CUDA_LIBS="-L$CUDA_HOME/lib64 -lcudart"
#export CUDA_INCLUDE="-I. -I$CUDA_HOME/include"
Внимание! Самая важная часть! Этот скрипт можно использовать без изменений, если (а) используем GNU GCC, (б) корневая директория MPICH - /usr, (в) Python находится там же, (г) установлены MKL, и переменная MKLROOT задана.

Если хотите скомпилировать NWChem с помощью Intel FORTRAN, то делаем следующие изменения:

Код: Выделить всё

export CC=icc
export CXX=icpc
export FC=ifort
export F77=ifort
# ...
export MPI_LOC=/opt/intel/composerxe/linux/mpi/intel64
# ...
export LIBMPI="-lmpifort -lmpi -lmpigi"
# ...
export NWCHEM_MPIF_WRAP=$MPI_LOC/bin/mpiifort
export NWCHEM_MPIC_WRAP=$MPI_LOC/bin/mpiicc
export NWCHEM_MPICXX_WRAP=$MPI_LOC/bin/mpiicpc
# ...
export BLASOPT="-L$MKLLIB -lmkl_intel_ilp64 -lmkl_core -lmkl_sequential -lpthread -lm"
export LAPACK_LIB="-L$MKLLIB -lmkl_intel_ilp64 -lmkl_core -lmkl_sequential -lpthread -lm"
export SCALAPACK="-L$MKLLIB -lmkl_scalapack_ilp64 -lmkl_intel_ilp64 -lmkl_core -lmkl_sequential -lmkl_blacs_intelmpi_ilp64 -lpthread -lm"
При использовании OpenMPI и GCC изменения носят следующий характер:

Код: Выделить всё

export MPI_LIB=$MPI_LOC/lib/openmpi
# ...
export LIBMPI="-lmpi_usempif08 -lmpi_usempi_ignore_tkr -lmpi_mpifh -lmpi"
# ...
export SCALAPACK="-L$MKLLIB -lmkl_scalapack_ilp64 -lmkl_gf_ilp64 -lmkl_core -lmkl_sequential -lmkl_blacs_openmpi_ilp64 -lpthread -lm"
По возможности раскомментируем CUDA Settings. Возможность присутствует, если есть видеокарта NVIDIA, проприетарные драйвера, а компилятор - GCC (с Intel C++ работоспособность не гарантируется).

3. Задаем переменные из скрипта и идем в директорию с исходниками:

Код: Выделить всё

source config.sh && cd src
Начинаем собирать код:

Код: Выделить всё

make nwchem_config && make -j1
При возможности вместо "1" нужно указать количество свободных ядер процессора. После завершения сборки делаем косметические изменения бинарных файлов для упрощения жизни в дальнейшем:

Код: Выделить всё

../contrib/getmem.nwchem
Основная часть закончена, исполняемые файлы есть.

4. Проверяем то, что получилось.

Код: Выделить всё

cd ../QA
./doafewqmtests.mpi # Через пробел указать количество доступных ядер процессора
Какое-то количество тестов провалится, главное, чтобы не большинство. По каждому провалу идем смотреть, что посчиталось неправильно, если косяк парсера - черт с ним, если нет, думаем, что не так собрали.

5. Запускать NWChem при заданной переменной NWCHEM_TOP на четырех ядрах так:

Код: Выделить всё

mpirun -np 4 $NWCHEM_TOP/bin/LINUX64/nwchem INPUT | tee OUT
Вот, вроде бы, и всё. Если будут замечания, внесу изменения в пост.
Последний раз редактировалось mizuchi Вс мар 25, 2018 6:29 pm, всего редактировалось 1 раз.

mizuchi
Сообщения: 95
Зарегистрирован: Ср фев 23, 2011 5:10 pm

Re: Краткое руководство по установке NWChem

Сообщение mizuchi » Вс мар 25, 2018 6:27 pm

Если будут пожелания, сделаю еще что-то подобное по поводу CP2K.

Аватара пользователя
EvgeniX
Сообщения: 2780
Зарегистрирован: Пт апр 27, 2007 5:32 am

Re: Краткое руководство по установке NWChem

Сообщение EvgeniX » Вс мар 25, 2018 7:03 pm

mizuchi писал(а):
Вс мар 25, 2018 6:27 pm
Если будут пожелания, сделаю еще что-то подобное по поводу CP2K.
Было бы интересно. И про CFour.

mizuchi
Сообщения: 95
Зарегистрирован: Ср фев 23, 2011 5:10 pm

Re: Краткое руководство по установке NWChem

Сообщение mizuchi » Вс мар 25, 2018 8:24 pm

EvgeniX писал(а):
Вс мар 25, 2018 7:03 pm
Было бы интересно. И про CFour.
Окей, с cfour дела проще, чем с NWChem.

Аватара пользователя
Гесс
Сообщения: 13063
Зарегистрирован: Ср фев 15, 2012 11:19 pm

Re: Краткое руководство по установке NWChem

Сообщение Гесс » Вс мар 25, 2018 9:58 pm

Cfour я когда то ставил и даже параллелил, надо позырить на сервер, может посоучавствую.

Ответить

Вернуться в «квантовая химия и моделирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 23 гостя