NAMD/AMBER на GPU: ускорение MD‑симуляций
Задача страницы. Практический гайд по запуску и ускорению молекулярной динамики (NAMD/AMBER) на облачных GPU: одно‑ и многоузловые конфигурации, GPU‑offload, параметры ввода, чекпоинты и устойчивость в Interruptible, наблюдаемость и экономика (ns_per_day, Cost_per_ns). Страница — входная точка ветки NAMD/AMBER.
TL;DR
- GPU‑resident пайплайн. Максимально переносим вычисления на GPU, уменьшая копии CPU↔GPU и барьеры.
- **Масштабирование. — Внутри узла: «1 MPI‑rank/процесс на 1 GPU», OpenMP‑потоки на CPU; NVLink/NVSwitch снижает накладные. — Межузловое: CUDA‑aware MPI (UCX/RDMA), низкий RTT; 1 rank/GPU с NUMA‑пиннингом. См. https://cloudcompute.ru/solutions/multi-gpu/
- PME/FFT/сеточная часть. Подбираем fourier grid / spacing (аналогичные параметры) под целевую точность и пропускную способность.
- 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. См. https://cloudcompute.ru/solutions/mig/
- Метрики. steps_per_s, ns_per_day, step_time_seconds(p50/p95), gpu_utilization, mpi_wait_ratio, rdma_rx/tx_mb_s, io_read/write_mb_s. См. https://cloudcompute.ru/solutions/monitoring-logging/
- Экономика. Cost_per_ns = Cost_total / ns_total; выбираем масштаб по кривой Scale_eff(N) так, чтобы стоимость наносекунды не росла. См. https://cloudcompute.ru/solutions/cost-planner/
Сценарии (когда это нужно)
- Продукционные треки MD. Наносекунды в сутки (ns_per_day) по крупным системам: нуждаются в стабильной сети/дисках и в GPU‑resident настройках.
- Replica/REST/λ‑окна. Множество независимых прогонов → идеально для Interruptible (короткие рестарты, агрегация статистики).
- Подбор параметров/температур. Параметрические свипы: «1 процесс = 1 GPU», короткие задачи с идиемпотентным выводом.
- Гибридные пайплайны. MD → пост‑анализ/визуализация/рендер/видео. См. https://cloudcompute.ru/solutions/rendering/ и https://cloudcompute.ru/solutions/rendering/video-transcode/
Архитектуры/пайплайны A) Одноузловой GPU‑resident (быстрый старт)
[Warm Storage] -> [Prefetch -> NVMe scratch] -> [Preprocess (top/tpr/prmtop/inpcrd)] -> [Run on GPU]
|
[Checkpoints -> warm/cold]
Ключи: 1 процесс на GPU, OpenMP‑потоки на CPU, запись чекпоинтов на NVMe, фиксированные версии контейнера. См. https://cloudcompute.ru/solutions/containers-ci-cd/
B) Многоузловой MPI + RDMA
[Warm Storage] -> [Stager] -> [NVMe scratch per node]
|
+---------------------------+---------------------------+
| (UCX/RDMA fabric) |
[Node #1: GPUxN] <====== Interconnect ======> [Node #M: GPUxN]
| |
srun/mpirun (CUDA-aware MPI, 1 rank/GPU, NUMA pinning) |
----------------> [Scheduler/Queue] <----------/
Ключи: RDMA, низкий RTT, адекватный размер домена/реплики на ранг, проверка сетевых интерфейсов/MTU.
C) Реплики/энсембли (Interruptible)
[Replica Spec / λ-windows] -> [Sharder] -> [Job Queue (chunk ≤120 s, retries)] -> [GPU Workers] -> [Reducer/QA] -> [Publish]
Ключи: короткие рестарты, идемпотентный вывод, агрегация статистики по завершении.
Профили GPU/VRAM/ориентиры
| **Профиль** | **VRAM** | **Типовые системы/прогоны** | **Режим** | **Отн. throughput (≈)** | **Примечания** |
| **24 ГБ (Compact)** | 24 ГБ | 50–300k атомов, короткие проды, реплики | On‑Demand / Interruptible | 1.0 | Подходит для массовых независимых задач |
| **48 ГБ (Balanced)** | 48 ГБ | 0.3–2 млн атомов, стандартные кампании | Оба | 1.5–1.8 | База для кластера MD |
| **80 ГБ (HQ)** | 80 ГБ | 2–5 млн+ атомов, длинные треки/многоузловые | Оба | 2.2–2.6 | MIG для множества мелких реплик |
Индексы относительны; итог зависит от параметров интегратора, сетки PME и топологии.
Конфиги и скелеты
1) NAMD: фрагмент .namd (GPU‑friendly)
# md_gpu.namd — упрощённый пример
coordinates input/coor.pdb
structure input/psf.psf
parameters input/par.prm
# Непрерывная среда/сечение
exclude scaled1-4
switching on
switchdist 10.0
cutoff 12.0
pairlistdist 14.0
# Интегратор и ограничения
timestep 2.0
rigidBonds all
langevin on
langevinTemp 300
langevinDamping 1.0
# Баростат
useGroupPressure yes
useFlexibleCell no
langevinPiston on
langevinPistonTarget 1.01325
langevinPistonPeriod 200.0
langevinPistonDecay 100.0
# PME (сеточные параметры подберите под точность/скорость)
PME yes
PMEGridSpacing 1.0
# GPU настройки (для сборок с CUDA)
useGPU yes
CUDASOAintegrate on
# Вывод/чекпоинты (под Interruptible)
restartfreq 600 ;# каждые ~600 шагов
dcdfreq 1000
outputEnergies 1000
wrapAll on
# Прогон
run 1000000
2) AMBER: mdin (GPU‑friendly для pmemd.cuda)
&cntrl
imin=0, irest=1, ntx=5,
ntb=2, ntp=1, pres0=1.0, taup=2.0,
cut=10.0, ntc=2, ntf=2,
ntt=3, gamma_ln=1.0, tempi=300.0, temp0=300.0,
dt=0.002, nstlim=500000, ntpr=5000, ntwx=5000, ntwr=5000,
ioutfm=1, ! NetCDF траектория
/
Старт/рестарт: входы prmtop/inpcrd (или rst7); рестарты *.rst7 писать на NVMe с интервалом ≤ 120 с для устойчивости.
3) Запуски (одноузловой, 4 GPU)
NAMD (MPI‑сборка):
export OMP_NUM_THREADS=2
mpirun -np 4 --bind-to numa --map-by ppr:1:gpu
namd3 +p4 md_gpu.namd > prod.log
AMBER (pmemd.cuda.MPI):
export OMP_NUM_THREADS=1
mpirun -np 4 --bind-to numa --map-by ppr:1:gpu
pmemd.cuda.MPI -O -i mdin -o md.out -p sys.prmtop -c sys.rst7 -r prod.rst7 -x traj.nc
Для сборок без MPI используйте по одному процессу на GPU и запускайте несколько независимых копий (реплики).
4) Slurm (2 узла × 4 GPU, UCX/RDMA)
#!/bin/bash
#SBATCH -J md_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
export OMP_NUM_THREADS=2
# NAMD:
# srun --mpi=pmix_v3 namd3 +p8 md_gpu.namd > prod.log
# AMBER:
srun --mpi=pmix_v3 pmemd.cuda.MPI -O -i mdin -o md.out -p sys.prmtop -c sys.rst7 -r prod.rst7 -x traj.nc
5) Rolling‑рестарт (≈ каждые 120 с)
NAMD (перезапуск из чекпоинта):
# в .namd: useRestart yes (или задать input restart-файлы)
namd3 +p4 md_gpu.namd +restart > resume.log
AMBER:
# следующий шаг с последнего rst7
pmemd.cuda.MPI -O -i mdin -o md2.out -p sys.prmtop -c prod.rst7 -r prod2.rst7 -x traj2.nc
6) YAML‑спека задания (универсальная)
job:
name: "md_namd_amber_prod"
mode: "on-demand" # on-demand | interruptible
nodes: 2
gpus_per_node: 4
gpu_profile: "48GB-Balanced"
network: "rdma"
io:
prefetch: ["/warm/project/inputs/"]
scratch: "/nvme"
checkpoint: "/nvme/ckpt"
interval_seconds: 120
run:
entrypoint: "pmemd.cuda.MPI" # или "namd3"
args: ["-O","-i","/nvme/mdin","-o","/nvme/md.out",
"-p","/nvme/sys.prmtop","-c","/nvme/sys.rst7",
"-r","/nvme/prod.rst7","-x","/nvme/traj.nc"]
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)
**Ключевые:**
- Производительность: steps\_per\_s, ns\_per\_day, распределение step\_time\_seconds (p50/p95).
- GPU: gpu\_utilization, gpu\_memory\_used\_bytes, sm\_occupancy, gpu\_power\_watts.
- Сеть: mpi\_wait\_ratio, rdma\_rx\_mb\_s, rdma\_tx\_mb\_s, allreduce\_time\_ms.
- Диск/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 → потолок → уменьшить систему/реплики или перейти на 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
**Масштабирование:**
Speedup(N) = T1 / TN
Scale\_eff(N) = Speedup(N) / N
Выбирайте N узлов там, где Scale\_eff(N) остаётся приемлемой, а Cost\_per\_ns — минимальной.
**Replica/энсембли:**
Cost\_per\_replica = (c\_gpu \* t\_replica / 3600) / U \* r
Total\_cost = Σ\_i Cost\_per\_replica\_i
## **Практики производительности**
- **GPU‑resident.** Включайте GPU‑offload, держите частые ядра на GPU, минимизируйте CPU‑секции.
- **1 процесс = 1 GPU.** Пиннинг к NUMA, OpenMP‑потоки на CPU для «обвязки».
- **PME/сеточная часть.** Подберите сетку/spacing для баланса точность↔скорость; проверяйте влияние на ns\_per\_day.
- **Pinned‑memory, CUDA‑aware MPI.** Через UCX с GDR, минимум копий CPU↔GPU.
- **NVMe‑scratch.** Предзагрузка входов, запись рестартов локально; write‑behind в «тёплое».
- **Чекпоинтинг.** Rolling‑рестарты ≤ 120 с (для **Interruptible**). См. <https://cloudcompute.ru/solutions/hpc/checkpoint-restart/>
- **Стабильность.** Зафиксируйте версии (CUDA/библиотеки/движки) и прогоните smoke‑бенч. См. <https://cloudcompute.ru/solutions/containers-ci-cd/>
**Безопасность/политики**
См.[ 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, высокий mpi\_wait\_ratio
</td><td>Сеть/распиновка рангов
</td><td>CUDA‑aware MPI + RDMA/UCX, 1 rank/GPU, NUMA‑пиннинг
</td></tr><tr><td>ns\_per\_day не растёт с узлами
</td><td>Барьеры PME/FFT, сеть
</td><td>Оптимизировать сетку/spacing, проверить RDMA/MTU, уменьшить N или увеличить работу/ранг
</td></tr><tr><td>Частые падающие рестарты
</td><td>Интервал слишком велик/медленный диск
</td><td>Писать на NVMe, уменьшить интервал, включить write‑behind
</td></tr><tr><td>LINCS/разлёт (AMBER: SHAKE)
</td><td>Слишком большой dt/жёсткие связи
</td><td>rigidBonds all/ntc=2 ntf=2, уменьшить dt, повысить устойчивость
</td></tr><tr><td>OOM VRAM
</td><td>Слишком большая система/буферы
</td><td>Уменьшить размер домена/реплики, перейти на 48–80 ГБ, снизить буферы
</td></tr><tr><td>Пиление step\_time
</td><td>Холодный кэш/I‑O конкуренция
</td><td>Prefetch на NVMe, pinned memory, исключить конкурентов по диску
</td></tr><tr><td>Рассинхрон траекторий
</td><td>Разные версии/флаги сборки
</td><td>Единый контейнер, фиксированные версии, smoke‑бенч
</td></tr></tbody></table>
## **Как запустить в cloudcompute.ru**
1. **Шаблон**:[ https://cloudcompute.ru/solutions/templates/](https://cloudcompute.ru/solutions/templates/?utm_source=chatgpt.com)
- «NAMD/AMBER GPU (single/multi‑GPU)» — быстрый старт;
- «HPC MPI (Slurm/K8S)» — многоузловые задания (UCX/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/движков; smoke‑бенч до масштабирования. См. <https://cloudcompute.ru/solutions/containers-ci-cd/>
6. **Наблюдаемость**: дашборды GPU/сети/диска + ns\_per\_day/steps\_per\_s, алерты p95. См.[ https://cloudcompute.ru/solutions/monitoring-logging/](https://cloudcompute.ru/solutions/monitoring-logging/?utm_source=chatgpt.com)
**Чек‑лист перед продом**
- GPU‑offload включён; 1 процесс = 1 GPU; NUMA‑пиннинг и OpenMP настроены.
- RDMA/UCX подготовлены для межузлового режима; интерфейсы/MTU выровнены.
- NVMe‑scratch активен; рестарты укладываются в ≤ 120 с; сценарий восстановления проверен.
- Дашборды: ns\_per\_day, gpu\_utilization, mpi\_wait\_ratio, io\_\*; алерты p95.
- Экономика (Cost\_per\_ns) посчитана на целевом масштабе; кривые Speedup/Scale\_eff подтверждены.
- Версии контейнера/библиотек зафиксированы; smoke‑бенч на 1/2/М узлах.
- Политики безопасности/ретенции применены; логи без секретов.
**Навигация**
- Хаб HPC: <https://cloudcompute.ru/solutions/hpc/>
- Родственные:
- GROMACS: <https://cloudcompute.ru/solutions/hpc/gromacs/>
- LAMMPS: <https://cloudcompute.ru/solutions/hpc/lammps/>
- Чекпоинт‑рестарт: <https://cloudcompute.ru/solutions/hpc/checkpoint-restart/>
- Монте‑Карло: <https://cloudcompute.ru/solutions/hpc/monte-carlo/>
- Граф‑аналитика (cuGraph): <https://cloudcompute.ru/solutions/hpc/graph-analytics/>
- Геномика (Parabricks): <https://cloudcompute.ru/solutions/hpc/parabricks/>
- Сквозные:
- 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/performance-tuning/](https://cloudcompute.ru/solutions/performance-tuning/?utm_source=chatgpt.com) • <https://cloudcompute.ru/solutions/throughput-vs-latency/>
- Interruptible‑паттерны: <https://cloudcompute.ru/solutions/interruptible-patterns/>
Готовы запустить?
Запустить GPU-сервер