GROMACS на GPU: MPI/NCCL и масштабирование

Задача страницы. Практический гайд по запуску и масштабированию GROMACS на облачных GPU: одноузловые и многоузловые конфигурации (MPI/UCX, опционально NCCL), offload PME/PP на GPU, настройки mdrun и .mdp, профили сети/диска, наблюдаемость и экономика (ns_per_day, Cost_per_ns). Страница — точка входа в ветку GROMACS.

TL;DR

  • GPU‑resident пайплайн: запускайте mdrun с offload’ом на GPU: -nb gpu -pme gpu -bonded gpu -update gpu, чтобы минимизировать CPU‑узкие места.
  • **Масштабирование: — Внутри узла (NVLink/NVSwitch): 1 MPI‑rank на GPU, OpenMP‑потоки на ядрах CPU. — Межузловое: CUDA‑aware MPI (UCX/RDMA); опционально NCCL для быстрых внутридомашних коллективных операций. См. https://cloudcompute.ru/solutions/multi-gpu/
  • PME и сетка: корректная fourierspacing и порядок pme-order дают максимум производительности; при -pme gpu dedicated PME‑ranks чаще не нужны.
  • I/O: вход/чекпоинты — на NVMe scratch; «тёплое» хранилище — источник/сток; архив — «холодное». См. https://cloudcompute.ru/solutions/storage-data/
  • Режимы: длинные tightly‑coupled прогоны — On‑Demand; массовые реплики/скрининг — Interruptible с чекпоинтами и чанк‑целями ≤ 120 с. См. https://cloudcompute.ru/solutions/interruptible-patterns/ и https://cloudcompute.ru/solutions/hpc/checkpoint-restart/
  • Профили GPU: 24 ГБ (Compact) — малые системы/реплики; 48 ГБ (Balanced) — база для продакшена; 80 ГБ (HQ) — крупные системы/длинные треки (и/или MIG для множества мелких).
  • Метрики: steps_per_s, ns_per_day, gpu_utilization, mpi_wait_ratio, rdma_rx/tx_mb_s, io_*, p50/p95 step_time. См. https://cloudcompute.ru/solutions/monitoring-logging/
  • Экономика: Cost_per_ns = Cost_total / ns_total; выбирайте N узлов по кривой эффективности Scale_eff(N) и бюджету. См. https://cloudcompute.ru/solutions/cost-planner/

Сценарии: когда и как масштабировать

Одноузловой multi‑GPU (быстрый старт)

  • 1 MPI‑rank на GPU, -nb gpu -pme gpu; OpenMP‑потоки на CPU (-ntomp k).
  • NVLink/NVSwitch уменьшает накладные расходы PME/PP обмена.
  • Чекпоинт каждые ~120 с для устойчивости к прерываниям.

Реплики/температурный ремд (ensemble)

  • Множество независимых прогонов (replicas/λ‑windows) → идеально для Interruptible.
  • Планирование: «1 процесс = 1 GPU», запись коротких чекпоинтов на NVMe, слияние результатов по окончании.

Многоузловой MPI (RDMA)

  • CUDA‑aware MPI + UCX/RDMA, 1 rank на GPU, pinning к NUMA.
  • PME на GPU → реже нужны PME‑ranks; при PME‑CPU используйте gmx tune_pme‑подход (если применимо).
  • Опционально NCCL для быстрых внутрисерверных коллективных операций (если включено в сборке).
  • Сетевой бюджет: низкий RTT, стабильная пропускная.

Архитектуры/пайплайны (ASCII) A) Одноузловой GPU‑resident

[Warm Storage] -> [Prefetch -> NVMe scratch] -> [gmx grompp] -> [gmx mdrun -nb gpu -pme gpu -bonded gpu -update gpu]
 | |
 [topol.tpr] [checkpoints -> warm/cold]

B) Многоузловой MPI + RDMA

[Warm Storage] -> [Stager] -> [NVMe per node]
 |
 +----------------------------+----------------------------+
 | (UCX/RDMA) |
 [Node #1: GPUxN] <============ Interconnect =============> [Node #M: GPUxN]
 | |
 srun/mpirun: 1 rank/GPU, CUDA-aware MPI, UCX/NCCL (opt) <---> All-to-all (PME/PP)

C) Реплики/скрининг (Interruptible)

[Replica params] -> [Job Queue] -> [GPU Workers (chunk ≤120 s, retries)] -> [Reducer/Analysis] -> [Publish]

Профили GPU/VRAM/ориентиры (A/H‑серии)

**Профиль** **VRAM** **Типовые системы/прогоны** **Режим** **Отн. throughput (≈)** **Примечания**
**24 ГБ (Compact)** 24 ГБ 50–300k атомов, короткие проды, реплики On‑Demand / Interruptible 1.0 Хорош для массовых независимых задач
**48 ГБ (Balanced)** 48 ГБ 0.3–2 млн атомов, стандартные кампании Оба 1.5–1.8 Базовый профиль кластера
**80 ГБ (HQ)** 80 ГБ 2–5 млн+ атомов, длинные треки/4+ GPU Оба 2.2–2.6 Возможен **MIG** для мелких реплик: https://cloudcompute.ru/solutions/mig/

Оценки относительны; фактическая производительность зависит от параметров .mdp, PME‑сетки и топологии.

Конфиги и скелеты

1) Шаблон .mdp (PME, Verlet, GPU‑friendly)

; mdp — GPU-friendly настройки
integrator = md
dt = 0.002 ; 2 fs
nsteps = 5000000 ; 10 ns (пример)
nstxout-compressed = 5000
nstvout = 0
nstenergy = 1000
nstlog = 1000
cutoff-scheme = Verlet
nstlist = 40
rlist = 1.0
vdwtype = Cut-off
rvdw = 1.0
coulombtype = PME
rcoulomb = 1.0
pme-order = 4
fourierspacing = 0.12
constraints = h-bonds
constraint-algorithm= lincs
lincs-iter = 1
lincs-order = 4
tcoupl = V-rescale
tc-grps = System
tau-t = 1.0
ref-t = 300
pcoupl = Parrinello-Rahman
pcoupltype = isotropic
tau-p = 5.0
ref-p = 1.0
compressibility = 4.5e-5

2) GROMACS подготовка и запуск (один узел, все GPU)

# Предобработка
gmx grompp -f md.mdp -c conf.gro -p topol.top -o topol.tpr -maxwarn 1
# GPU-resident mdrun (1 rank/GPU, OpenMP-потоки под CPU)
export OMP_NUM_THREADS=2
mpirun -np 4 --bind-to numa --map-by ppr:1:gpu 
 gmx_mpi mdrun -s topol.tpr -deffnm prod 
 -nb gpu -pme gpu -bonded gpu -update gpu -pin on -dlb yes -nstlist 40

3) Slurm (2 узла × 4 GPU, UCX/RDMA, опционально NCCL)

#!/bin/bash
#SBATCH -J gmx_prod
#SBATCH -N 2
#SBATCH --gpus-per-node=4
#SBATCH -t 04:00:00
#SBATCH -p gpu
#SBATCH --exclusive
module load cuda mpi # если используется модульная система
# UCX/RDMA тюнинг (пример — адаптируйте под вашу сеть)
export UCX_TLS=rc,ud,sm,self,gdr,cuda_copy,cuda_ipc
export UCX_NET_DEVICES=mlx5_0:1
# Опционально NCCL для внутрисерверных коллективных (если есть в сборке)
export NCCL_P2P_DISABLE=0
export NCCL_SOCKET_IFNAME=eth0 # или ib0
export OMP_NUM_THREADS=2
srun --mpi=pmix_v3 
 gmx_mpi mdrun -s topol.tpr -deffnm prod 
 -nb gpu -pme gpu -bonded gpu -update gpu -pin on

4) Чекпоинт‑рестарт (rolling, ≈ каждые 120 с)

# старт из чекпоинта
gmx mdrun -s topol.tpr -deffnm prod -cpi prod.cpt 
 -nb gpu -pme gpu -update gpu -maxh 0.05 # ~3 минуты, безопасно для Interruptible

5) YAML‑спека задания (универсальная)

job:
 name: "gmx_md_prod_v1"
 mode: "on-demand" # on-demand | interruptible
 nodes: 2
 gpus_per_node: 4
 gpu_profile: "48GB-Balanced"
 network: "rdma"
 io:
 prefetch: ["/warm/project/topol/", "/warm/project/inputs/"]
 scratch: "/nvme"
 checkpoint: "/nvme/ckpt"
 interval_seconds: 120
 run:
 entrypoint: "gmx_mpi"
 args: ["mdrun","-s","/nvme/topol.tpr","-deffnm","/nvme/prod",
 "-nb","gpu","-pme","gpu","-bonded","gpu","-update","gpu","-pin","on"]
 mpi:
 enable: true
 ranks: 8
 map_by: "ppr:1:gpu"
 hooks:
 on_start: ["python /scripts/prefetch.py"]
 on_checkpoint: ["python /scripts/register_ckpt.py"]
 on_failure: ["python /scripts/requeue.py --backoff"]
``` **Наблюдаемость/метрики/алерты**

Базовые хабы:[ https://cloudcompute.ru/solutions/monitoring-logging/](https://cloudcompute.ru/solutions/monitoring-logging/?utm_source=chatgpt.com) •[ https://cloudcompute.ru/solutions/llm-inference/observability/](https://cloudcompute.ru/solutions/llm-inference/observability/?utm_source=chatgpt.com)

**Ключевые метрики GROMACS/HPC:**

- Производительность: steps\_per\_s, ns\_per\_day (из логов mdrun), распределение step\_time\_seconds (p50/p95).
- GPU: gpu\_utilization, gpu\_memory\_used\_bytes, sm\_occupancy, gpu\_power\_watts.
- Сеть: mpi\_wait\_ratio, allreduce\_time\_ms, rdma\_rx\_mb\_s, rdma\_tx\_mb\_s.
- Диск/I‑O: io\_read\_mb\_s, io\_write\_mb\_s, checkpoint\_write\_seconds, nvme\_usage\_bytes.
- Очередь: job\_queue\_depth, jobs\_inflight, retry\_total.

**Алерты:**

- p95 step\_time\_seconds растёт &gt; X% относительно базовой трассы.
- mpi\_wait\_ratio высокий при низком gpu\_utilization → сетевое узкое место/распиновка ранков.
- checkpoint\_write\_seconds &gt; интервала → риск потери прогресса.
- gpu\_memory\_used\_bytes → VRAM‑потолок → уменьшить систему/replicas или перейти на 80 ГБ.
- Перегрев/троттлинг: аномалии по gpu\_power\_watts.

## **Экономика и формулы**

См.[ https://cloudcompute.ru/solutions/cost-planner/](https://cloudcompute.ru/solutions/cost-planner/?utm_source=chatgpt.com) и <https://cloudcompute.ru/solutions/throughput-vs-latency/>

**Базовые определения:**

ns\_per\_day = steps\_per\_s \* dt \* 86400

ns\_total = ns\_per\_day \* (t\_run\_days)

Cost\_total = ((c\_gpu \* N\_nodes \* gpus\_per\_node) \* t\_run\_hours) / U \* r + Cost\_storage

Cost\_per\_ns = Cost\_total / ns\_total

Где c\_gpu — цена/час за 1 GPU, U — целевая загрузка GPU (0..1), r — retry‑factor (для Interruptible).

**Масштабирование:**

Speedup(N) = T1 / TN

Scale\_eff(N) = Speedup(N) / N

Подбирайте N, где Scale\_eff(N) остаётся приемлемым по бюджету (Cost\_per\_ns не растёт).

**Безопасность/политики**

См.[ https://cloudcompute.ru/solutions/security/](https://cloudcompute.ru/solutions/security/?utm_source=chatgpt.com)

- **Секреты/ключи/лицензии** — через секрет‑хранилище; запрет логирования.
- **Приватные наборы данных** — разграничение доступа, шифрование «на покое», строгий egress.
- **Изоляция** — проекты/неймспейсы, ACL сети.
- **Ретеншн** — промежуточные чекпоинты автоочищаются, «золотые» точки — в «холодное».
- **Аудит** — кто запускал, что читал/писал, какие чекпоинты публиковал.

**Траблшутинг (симптом → причина → решение)**

<table><tbody><tr><td>**Симптом**

</td><td>**Причина**

</td><td>**Решение**

</td></tr><tr><td>Низкий gpu\_utilization при активной задачe

</td><td>CPU‑узкое место/PME на CPU

</td><td>Включить -pme gpu -nb gpu -update gpu; увеличить -ntomp; проверить пиннинг

</td></tr><tr><td>Высокий mpi\_wait\_ratio

</td><td>Сеть/топология/распределение ранков

</td><td>CUDA‑aware MPI + UCX/RDMA; 1 rank/GPU; pinning --map-by ppr:1:gpu

</td></tr><tr><td>Не растёт производительность при добавлении узлов

</td><td>Сетевые барьеры PME/FFT

</td><td>Оптимизировать Fourier grid (fourierspacing), уменьшить обмен, проверить RDMA

</td></tr><tr><td>Частые LINCS‑warning/нестабильность

</td><td>Жёсткая геометрия/большой шаг

</td><td>constraints=h-bonds, уменьшить dt, повысить lincs-iter

</td></tr><tr><td>Медленная запись чекпоинтов

</td><td>I/O на «тёплом»/сетевом бакете

</td><td>Писать на NVMe, rolling checkpoint, реже/инкрементально

</td></tr><tr><td>OOM VRAM

</td><td>Слишком большая система/буферы

</td><td>Снизить размер домена, уменьшить буферы, перейти на 48–80 ГБ

</td></tr><tr><td>Скачет ns\_per\_day

</td><td>Холодный кэш/фоновые задачи

</td><td>NVMe‑prefetch, закрепить частоты/ресурсы, мониторить io\_\*

</td></tr></tbody></table>

## **Как запустить в cloudcompute.ru**

1. **Шаблон**:[ https://cloudcompute.ru/solutions/templates/](https://cloudcompute.ru/solutions/templates/?utm_source=chatgpt.com)
 - «GROMACS GPU (single/multi‑GPU)» — быстрый старт.
 - «HPC MPI (Slurm/K8S)» — многоузловые задания с RDMA.
2. **Профиль GPU**: 24/48/80 ГБ по таблице выше; крупные системы — 80 ГБ (HQ); много мелких реплик — 80 ГБ + **MIG**. См. <https://cloudcompute.ru/solutions/mig/>
3. **Режим**:
 
 - Tightly‑coupled — **On‑Demand**.
 - Реплики/скрининг — **Interruptible** (чанк ≤ 120 с + чекпоинты). См. <https://cloudcompute.ru/solutions/interruptible-patterns/> и <https://cloudcompute.ru/solutions/hpc/checkpoint-restart/>
4. **Сеть/диск**: RDMA‑пулы для межузлового обмена; NVMe‑scratch для I/O; «тёплое/холодное» — по политике. См.[ https://cloudcompute.ru/solutions/storage-data/](https://cloudcompute.ru/solutions/storage-data/?utm_source=chatgpt.com)
5. **Контейнеры/CI**: закрепляйте версии CUDA/MPI/GROMACS; smoke‑бенч до масштабирования. См. <https://cloudcompute.ru/solutions/containers-ci-cd/>
6. **Наблюдаемость**: дашборды GPU/сети/диска + ns\_per\_day/steps\_per\_s. См.[ https://cloudcompute.ru/solutions/monitoring-logging/](https://cloudcompute.ru/solutions/monitoring-logging/?utm_source=chatgpt.com)

**Чек‑лист перед продом**

- mdrun GPU‑настройки включены (-nb gpu -pme gpu -update gpu -bonded gpu).
- 1 MPI‑rank на GPU, корректный pinning; OpenMP‑потоки заданы.
- RDMA/UCX подготовлены (для межузлового); MTU/интерфейсы проверены.
- NVMe‑scratch подключён; чекпоинт каждые ≤ 120 с; восстановление протестировано.
- Дашборды: ns\_per\_day, gpu\_utilization, mpi\_wait\_ratio, io\_\*; алерты p95.
- Экономика (Cost\_per\_ns) посчитана на выбранном профиле и масштабе.
- Политики безопасности/ретенции применены; логи без секретов.

**Навигация**

- Хаб HPC: <https://cloudcompute.ru/solutions/hpc/>
- Родственные приложения:
 
 - LAMMPS: <https://cloudcompute.ru/solutions/hpc/lammps/>
 - NAMD/AMBER: <https://cloudcompute.ru/solutions/hpc/namd/>
 - AutoDock‑GPU: <https://cloudcompute.ru/solutions/hpc/autodock/>
 - OpenFOAM‑GPU: <https://cloudcompute.ru/solutions/hpc/openfoam-gpu/>
 - Parabricks (геномика): <https://cloudcompute.ru/solutions/hpc/parabricks/>
 - Монте‑Карло: <https://cloudcompute.ru/solutions/hpc/monte-carlo/>
 - Граф‑аналитика (cuGraph): <https://cloudcompute.ru/solutions/hpc/graph-analytics/>
- Сквозные:
 
 - Multi‑GPU/топологии:[ https://cloudcompute.ru/solutions/multi-gpu/](https://cloudcompute.ru/solutions/multi-gpu/?utm_source=chatgpt.com) • MIG: <https://cloudcompute.ru/solutions/mig/>
 - Данные/хранилище:[ https://cloudcompute.ru/solutions/storage-data/](https://cloudcompute.ru/solutions/storage-data/?utm_source=chatgpt.com)
 - Контейнеры/CI/CD: <https://cloudcompute.ru/solutions/containers-ci-cd/>
 - Мониторинг/логи:[ https://cloudcompute.ru/solutions/monitoring-logging/](https://cloudcompute.ru/solutions/monitoring-logging/?utm_source=chatgpt.com)
 - Наблюдаемость:[ https://cloudcompute.ru/solutions/llm-inference/observability/](https://cloudcompute.ru/solutions/llm-inference/observability/?utm_source=chatgpt.com)
 - Устойчивость к прерываниям: <https://cloudcompute.ru/solutions/hpc/checkpoint-restart/> • <https://cloudcompute.ru/solutions/interruptible-patterns/>
 - Производительность:[ https://cloudcompute.ru/solutions/performance-tuning/](https://cloudcompute.ru/solutions/performance-tuning/?utm_source=chatgpt.com) • <https://cloudcompute.ru/solutions/throughput-vs-latency/>

Готовы запустить?

Запустить GPU-сервер