NAMD с ускорением на GPU

Ознакомьтесь с Руководством для быстрого запуска и начните работу.

NAMD

NAMD (NAnoscale Molecular Dynamics) – это приложение молекулярной динамики, предназначенное для проведения высокопроизводительного моделирования крупных биомолекулярных систем. Разработанный Университетом штата Иллинойс в Урбана-Шампейн (UIUC), NAMD распространяется бесплатно.

Последняя версия NAMD 2.11, как правило, работает в 7 раз быстрее на графических процессорах NVIDIA по сравнению с CPU-системами*, что позволяет проводить моделирование молекулярной динамики за несколько часов, а не дней. Эта версия также до 2-х раз быстрее NAMD 2.10, что помогает пользователям сэкономить на стоимости оборудования, значительно ускоряя их научные открытия.

*Сервер с 2 CPU, Intel E5-2698 v3@2,3 ГГц, NVIDIA Tesla K80 с отключенным режимом ECC, включен режим Autoboost; набор данных STMV

NAMD получает на GPU ускорение в 7 раз

Установка

Системные требования

NAMD портируется на любую платформу параллельных вычислений с современнным компилятором C++. Перкомпилированные бинарные версии NAMD 2.11 с поддержкой ускорения на GPU доступны для Windows, Mac OS X и Linux. NAMD использует как GPU, так и CPU, поэтому мы рекомендуем использовать относительно современный процессор, чтобы добиться наилучшей производительности в приложении. 

Инструкции по загрузке и установке

Разработчики NAMD предоставляют полные, оптимизированные двоичные файлы для всех распространенных платформ, на которые портирована программа. Бинарные файлы можно скачать на странице загрузки NAMD.

Нет необходимости компилировать NAMD, если вы не хотите добавлять или изменять функции, повышать производительность, создавая версию Charm ++, которая использует специальное сетевое оборудование, или если вы настроили свою версию NAMD. Полные инструкции по сборке NAMD содержатся в примечаниях к выпуску, доступны на веб-сайте NAMD и включены во все дистрибутивы

КРАТКОЕ ОПИСАНИЕ ПРОЦЕССА КОМПИЛЯЦИИ

1. Скачайте исходный код NAMD.

2. Извлеките пакет и Charm++

tar xf NAMD_2.11_Source.tar.gz
cd NAMD_2.11_Source
tar xf charm-6.7.0.tar

3. Скачайте и установите TCL и FFTW.

Смотрите примечания к выпуску соответствующей версии библиотек.

wget http://www.ks.uiuc.edu/Research/namd/libraries/fftw-linux-x86_64.tar.gz
wget http://www.ks.uiuc.edu/Research/namd/libraries/tcl8.5.9-linux-x86_64.tar.gz
wget http://www.ks.uiuc.edu/Research/namd/libraries/tcl8.5.9-linux-x86_64-threaded.tar.gz
tar xzf fftw-linux-x86_64.tar.gz
mv linux-x86_64 fftw
tar xzf tcl*-linux-x86_64.tar.gz
tar xzf tcl*-linux-x86_64-threaded.tar.gz
mv tcl*-linux-x86_64 tcl
mv tcl*-linux-x86_64-threaded tcl-threaded

4. Соберите Charm++

Скрипт сборки имеет интерактивный режим, вы также можете указать параметры в командной строке, как это описано ниже.

cd charm-6.7.0
./build charm++ {arch} {C compiler} {Fortran compiler} {other options} 

Для {arch} необходимо использовать один из следующих параметров: 'verbs-linux-x86_64' для конфигураций с несколькими узлами, 'multicore-linux64' - для системы с одним узлом. Другие параметры не требуются, но рекомендуются для достижения наилучшей производительности: «smp» для использования SMP для многоузловых сборок (Нажмите здесь, чтобы узнать подробнее), '--with-production', чтобы использовать оптимизацию.

Пример 1.  Сборка Charm ++ для многоузловой конфигурации с использованием компиляторов Intel и SMP со всеми оптимизациями производства:

./build charm++ verbs-linux-x86_64 icc smp --with-production 

Пример 2. Сборка Charm ++ для одноузловой конфигурации с использованием компиляторов Intel со всеми оптимизациями производства.

./build charm++ multicore-linux64 icc --with-production 

5. Соберите NAMD.

Убедитесь, что вы находитесь с основном каталоге NAMD, затем настройте и запустите make:

./config {namd-arch} --charm-arch {charm-arch} {opts}
cd {namd-arch}
make -j4 

Для {namd-arch} мы рекомендуем 'Linux-x86_64-icc', {charm-arch} должен быть тем же, который вы использовали при сборке Charm++, {opts} должны иметь значение '--with-cuda', чтобы поддерживать ускорение на GPU; для вычислений только на CPU выставьте значение '--without-cuda'. Каталог сборки может быть расширен, например, с помощью Linux-x86_64.cuda. Это поможет управлять различными сборками NAMD. Обратите внимание, что расширение не имеет никакого значения: './config Linux-x86_64.cuda' не будет означать сборки CUDA, пока вы не добавите '--with-cuda'.

Опциональные флаги для сборки CUDA:
a. --cuda-prefix может быть использован для установки корректного пути к CUDA toolkit;
b. --cuda-gencode позволяет добавлять разные архитектуры GPU.

Пример 1. Сборка NAMD для архитектуры x86_64 с использованием компиляторов Intel, с ускорением на GPU и указанным путем CUDA для одного узла:

./config Linux-x86_64-icc --charm-arch multicore-linux64-icc --with-cuda --cuda-prefix /usr/local/cuda 

>Пример 2.  Сборка NAMD для архитектуры x86_64 с использованием компиляторов Intel, с ускорением на GPU и указанным путем CUDA для нескольких узлов:

./config Linux-x86_64-icc --charm-arch verbs-linux-x86_64-smp-icc --with-cuda --cuda-prefix /usr/local/cuda 

Пример 3. Сборка NAMD для архитектуры x86_64 с использованием компиляторов Intel без ускорения на GPU для нескольких узлов:


./config Linux-x86_64-icc --charm-arch verbs-linux-x86_64-smp-icc 

Запуск задач

Перед запуском GPU-ускоренной версии NAMD, установите последние версии драйверов NVIDIA для вашего GPU. Для запуска NAMD вам необходимо выполнить «namd2», а для запуска нескольких узлов вам также понадобится исполняемый файл charmrun. Не забудьте указать параметры совместимости CPU, как описано ниже.

ПАРАМЕТРЫ КОМАНДНОЙ СТРОКИ

Общая командная строка для запуска NAMD на одноузловой системе:

namd2 {namdOpts} {inputFile}

На системе с несколькими узлами NAMD необходимо запускать с charmrun, как указано ниже:

charmrun {charmOpts} namd2 {namdOpts} {inputFile}

{charmOpts}

  • ++nodelist {nodeListFile} – необходим список узлов
  • Charm ++ также поддерживает альтернативный параметр ++ mpiexec, если вы используете систему очередей.
  • ++p $totalPes - specifies the total number of PE threads
  • Это общее число рабочих потоков (иными словами, PE-потоков). Мы рекомендуем приравнивать это количество к (#TotalCPUCores - #TotalGPUs).
  • ++ppn $pesPerProcess' - количество PE-потоков на процесс
    • Рекомендуем приравнивать это количество к #ofCoresPerNode/#ofGPUsPerNode – 1
    • Это необходимо для высвобождения одного из потоков на процесс для передачи данных. Не забудьте указать +commap ниже
    • Общее число процессов равняется $totalPes/$pesPerProcess
    • При использовании рекомендуемого значения для этого параметра каждый процесс будет использовать один графический процессор

{namdOpts}

  • NAMD наследует '++p' и '++ppn' как '+p' и '+ppn', если устновлено {charmOpts}
  • Для сборок для вычислений на нескольких узлах используйте '+p'.
  • При запуске на нескольких узлах рекомендуется использовать не более одного процесса на один GPU. Для получения большего количества потоков связи рекомендуется запускать ровно один процесс на один GPU. При вычислениях на одном узле можно использовать несколько графических процессоров на каждый процесс.
  • Параметры привязки CPU (смотрите руководство пользователя):
    • +setcpuaffinity' используется, чтобы потоки не перемещались
    • +pemap #-#' – сопоставляет вычислительные потоки с ядрами CPU
    • +commap #-#' – устанавливает ранг для коммуникационных потоков
    • Пример для двухсокетной конфигурации с 16 ядрами на сокет:
      • +setcpuaffinity +pemap 1-15,17-31 +commap 0,16
  • Параметры GPU (смотрите руководство пользователя):
    • '+devices {CUDA IDs}' - опционально указывает ID устройств для использования в NAMD
    • Если устройства подключены к сокету не по порядку, рекомендуется задать этот параметр, чтобы гарантировать, что сокеты используют свои напрямую подключенные GPU, например, '+devices 2,3,0,1'

Мы рекомендуем всегда проверять сообщения о запуске в NAMD, чтобы убедиться, что параметры установлены правильно. Кроме того, параметр verbose ++ может предоставить более подробное описание о выполнения задач, в которых используется charmrun. Запуск системных инструментов может помочь убедиться, что потоки сопоставляются необходимым образом. 

{inputFile}

Используйте соответствующий входной файл * .namd из одного из наборов данных, который можно найти в следующем подразделе.

Пример 1. Запустите ApoA1 на 1 узле с 2-мя GPU и 2-мя CPU (всего 20 ядер) и сборку NAMD для вычисления на нескольких ядрах:

./namd2 +p 20 +devices 0,1 apoa1.namd

Пример 2. Запустите STMV на 2-х узлах, каждый из которых имеет 2 GPU и 2 CPU (всего 20 ядер) и сборку SMP NAMD (обратите внимание, что мы запускаем 4 процесса, каждый из которых контролирует 1 GPU):

charmrun ++p 36 ++ppn 9 ./namd2 ++nodelist $NAMD_NODELIST +setcpuaffinity +pemap 1-9,11-19 +commap 0,10 +devices 0,1 stmv.namd

Обратите внимание, что по умолчанию команда "rsh" используется для запуска namd2 на каждом узле, указанном в файле nodelist Вы можете изменить это с помощью переменной окружения CONV_RSH, то есть использовать ssh вместо rsh и запустить (подробности смотрите в примечаниях к выпуску NAMD).

Тесты производительности

В этом разделе демонстрируется ускорение обработки некоторых наборов данных на GPU. Обратите внимание, что вам может потребоваться обновить входные файлы, чтобы уменьшить выходную энергию / частоту синхронизации. Тесты перечислены в порядке возрастания числа атомов. Рекомендуется запускать большие тестовые примеры, такие как STMV, на системах с несколькими GPU.

Аполипопротеин A1 (APOA1)
# of Atoms
92,224
Time Steps
500
Output Energies
100
Output Timing
100

APOA1

Аполипопротеин A1 (ApoA1) является основным белковым компонентом липопротеинов высокой плотности (ЛПВП) в крови и играет определенную роль в метаболизме липидов Тест ApoA1 состоит из 92224 атомов и является стандартным кросс-платформенным тестом производительности NAMD в течение многих лет.

АТФ-синтаза
# of Atoms
327,506
Time Steps
500
Output Energies
100
Output Timing
100

АТФАЗА

АТФ-синтаза представляет собой фермент, который синтезирует аденозинтрифосфат (АТФ), форму сохранения химической энергии в клетках. Тест F1-ATФаза представляет собой модель субъединицы компонента F1 АТФ-синтазы.

Спутниковый вирус табачной мозаики (SMTV)
# of Atoms
1,066,628
Time Steps
500
Output Energies
100
Output Timing
100

STMV

Спутниковый вирус табачной мозаики (STMV ) представляет собой маленький, икосаэдрический вирус растений, который который ухудшает симптомы заражения вирусом табачной мозаики (TMV). SMTV является отличным кандидатом для исследований в области молекулярной динамики, поскольку имеет относительно маленький размер для вируса, и для его моделирования можно использовать традиционные методы молекулярной динамики на на рабочей станции или небольшом сервере.

ИНТЕРПРЕТАЦИЯ РЕЗУЛЬТАТОВ

Показателем производительности является «нс/день» (чем выше, тем лучше), но в лог-файле указывается как «дней / нс» (чем ниже, тем лучше). Обратите внимание, что большинство пользователей приложений для молекулярной динамики фокусируют свое внимание на показателе «нс / день», инвертированном значении «дней / нс». При проведении тестирования производительности рекомендуется использовать среднее значение этого показателя; частоту вывода можно контролировать в соответствующем входном файле * .namd. Из-за начальной балансировки нагрузки результатами «Начальное время» следует пренебрегать в пользу более поздних показателей «Контрольного времени».

Ожидаемая производительность

Ниже приведены результаты производительности для разных системных конфигураций с CPU и графическими процессорами NVIDIA Tesla для 1-4 узлов, соединенных при помощи 4xEDR InfiniBand.

ApoA1
F1ATPase
STMV

Рекомендованные системные конфигурации

Конфигурация аппаратного обеспечения

PC

Parameter
Specs

CPU Architecture

x86

System Memory

16-32GB

CPUs

2 (8+ CORES, 2+ GHz)

GPU Model

GeForce GTX TITAN X

GPUs

2-4

Servers

Parameter
Specs

CPU Architecture

x86

System Memory

32 GB

CPUs/Nodes

2 (8+ cores, 2+ GHz)

Total# of Nodes

1 – 10,000

GPU Model

NVIDIA Tesla® P100

GPUs/Nodes

2 – 4

Interconnect

InfiniBand

Конфигурация программаного обеспечения

Software stack

Parameter
Version

OS

CentOS 6.2

GPU Driver

352.68 or newer

CUDA Toolkit

7.5 or newer

Intel Compilers

2016.0.047

Соберите свою идеальную систему прямо сегодня.