# Молекулярная динамика GROMACS

> **Ускоренные на GPU молекулярно-динамические симуляции — от сворачивания белков до поиска лекарств**

GROMACS (GROningen MAchine for Chemical Simulations) — самый широко используемый в мире пакет для молекулярно-динамического моделирования. Первоначально разработанный в Университете Гронингена, сейчас поддерживается глобальным сообществом и является рабочей лошадкой лабораторий вычислительной химии и структурной биологии по всему миру.

С ускорением на GPU GROMACS может моделировать системы из миллионов атомов с скоростями, которые на оборудовании только с CPU заняли бы недели. Доступная аренда GPU от Clore.ai делает масштабные MD-симуляции доступными для отдельных исследователей и небольших лабораторий.

***

## Что можно смоделировать?

* **Сворачивание и динамика белков** — наблюдать конформационные изменения в наносекундах и микросекундах
* **Связывание лекарств с белками** — вычислять свободные энергии связывания для открытия лекарств
* **Симуляции мембран** — липидные билипиды, мембранные белки, ионный транспорт
* **Взаимодействия белок–белок** — изучать формирование комплексов и динамику интерфейсов
* **Материаловедение** — полимеры, наночастицы, модели воды
* **Вычисления свободной энергии** — алхимические трансформации, PME

***

## Требования

* Учетная запись Clore.ai с арендой GPU
* Базовые знания командной строки Linux
* Файлы молекулярной системы (топология + координаты), или используйте примерные системы
* Необязательно: локально установленный GROMACS для визуализации (VMD, Pymol)

***

## Почему стоит использовать GROMACS с ускорением на GPU?

GROMACS с выгрузкой на GPU обеспечивает значительное ускорение:

| Размер системы | Только CPU (нс/день) | Один A100 (нс/день) | Ускорение |
| -------------- | -------------------- | ------------------- | --------- |
| 25K атомов     | \~50                 | \~800               | \~16x     |
| 100K атомов    | \~15                 | \~400               | \~27x     |
| 500K атомов    | \~3                  | \~150               | \~50x     |
| 1M атомов      | \~1                  | \~80                | \~80x     |

{% hint style="success" %}
**Ускорение на GPU наиболее полезно для больших систем (>100K атомов).** Для небольших тестовых систем производительность на CPU может быть сопоставимой из‑за накладных расходов на передачу данных.
{% endhint %}

***

## Шаг 1 — Арендуйте GPU на Clore.ai

1. Перейдите на [clore.ai](https://clore.ai) → **Маркетплейс**
2. Фильтровать по GPU: **A100, RTX 4090 или RTX 3090** рекомендуется
3. Для больших систем (>500K атомов): выбирайте A100 40GB или 80GB
4. Для стандартных симуляций: RTX 4090 или RTX 3090 предлагают отличное соотношение цена/качество

**Рекомендуемые характеристики:**

* GPU: A100 40GB или RTX 4090
* CPU: 16+ ядер (GROMACS использует многопоточность для несвязанных взаимодействий)
* RAM: 32GB+
* Диск: 50GB+ (траектории могут быть большими)

***

## Шаг 2 — Развертывание контейнера GROMACS

Используйте официальный HPC-образ GROMACS от NVIDIA — он оптимизирован для GPU NVIDIA с поддержкой CUDA:

**Docker-образ:**

```
nvcr.io/hpc/gromacs:2023.2
```

**Открытые порты:**

```
22
```

**Переменные окружения:**

```
NVIDIA_VISIBLE_DEVICES=all
NVIDIA_DRIVER_CAPABILITIES=compute,utility
GMX_GPU_DD_COMMS=true
GMX_GPU_PME_PP_COMMS=true
GMX_FORCE_UPDATE_DEFAULT_GPU=true
```

{% hint style="info" %}
**Переменные окружения NVIDIA для GROMACS:**

* `GMX_GPU_DD_COMMS=true` — включает коммуникации декомпозиции доменов на GPU
* `GMX_GPU_PME_PP_COMMS=true` — включает коммуникации PME-PP на GPU
* `GMX_FORCE_UPDATE_DEFAULT_GPU=true` — принудительно обновляет координаты на GPU (значительное ускорение)
  {% endhint %}

***

## Шаг 3 — Подключитесь и проверьте

```bash
ssh root@<server-ip> -p <ssh-port>

# Проверить версию GROMACS
gmx --version

# Проверить доступность GPU
nvidia-smi

# Убедиться, что GROMACS видит GPU
gmx mdrun -h 2>&1 | grep -i gpu
```

Ожидаемый вывод от `gmx --version` должен показать:

```
Версия GROMACS: 2023.2
Версия CUDA: 11.x или 12.x
Поддержка GPU: CUDA
```

***

## Шаг 4 — Подготовьте вашу систему

### Использование примерной системы (лизоцим в воде)

Это классическая учебная система GROMACS — идеально подходит для тестирования вашей настройки:

```bash
# Создать рабочую директорию
mkdir -p /workspace/lysozyme && cd /workspace/lysozyme

# Загрузить структуру лизоцима в формате PDB
wget https://files.rcsb.org/download/1AKI.pdb -O 1AKI.pdb

# Удалить молекулы воды из кристаллической структуры
grep -v HOH 1AKI.pdb > 1AKI_clean.pdb

# Сгенерировать топологию с использованием поля сил AMBER99SB
gmx pdb2gmx \
    -f 1AKI_clean.pdb \
    -o processed.gro \
    -water spce \
    -ff amber99sb-ildn
```

При запросе выбора поля сил выберите `amber99sb-ildn` (обычно опция 6).

***

## Шаг 5 — Построение симуляционной коробки

```bash
# Определить симуляционную коробку (додекаэдр, 1.0 нм от белка)
gmx editconf \
    -f processed.gro \
    -o boxed.gro \
    -c \
    -d 1.0 \
    -bt dodecahedron

# Солватировать коробку водой
gmx solvate \
    -cp boxed.gro \
    -cs spc216.gro \
    -o solvated.gro \
    -p topol.top

# Добавить ионы для нейтрализации заряда
# Сначала создать tpr-файл для добавления ионов
gmx grompp \
    -f /usr/local/gromacs/share/gromacs/top/em.mdp \
    -c solvated.gro \
    -p topol.top \
    -o ions.tpr

# Добавить Na+ и Cl- ионы (0.15M NaCl)
gmx genion \
    -s ions.tpr \
    -o ionized.gro \
    -p topol.top \
    -pname NA \
    -nname CL \
    -neutral \
    -conc 0.15
# При запросе выбрать группу 13 (SOL)
```

***

## Шаг 6 — Энергетическая минимизация

```bash
# Создать MDP-файл для энергетической минимизации
cat > em.mdp << 'EOF'
; Параметры энергетической минимизации
integrator      = steep         ; Метод наискорейшего спуска для минимизации
emtol           = 1000.0        ; Остановиться, когда макс. сила < 1000 кДж/моль/нм
emstep          = 0.01          ; Начальный шаг
nsteps          = 50000         ; Максимальное число шагов минимизации
nstlist         = 1
cutoff-scheme   = Verlet
ns_type         = grid
coulombtype     = PME
rcoulomb        = 1.0
rvdw            = 1.0
pbc             = xyz
EOF

# Подготовить TPR для энергетической минимизации
gmx grompp \
    -f em.mdp \
    -c ionized.gro \
    -p topol.top \
    -o em.tpr

# Запустить энергетическую минимизацию на GPU
gmx mdrun \
    -v \
    -deffnm em \
    -gpu_id 0 \
    -ntmpi 1 \
    -ntomp 8

# Проверить, что энергия сошла
gmx energy -f em.edr -o em_potential.xvg
# Выбрать 10 (Potential), затем 0 для выхода
```

***

## Шаг 7 — NVT-эквилибровка (температура)

```bash
cat > nvt.mdp << 'EOF'
; NVT-эквилибровка
define              = -DPOSRES      ; Ограничения положений
integrator          = md            ; Интегратор Leap-frog
nsteps              = 50000         ; 100 пс (шаг 2 фс)
dt                  = 0.002         ; шаг 2 фс
nstxout             = 500
nstvout             = 500
nstenergy           = 500
nstlog              = 500
continuation        = no
constraint_algorithm = lincs
constraints         = h-bonds
lincs_iter          = 1
lincs_order         = 4
cutoff-scheme       = Verlet
ns_type             = grid
nstlist             = 10
rcoulomb            = 1.0
rvdw                = 1.0
DispCorr            = EnerPres
coulombtype         = PME
pme_order           = 4
fourierspacing      = 0.16
tcoupl              = V-rescale
tc-grps             = Protein Non-Protein
tau_t               = 0.1 0.1
ref_t               = 300 300
pcoupl              = no
pbc                 = xyz
EOF

gmx grompp \
    -f nvt.mdp \
    -c em.gro \
    -r em.gro \
    -p topol.top \
    -o nvt.tpr

gmx mdrun \
    -deffnm nvt \
    -gpu_id 0 \
    -ntmpi 1 \
    -ntomp 8 \
    -nb gpu \
    -bonded gpu \
    -pme gpu \
    -update gpu
```

***

## Шаг 8 — NPT-эквилибровка (давление)

```bash
cat > npt.mdp << 'EOF'
; NPT-эквилибровка
define              = -DPOSRES
integrator          = md
nsteps              = 50000
dt                  = 0.002
nstxout             = 500
nstvout             = 500
nstenergy           = 500
nstlog              = 500
continuation        = yes
constraint_algorithm = lincs
constraints         = h-bonds
cutoff-scheme       = Verlet
ns_type             = grid
nstlist             = 10
rcoulomb            = 1.0
rvdw                = 1.0
DispCorr            = EnerPres
coulombtype         = PME
tcoupl              = V-rescale
tc-grps             = Protein Non-Protein
tau_t               = 0.1 0.1
ref_t               = 300 300
pcoupl              = Parrinello-Rahman
pcoupltype          = isotropic
tau_p               = 2.0
ref_p               = 1.0
compressibility     = 4.5e-5
refcoord_scaling    = com
pbc                 = xyz
EOF

gmx grompp \
    -f npt.mdp \
    -c nvt.gro \
    -r nvt.gro \
    -t nvt.cpt \
    -p topol.top \
    -o npt.tpr

gmx mdrun \
    -deffnm npt \
    -gpu_id 0 \
    -ntmpi 1 \
    -ntomp 8 \
    -nb gpu \
    -bonded gpu \
    -pme gpu \
    -update gpu
```

***

## Шаг 9 — Производственный MD-прогон

```bash
cat > md.mdp << 'EOF'
; Производственный MD-прогон
integrator          = md
nsteps              = 5000000      ; 10 нс (шаг 2 фс)
dt                  = 0.002
nstxout-compressed  = 5000        ; Сохранять координаты каждые 10 пс
nstenergy           = 5000
nstlog              = 5000
continuation        = yes
constraint_algorithm = lincs
constraints         = h-bonds
cutoff-scheme       = Verlet
ns_type             = grid
nstlist             = 10
rcoulomb            = 1.0
rvdw                = 1.0
DispCorr            = EnerPres
coulombtype         = PME
tcoupl              = V-rescale
tc-grps             = Protein Non-Protein
tau_t               = 0.1 0.1
ref_t               = 300 300
pcoupl              = Parrinello-Rahman
pcoupltype          = isotropic
tau_p               = 2.0
ref_p               = 1.0
compressibility     = 4.5e-5
pbc                 = xyz
EOF

gmx grompp \
    -f md.mdp \
    -c npt.gro \
    -t npt.cpt \
    -p topol.top \
    -o md.tpr

# Производственный прогон с полной выгрузкой на GPU
gmx mdrun \
    -deffnm md \
    -gpu_id 0 \
    -ntmpi 1 \
    -ntomp 16 \
    -nb gpu \
    -bonded gpu \
    -pme gpu \
    -update gpu \
    -v
```

{% hint style="info" %}
**Мониторинг прогресса в реальном времени:**

```bash
tail -f md.log | grep -E "(ns/day|Step|Time)"
```

{% endhint %}

***

## Шаг 10 — Анализ

### Базовый анализ траектории

```bash
# RMSD (устойчивость каркаса во времени)
gmx rms \
    -s md.tpr \
    -f md.xtc \
    -o rmsd.xvg \
    -tu ns
# Выбрать 4 (Backbone) для эталонной и подогнанной групп

# RMSF (гибкость по остаткам)
gmx rmsf \
    -s md.tpr \
    -f md.xtc \
    -o rmsf.xvg \
    -res
# Выбрать 4 (Backbone)

# Радиус гироскопа (компактность)
gmx gyrate \
    -s md.tpr \
    -f md.xtc \
    -o gyrate.xvg
# Выбрать 1 (Protein)

# Водородные связи
gmx hbond \
    -s md.tpr \
    -f md.xtc \
    -num hbonds.xvg
# Выбрать 1 (Protein) как для донора, так и для акцептора
```

### Построение графиков из XVG-файлов

```python
import numpy as np
import matplotlib.pyplot as plt

# Загрузить данные RMSD
data = np.loadtxt('rmsd.xvg', comments=['@', '#'])
time = data[:, 0]      # в нс
rmsd = data[:, 1] * 10 # преобразовать нм в ангстремы

plt.figure(figsize=(10, 4))
plt.plot(time, rmsd)
plt.xlabel('Time (ns)')
plt.ylabel('RMSD (Å)')
plt.title('Backbone RMSD')
plt.grid(True, alpha=0.3)
plt.savefig('rmsd_plot.png', dpi=150, bbox_inches='tight')
```

### Передача результатов

```bash
# С вашей локальной машины:
rsync -avz -e "ssh -p <ssh-port>" \
    root@<server-ip>:/workspace/lysozyme/ \
    ./md_results/
```

***

## Мульти‑GPU симуляции

Для очень больших систем используйте несколько GPU с декомпозицией доменов:

```bash
# Прогон на 4 GPU (подстройте -ntmpi под количество GPU)
gmx mdrun \
    -deffnm md \
    -gpu_id 0123 \
    -ntmpi 4 \
    -ntomp 4 \
    -nb gpu \
    -bonded gpu \
    -pme gpu \
    -npme 1 \
    -update gpu \
    -v
```

{% hint style="warning" %}
**Эффективность на нескольких GPU:** Масштабирование за пределами 4 GPU обычно полезно только для систем >1 миллиона атомов. Для меньших систем один высокопроизводительный GPU экономически выгоднее на Clore.ai.
{% endhint %}

***

## Устранение неполадок

### Фатальная ошибка: нет выгрузки на GPU

```bash
# Проверить, работает ли CUDA
nvidia-smi
python3 -c "import ctypes; ctypes.CDLL('libcuda.so')"

# Принудительно перейти на CPU для тестирования
gmx mdrun -deffnm md -ntmpi 1 -ntomp 16
```

### Система «взрывается» / отрицательные объёмы

Обычно это указывает на проблему с энергетической минимизацией:

```bash
# Запустить более длинную минимизацию с меньшим шагом
# Отредактировать em.mdp: emstep = 0.001, emtol = 100
```

### Медленная работа

```bash
# Проверить загрузку GPU во время прогона
watch -n 1 nvidia-smi

# Настроить параметры выгрузки на GPU
gmx mdrun -deffnm md -nb gpu -pme gpu -bonded gpu -update gpu \
    -ntmpi 1 -ntomp $(nproc)
```

***

## Распространённые поля сил

| Поле сил         | Лучше всего для                |
| ---------------- | ------------------------------ |
| `amber99sb-ildn` | Белки, общее применение        |
| `charmm36m`      | Белки + липидные мембраны      |
| `gromos54a7`     | Молекулы, похожие на лекарства |
| `oplsaa`         | Органические молекулы, липиды  |

***

## Оценка стоимости

| Симуляция       | Размер системы | GPU      | Время   | Стоимость |
| --------------- | -------------- | -------- | ------- | --------- |
| 10 нс белок     | 25K атомов     | RTX 3090 | \~2ч    | \~$0.60   |
| 100 нс белок    | 25K атомов     | A100 40G | \~6ч    | \~$4.50   |
| 100 нс мембрана | 200K атомов    | A100 80G | \~12ч   | \~$9      |
| 1 μс белок      | 25K атомов     | A100 80G | \~3 дня | \~$55     |

***

## Дополнительные ресурсы

* [Документация GROMACS](https://manual.gromacs.org/)
* [Учебные материалы GROMACS (Джастин Лемкул)](http://www.mdtutorials.com/gmx/)
* [Контейнер NVIDIA HPC GROMACS](https://catalog.ngc.nvidia.com/orgs/hpc/containers/gromacs)
* [GROMACS на GitHub](https://github.com/gromacs/gromacs)
* [Параметры поля сил Amber](https://ambermd.org/)
* [CHARMM-GUI Membrane Builder](https://www.charmm-gui.org/)

***

*Запуск GROMACS на Clore.ai позволяет исследователям получить доступ к GPU A100 и RTX 4090 за долю стоимости AWS или Azure — что делает долгие MD‑симуляции экономически жизнеспособными для академических лабораторий и отдельных исследователей.*

***

## Рекомендации Clore.ai по GPU

| Сценарий использования               | Рекомендуемый GPU | Примерная стоимость на Clore.ai |
| ------------------------------------ | ----------------- | ------------------------------- |
| Разработка/Тестирование              | RTX 3090 (24GB)   | \~$0.12/gpu/hr                  |
| Стандартные MD-симуляции             | RTX 4090 (24GB)   | \~$0.70/gpu/hr                  |
| Большие системы / длительные прогоны | A100 80GB         | \~$1.20/gpu/hr                  |

> 💡 Все примеры в этом руководстве можно развернуть на [Clore.ai](https://clore.ai/marketplace) GPU-серверах. Просматривайте доступные GPU и арендуйте по часам — без обязательств, с полным root-доступом.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.clore.ai/guides/guides_v2-ru/nauka-i-issledovaniya/gromacs.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
