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 растёт > X% относительно базовой трассы.
- mpi\_wait\_ratio высокий при низком gpu\_utilization → сетевое узкое место/распиновка ранков.
- checkpoint\_write\_seconds > интервала → риск потери прогресса.
- 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-сервер